创作灵感:
我国恶性肿瘤负担日益加重,城乡差异较大,地区分布不均衡,癌症防控形势严峻;发达国家和发展中国家癌谱并存,防治难度巨大。为了能够及时发现癌症,降低死亡率,因此人们是否患有癌症的准确预测成了我们的重要目标。
逻辑回归:
逻辑回归是一种用于分类问题的机器学习算法。它基于线性回归模型,通过将输入特征与权重进行线性组合,并将结果通过一个称为sigmoid函数的激活函数映射到0和1之间的概率值来进行分类。
在逻辑回归中,我们首先对数据进行特征工程和预处理,然后建立一个逻辑回归模型。模型的训练过程通常使用最大似然估计或梯度下降算法来找到最优的权重参数。一旦模型训练完成,我们可以使用该模型对新的输入进行分类预测。
逻辑回归广泛应用于二元分类问题,如垃圾邮件分类、疾病诊断等。它也可以扩展到多类别分类问题,称为多项逻辑回归或 softmax 回归。
癌症病人的预测就是一个逻辑回归的二元分类问题。
代码实现:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 列名列表
names = [
'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'
]
# 读取数据
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=names)
# 缺失值处理
data = data.replace(to_replace="?", value=np.nan) # 将"?"替换为np.nan
data = data.dropna() # 删除包含缺失值的行
# 划分特征和标签
x = data.iloc[:, :-1] # 特征
y = data["Class"] # 标签
# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)
# 特征缩放
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train) # 对训练集进行特征缩放
x_test = transfer.transform(x_test) # 对测试集进行特征缩放
# 构建逻辑回归模型并训练
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 预测
y_predict = estimator.predict(x_test)
# 计算准确率
accuracy = estimator.score(x_test, y_test)
# 打印分类报告
res = classification_report(y_test, y_predict, labels=[2, 4], target_names=['良性', '恶性'])
print(res)
结果分析:
对于“良性”类别,模型的准确率(precision)为0.99,召回率(recall)为0.99,F1值为0.99。这表示模型能够在预测为“良性”类别时有很高的准确性和覆盖率。
对于“恶性”类别,模型的准确率为0.98,召回率为0.98,F1值为0.98。同样地,模型在预测为“恶性”类别时也具备较高的准确性和覆盖率。
整体上,模型在测试集上取得了很好的表现,准确率、召回率和F1值都达到了很高的水平。加权平均值(weighted avg)也显示了模型整体的良好性能。
知识汇总:
pandas:
进行数据读取,使用pandas给数据加入索引
sklearn:
train_test_split
:用于划分训练集和测试集StandardScaler
:用于特征缩放LogisticRegression
:用于构建逻辑回归模型classification_report
:用于打印分类报告numpy:
np.nan
是NumPy中表示缺失值(NaN,Not a Number)的特殊值。NaN通常用于表示缺失或无效的数据。
np.nan
与任何其他值进行运算的结果仍为np.nan。
np.nan
与任何值的比较操作都会返回False。
np.isnan()
可以判断一个值是否为np.nan。
当评估一个分类模型的性能时,准确率(precision)、召回率(recall)和F1值是常用的指标。这些指标可以帮助我们理解模型在不同类别上的预测质量。
准确率(Precision)是指模型在所有被分类为正例的样本中,正确预测为正例的比例。准确率告诉我们被模型预测为正例的样本有多少是真正的正例。它的计算公式如下:
Precision = TP / (TP + FP)
其中,TP(True Positive)表示真正例的数量,FP(False Positive)表示假正例的数量。
召回率(Recall)是指在所有实际为正例的样本中,模型正确预测为正例的比例。召回率告诉我们模型有多少能够捕捉到真正的正例。它的计算公式如下:
Recall = TP / (TP + FN)
其中,TP(True Positive)表示真正例的数量,FN(False Negative)表示假反例的数量。
F1值是综合考虑了准确率和召回率的指标,它是准确率和召回率的加权调和平均值。F1值的计算公式如下:
F1 = 2 * (Precision * Recall) / (Precision + Recall)
F1值将准确率和召回率结合起来,可以平衡模型的精确性和召回能力。F1值的取值范围是0到1,值越接近1表示模型的性能越好。
需要注意的是,准确率、召回率和F1值都是针对二分类问题的指标,如果涉及多类别分类问题,可以计算每个类别的准确率、召回率和F1值的平均或加权平均来进行评估。