Advertisement

【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测

阅读量:

逻辑回归—良/恶性乳腺癌肿瘤预测

  • 逻辑回归的目标函数及其优化过程
    与线性回归原理相同, 但因其为分类任务, 目标函数有所差异, 需要依赖于使用梯度下降算法来寻找最优参数
    sklearn中提供了逻辑回归相关的API
复制代码
    sklearn.linear_model.LogisticRegression
  • LogisticRegression
复制代码
    sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)
    Logistic回归分类器
    coef_:回归系数

只能解决二分类问题:

广告点击率

判断用户的性别

预测用户是否会购买给定的商品类

判断一条评论是正面的还是负面的


LogisticRegression回归案例-良/恶性乳腺癌肿瘤预测

良性恶性乳腺癌肿数据

在这里插入图片描述

7.属性域

1.样本编号ID号
2.组织块厚度(mm)
3.细胞大小的一致性(%)
4.细胞形状的一致性(%)
5.边缘粘着力(单位:MPa)
6.单上皮细胞大小(μm)
7.裸核度
8.淡染色质状态(%)
9.均匀核仁状态(%)
10.线粒体数目密度(/mm²)
11.分级结果:其中2级代表良性组织特征,
4级代表恶性组织特征

8.缺少属性值:16

复制代码
    第1到第6组中的16个实例包含一个缺失项
    (即不可用)属性值,现在用“?”表示。

9.班级分布:

复制代码
    良性:458(65.5%)
    恶性:241(34.5%)

此处恶性为正例,良性为反例。
哪一个类别少,判定概率值是这个类别!

在这里插入图片描述

数据描述
(1)本研究共收集了699条样本数据,这些样本总计包含11项指标。其中第一列为用于检索的唯一标识符,在其余九列中分别记录了与肿瘤相关的医学特征信息;最后一列为表示肿瘤类型的状态数值。
(2)在研究数据中发现存在16个缺失记录,并具体位置以问号'?'标注。

pandas使用

复制代码
    pd.read_csv(’’,names=column_names)
    column_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']
    return:数据
    
    replace(to_replace=’’,value=):返回数据
    dropna():返回数据
  • 良性与恶性乳腺癌肿分类模型
  1. 从网络上获取数据,并利用Python中的pandas库进行操作
  2. 对数据进行缺失值处理以及标准化处理
  3. 使用逻辑回归估计器建立分类模型
复制代码
    from sklearn.linear_model import LinearRegression, SGDRegressor,  Ridge, LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import mean_squared_error, classification_report
    import pandas as pd
    import numpy as np
    def logistic():
    """
    逻辑回归做二分类进行癌症预测(根据细胞的属性特征)
    :return: NOne
    """
    # 构造列标签名字
    column = ['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=column)
    
    print(data)
    
    # 缺失值进行处理
    data = data.replace(to_replace='?', value=np.nan)
    #删除
    data = data.dropna()
    
    # 进行数据的分割
    x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25)
    #1-10列是特征值,最后一列10代表11列目标值
    
    # 进行标准化处理
    std = StandardScaler()
    
    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)
    
    # 逻辑回归预测
    lg = LogisticRegression(C=1.0)
    
    lg.fit(x_train, y_train)
    
    print(lg.coef_)
    
    y_predict = lg.predict(x_test)
    
    print("准确率:", lg.score(x_test, y_test))
    
    print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]))
    
    return None
    
    
    if __name__ == "__main__":
    logistic()
复制代码
    [699 rows x 11 columns]
    [[1.35467578 0.18001121 0.74721681 0.89447017 0.38691172 1.26415265
95382046 0.53218847 0.51240579]]
    准确率: 0.9707602339181286
    召回率:               precision    recall  f1-score   support
    
          良性       0.97      0.98      0.98       112
          恶性       0.97      0.95      0.96        59
    
    accuracy                           0.97       171
       macro avg       0.97      0.97      0.97       171
    weighted avg       0.97      0.97      0.97       171

全部评论 (0)

还没有任何评论哟~