zoukankan      html  css  js  c++  java
  • 机器学习之线性分类器(Linear Classifiers)——肿瘤预测实例

    线性分类器:一种假设特征与分类结果存在线性关系的模型。该模型通过累加计算每个维度的特征与各自权重的乘积来帮助决策。


    # 导入pandas与numpy工具包。

    import pandas as pd
    import numpy as np


    # 创建特征列表。
    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']


    # 使用pandas.read_csv函数从互联网读取指定数据。
    data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', names = column_names )


    # 将?替换为标准缺失值表示。
    data = data.replace(to_replace='?', value=np.nan)
    # 丢弃带有缺失值的数据(只要有一个维度有缺失)。
    data = data.dropna(how='any')


    # 输出data的数据量和维度。

    data.shape


    # 使用sklearn.cross_valiation里的train_test_split模块用于分割数据。
    from sklearn.cross_validation import train_test_split


    # 随机采样25%的数据用于测试,剩下的75%用于构建训练集合。
    X_train, X_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], test_size=0.25, random_state=33)


    # 从sklearn.preprocessing里导入StandardScaler。
    from sklearn.preprocessing import StandardScaler
    # 从sklearn.linear_model里导入LogisticRegression与SGDClassifier。
    from sklearn.linear_model import LogisticRegression
    from sklearn.linear_model import SGDClassifier


    # 标准化数据,保证每个维度的特征数据方差为1,均值为0。使得预测结果不会被某些维度过大的特征值而主导。
    ss = StandardScaler()
    X_train = ss.fit_transform(X_train)
    X_test = ss.transform(X_test)


    # 初始化LogisticRegression与SGDClassifier。
    lr = LogisticRegression()
    sgdc = SGDClassifier()


    # 调用LogisticRegression中的fit函数/模块用来训练模型参数。
    lr.fit(X_train, y_train)
    # 使用训练好的模型lr对X_test进行预测,结果储存在变量lr_y_predict中。
    lr_y_predict = lr.predict(X_test)


    # 调用SGDClassifier中的fit函数/模块用来训练模型参数。
    sgdc.fit(X_train, y_train)
    # 使用训练好的模型sgdc对X_test进行预测,结果储存在变量sgdc_y_predict中。
    sgdc_y_predict = sgdc.predict(X_test)


    # 从sklearn.metrics里导入classification_report模块。
    from sklearn.metrics import classification_report


    # 使用逻辑斯蒂回归模型自带的评分函数score获得模型在测试集上的准确性结果。
    print( 'Accuracy of LR Classifier:', lr.score(X_test, y_test))
    # 利用classification_report模块获得LogisticRegression其他三个指标的结果。
    print (classification_report(y_test, lr_y_predict, target_names=['Benign', 'Malignant']))


     # 使用随机梯度下降模型自带的评分函数score获得模型在测试集上的准确性结果。
    print( 'Accuarcy of SGD Classifier:', sgdc.score(X_test, y_test))
    # 利用classification_report模块获得SGDClassifier其他三个指标的结果。
    print (classification_report(y_test, sgdc_y_predict, target_names=['Benign', 'Malignant']))




    LogisticRegression比SGDClassifier在测试集上有更高的准确性,因为Scikit—learn中用解析的方式计算LogisticRegression(用时长),而用梯度法估计SGDClassifier的参数(用时短),因此训练大规模数据10万量级以上建议用随机梯度算法对模型参数进行估计。


    参考书籍:python机器学习及实践——从零开始通往Kaggle竞赛之路

  • 相关阅读:
    lodash-es 最小化引入
    shortid id生成器
    结构体声明的方式 及类namespace的前置声明
    结构体中使用 箭头 与 点 的区别
    进入Docker容器的几种方式
    协议分析处理工具ProtoBuf
    PubSub ——“发布/订阅”模式
    在Windows/linux下进行gdb调试
    C++中的域作用符::的作用
    C++ 中常用关键字及其用法
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411663.html
Copyright © 2011-2022 走看看