基于逻辑回归的乳腺癌数据分类预测:分析威斯康星乳腺肿瘤数据集
以下是基于实验步骤完成的代码实现,以及对结果的分析。 ```python # 导入模块 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split # 划分训练及和测试集 from sklearn.metrics import accuracy_score, confusion_matrix, classification_report from sklearn.linear_model import LogisticRegression # 加载数据集 data = pd.read_csv('breast_cancer_data.csv', header=None) # 假设数据文件名为 breast_cancer_data.csv data.columns = [ 'Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class' ] # 查看数据信息 print(data.info()) # 处理缺失或异常数据(包含?列的处理) data = data.replace('?', np.nan) # 将'?'替换为NaN data['Bare Nuclei'] = data['Bare Nuclei'].astype(float) # 转换为浮点数类型 data['Bare Nuclei'].fillna(data['Bare Nuclei'].median(), inplace=True) # 用中位数填充空值 # 查看“class”列中2(良性)和4(恶性)数据,并以饼图显示 class_counts = data['Class'].value_counts() plt.pie(class_counts, labels=['Benign (2)', 'Malignant (4)'], autopct='%1.1f%%') plt.title('Class Distribution') plt.show() # 将数据集拆分成自变量X(二维)和因变量Y(class)(一维) X = data.drop(['Sample code number', 'Class'], axis=1) y = data['Class'] # 将标签从2和4转换为0和1,便于后续分析 y = y.apply(lambda x: 0 if x == 2 else 1) # 利用train_test_split将数据集拆分成训练集和测试集,测试集占30% X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 利用逻辑回归对数据进行训练和预测 model = LogisticRegression(max_iter=1000) model.fit(X_train, y_train) y_pred = model.predict(X_test) # 评估逻辑回归模型 accuracy = accuracy_score(y_test, y_pred) conf_matrix = confusion_matrix(y_test, y_pred) class_report = classification_report(y_test, y_pred) # 输出准确率,混淆矩阵,分类报告 print(f"Accuracy: {accuracy:.4f}") print("Confusion Matrix:") print(conf_matrix) print("Classification Report:") print(class_report) # 对结果进行分析 # 混淆矩阵解读: # [[TP, FN], # [FP, TN]] # TP:预测为恶性且实际为恶性的样本数 # FN:预测为良性但实际为恶性的样本数 # FP:预测为恶性但实际为良性的样本数 # TN:预测为良性且实际为良性的样本数 # 分类报告解读: # precision:精确度,衡量预测为正类的样本中有多少是真正的正类。 # recall:召回率,衡量实际为正类的样本中有多少被正确预测为正类。 # f1-score:精确度和召回率的调和平均数。 ``` 额外需要注意的逻辑点 1. 数据预处理中,使用中位数填充缺失值是一种常见方法,但如果数据分布严重偏斜,可能需要考虑其他策略(如均值或众数)。 2. 在逻辑回归模型中,`max_iter` 参数设置过小可能导致模型无法收敛,需根据实际情况调整。 3. 如果数据集不平衡(例如恶性样本远少于良性样本),可以考虑使用过采样、欠采样或调整类别权重来改善模型性能。 ######[AI写代码神器 | 889点数解答 | 2025-06-19 12:02:10]
- Java代码实现从JSON数据中提取ID,涉及“数据”与“项目 - 知识库”结构(字节豆包 | 603点数解答 | 2025-04-15 22:48:51)234
- C++ 实现:计算一排鹅与最高、最矮鹅的身高差及代码详解(字节豆包 | 549点数解答 | 2025-11-16 20:19:06)81
- 编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现(DeepSeek | 549点数解答 | 2026-01-11 17:49:54)46
- 工程师语境中的“回归”:分析、测试与退步含义全解析(百度文心 | 213点数解答 | 2023-11-09 18:23:11)229
- Java 实现:轻松生成 5 位数字、大小写字母混合验证码( | 266点数解答 | 2024-03-06 17:39:10)329
- 深度剖析:游戏中两个 Buff 效果的触发条件、逻辑及注意要点 (阿里通义 | 566点数解答 | 2024-11-26 14:24:12)258
- 深度剖析 Vue 2 插槽:从基础使用到高级玩法(字节豆包 | 165点数解答 | 2024-11-29 11:25:06)214
- C++实现支持四则运算的简单计算器,处理除数为0和无效操作(字节豆包 | 241点数解答 | 2025-10-29 20:21:29)59
- C语言破解甲乙丙真假话谜题:开发中需留意的三大要点(字节豆包 | 444点数解答 | 2025-11-24 00:10:58)49
- MATLAB 实现:自定义输入信号与频率的时域采样定理演示系统(字节豆包 | 417点数解答 | 2024-12-17 20:28:04)278
- 基于 LPC1114 的多功能电子钟:强大功能+完整代码揭秘!(字节豆包 | 787点数解答 | 2025-05-11 21:01:44)224
- 基于 LPC1114 的多功能电子钟:从功能设计到代码框架全揭秘(字节豆包 | 532点数解答 | 2025-05-15 08:32:18)150