逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了。
一、模型介绍
logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。
Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。
应用场景
注:逻辑回归是解决二分类问题的利器。
广告点击率、是否是垃圾邮件、是否患病、金融诈骗、虚假账号
二、逻辑回归详解
将线性回归的式子作为该类问题的输入,最终实现对分类问题的处理。
逻辑回归问题处理的过程:线性回归式子做输入——> sigmoid函数对输入数据进行转换——> 实现分类问题的处理。
1、sigmoid函数介绍
sigmoid函数可以将一个输入项转换成[0,1]之间的任意值。
注: Z:代表线性回归的结果,作为逻辑回归的输入项
(1)sigmoid函数图像
2、逻辑回归的损失函数(当作信息熵用)
与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降方法求解。损失函数求得的结果是在0/1类的概率
对数似然损失函数图形分析:
(1)目标值是1类时:
当预测为1类的概率h越来越接近1时,y=1的损失越来越小
(2)目标值是0类时:
当判断为1类的概率h越来越大接近1时,y=0的损失越来越大
三、损失函数分析
目前接触到的损失函数有:均方误差 和 对数似然损失。
均方误差:(不存在多个局部最低点)只有一个最小值
对数似然损失:多个局部最小值(目前解决不了的问题)
多个局部最小值问题目前解决不了,但是可以通过一些办法适当处理,解决办法(尽量改善):
- 1、多次随机初始化,多次比较最小值结果
- 2、求解过程中调整学习率
- 注:尽管没有全局最低点,但是使用以上方法效果都是不错的
四、逻辑回归的API
sklearn.linear_model.LogisticRegression
逻辑回归的处理过程中,也会出现过拟合现象,好在API加入了 penalty 参数,默认加入了L2正则化处理,解决了过拟合现象。C参数值含义:正则化的力度
五、逻辑回归预测癌症案例
良 / 恶性乳腺癌肿数据
This breast cancer databases was obtained from the University of Wisconsin Hospitals.
数据描述:
- 1、699条样本,共11列数据,第一列用于检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值。
- 2、包含16个缺失值,用“?”标出
原始数据下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/
1、原始数据告知:
2、数据内部属性介绍:
3、具体分析
在癌症案例的预测过程中,我们需要关注召回率,了解到真正是癌症的患者有多少没有被预测出来!
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import 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("E:/python/pyData/breast-cancer-wisconsin.data",
names = column)
#缺失值进行处理(?标记)
#to_place指定要被替换的值,value指定替换后的值
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)
#进行标准化处理(分类问题目标值不需要标准化处理)
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
#逻辑回归进行预测
lg = LogisticRegression(penalty='l2', C=1.0)
lg.fit(x_train, y_train) #训练模型
y_predict = lg.predict(x_test)
print("权重值:", lg.coef_)
print("准确率:", lg.score(x_test, y_test))
#召回率
print("召回率:")
print(classification_report(y_test, y_predict,
labels=[2,4],target_names=['良性', '恶性']))
return None
if __name__ == '__main__':
logistic()
六、逻辑回归总结
应用:广告点击率预测、是否是垃圾邮件、是否患病、金融诈骗、是否为虚假账号
优点:适合需要得到一个分类概率的场景,简单,速度快
缺点:不好处理多分类问题
1、逻辑回归在多分类问题上的应用
可以做多分类问题,但是一般不用。逻辑回归问题解决多分类问题的决绝办法:1V1,1Vall
常使用softmax方法:逻辑回归在多分类问题上的推广,将在神经网络算法中使用,多用于图像处理等方面。
2、逻辑回归和朴素贝叶斯的区别
逻辑回归问题 | 朴素贝叶斯 | |
解决问题 | 二分类 | 多分类问题 |
应用场景 | 癌症、二分类需要概率情况下 | 文本分类 |
参数 | 正则化力度 | 没有 |
模型 | 判别模型 | 生成模型 |
共同点: | 得出的结果都有概率解释 |
生成模型和判定模型:
从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi。
生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。
- 隐马可夫模型、朴素贝叶斯
判别模型:学习得到条件概率分布P(y|x),即在特征x出现的情况下标记y出现的概率。
- k-近邻模型,决策树、随机森林、神经网络、逻辑回归问题
两者区别:有无先验概率,生成模型有先验概率,而判别模型没有
数据要求:生成模型需要的数据量比较大,能够较好地估计概率密度;而判别模型对数据样本量的要求没有那么多。