逻辑回归的介绍
应用场景:
- 广告点击率
- 是否为垃圾邮件
- 是否患病
- 金融诈骗
- 虚假账号
逻辑回归是解决二分类问题的利器
能得出概率值
逻辑回归:用线性回归的式子作为输入
sigmoid函数
函数特点:把数据转换成0-1之间的值,刚好和概率相似
逻辑回归公式
注:z表示回归方程的结果
逻辑回归的损失函数、优化
损失函数:
1、均方误差
不存在多个局部最低点,只有一个最小值
2、对数似然损失
存在多个局部最小值
找最小值解决方案:
目前无法直接找到最小值,只能不断去训练寻找最小值
1、多次随机初始化,多次比较最小值结果
2、求解过程中,调整学习率(从一个点开始找,有可能直接跳过高点继续找)
尽管没有全局最低点,但是效果都是不错的。
API
sklearn.linear_model.LogisticRegression
注:penalty正则化,C代表正则化力度
逻辑回归也像岭回归一样,可以防止过拟合。
回归案例
良/恶性乳腺癌肿瘤预测
原始数据的下载地址:
https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/
数据描述:
- 数据样例:
- 案例分类预测流程:
1、网上获取数据(工具pandas)
2、数据缺失值处理、标准化
3、LogisticRegression估计器流程
案例
from sklearn.datasets import load_boston
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
from sklearn.externals import joblib
import pandas as pd
import numpy as np
'''
1.样品编号ID编号
2.团块厚度1-10
3.像元大小的均匀性1-10
4.细胞形状的均匀性1-10
5.边缘附着力1-10
6.单上皮细胞大小1-10
7.裸核1-10
8.淡色染色质1-10
9.正常核仁1-10
10.线粒体1-10
11.等级:(2代表良性,4代表恶性)
'''
def logistic():
'''
逻辑回归做二分类问题,进行癌症预测(根据细胞的属性特征)
:return:
'''
# TODO 构造列标签名字
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']
# TODO 读取数据
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data", names=column)
# print(data)
'''
Sample code number Clump Thickness ... Mitoses Class
0 1000025 5 ... 1 2
1 1002945 5 ... 1 2
2 1015425 3 ... 1 2
'''
# TODO 缺失值处理
data = data.replace(to_replace='?', value=np.nan)
data = data.dropna()
# TODO 进行数据的分割 特征值,目标值
x_train,x_test,y_train,y_test = train_test_split(data[column[1:10]],data[column[10]],test_size=0.25)
# TODO 进行标准化处理
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# TODO 逻辑回归预测
lg = LogisticRegression(C=1.0) # C 正则化力度
lg.fit(x_train, y_train)
y_predict = lg.predict(x_test)
print("特征的权重", lg.coef_)
print("准确率:", lg.score(x_test, y_test))
print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]))
'''
precision recall f1-score support
良性 0.98 0.96 0.97 110
恶性 0.94 0.97 0.95 61
'''
return
if __name__ == '__main__':
logistic()
总结
softmax方法 - 逻辑回归在多分类问题上的推广
生成模型和判别模型
先验概率:需要提前在数据中获取某个类别的概率,总结历史数据的概率
生成模型:有先验概率
判别模型:没有先验概率