逻辑回归

逻辑回归

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

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

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个没检查出来,放跑了,运气好. ### 

 

原文地址:https://www.cnblogs.com/luowei93/p/12635194.html