• 逻辑回归


    逻辑回归

      逻辑回归,虽然有回归二字,但其实是个分类算法,主要用于二分类.

      逻辑回归是吧线性回归得到的值,进行一个转换,来解决分类问题

    sigmoid函数

      输入范围-∞到+∞, 输出的值在[0,1]

      公式是这样的

     e为常数,如果z趋近于+∞,e的负z次就越接近于0,g(z)=1.如果z趋近于-∞,e的负z次就越来越大.分母越大,g(z)趋近于0.

    曲线图:

     逻辑回归的公式:

     逻辑回归的损失函数,优化(了解一下)

    ### 与信息熵有些相似,对数. ###


    逻辑回归API

    sklearn.linear_model.LogisticRegression(penalty='l2',C=1.0)
        Logistic 回归分类器
        coef_:回归系数
        自带L2正则化解决过拟合问题.(C参数.可修改)

    项目案例 : 癌症预测

      项目背景:通过给定的良/恶性乳腺肿瘤数据,判断是否患癌症

      数据:原始数据下载地址

      数据描述:

        1. 699条样本,共11列数据,第一列用于检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值

        2. 包含16个缺失值,用'?'标出.

    项目流程:

    • 网上获取数据(工具pandas)
    • 数据缺失值处理,标准化
    • 逻辑回归算法

    代码:

    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  # 召回率...deng
    
    # 读取数据 提前构造列名
    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']
    data = pd.read_csv('breast-cancer-wisconsin.data',names=columns)
    
    # data.head()
    # 数据处理-缺失值
    data = data.replace(to_replace='?',value=np.NaN)
    # 删除  有缺失值的不要
    data = data.dropna()
    
    # 分割数据集
    x_train, x_test,y_train,y_test =train_test_split(data[columns[1:10]],data[columns[10]],test_size=0.25)  # 1参数为特征,2参数目标值
    # ↑除去id不要 ,其他的列都要
    
    # 标准化
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    # 目标值需要做标准化吗? 不需要,分类
    
    # 逻辑回归预测
    lg = LogisticRegression()
    lg.fit(x_train,y_train)
    
    print('准确率:',lg.score(x_test,y_test))  #不是我们需要的,知道也没用,要的是召回率
    
    y_predict = lg.predict(x_test)
    print('召回率:',classification_report(y_test,y_predict,labels=[2,4],target_names=['良性','恶性']))
    # classification_report参数:1. 真实值,2. 预测值,3. labels 分类内的值,4. target_names 对分类结果命名
    # 后续还可以做交叉验证,或调整一下参数

    输出结果:

    ###  0.94,100个有6个没检查出来,放跑了,运气好. ### 

     

  • 相关阅读:
    VMWare ESX Server
    ubuntu 13.04 xrdp 远程桌面连接问题[转载]
    wget 使用技巧
    C# 跨线程调用问题
    ASP.NET WEB API 返回JSON 出现2个双引号问题
    ASP.NET MVC 4 中Razor 视图中JS无法调试
    Android 如何修改gen下包的名字
    打开AVD时报”Data partition already in use. Changes will not persist!”
    Android 将APK文件安装到AVD中并分析其界面结构
    Android 实现界面(Activity)的跳转
  • 原文地址:https://www.cnblogs.com/luowei93/p/12635194.html
Copyright © 2020-2023  润新知