第四天 Logistic回归
什么是logistic回归
logistic回归用来处理分类问题,我们这次的目标是预测被观测元素属于哪个组?举一个简单的例子:一个人是否会在大选中投票?Y/N
Logistic回归的原理和本质 💡
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回归中,会造成方程二边取值区间不同和普遍的非直线关系。因为Logistic中因变量为二分类变量,某个概率作为方程的因变量估计值取值范围为0-1,但是,方程右边取值范围是无穷大或者无穷小。所以,才引入Logistic回归。
Logistic回归实质:发生概率除以没有发生概率再取对数。就是这个不太繁琐的变换改变了取值区间的矛盾和因变量自变量间的曲线关系。究其原因,是发生和未发生的概率成为了比值 ,这个比值就是一个缓冲,将取值范围扩大,再进行对数变换,整个因变量改变。不仅如此,这种变换往往使得因变量和自变量之间呈线性关系,这是根据大量实践而总结。所以,Logistic回归从根本上解决因变量要不是连续变量怎么办的问题。还有,Logistic应用广泛的原因是许多现实问题跟它的模型吻合。例如一件事情是否发生跟其他数值型自变量的关系。
Logistic回归适用条件 💡
logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
Logistic回归模型的适用条件
- 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
- 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
- 自变量和Logistic概率是线性关系
- 各观测对象间相互独立。
它是如何运行的
logistic回归使用基于logistic的概率函数来估量一组feature之间的关系,sigmoid函数是一个S形曲线的函数,它可以将任意值映射为0-1的值
sigmoid函数Logistic回归为什么要用sigmoid 💡
原因是sigmoid所具有的最佳性质,即maximum entropy(最大熵)的性质。
虽然不清楚历史上孰先孰后,但这并不妨碍maximum entropy给了logistic regression一个很好的数学解释。
为什么maximum entropy好呢?entropy翻译过来就是熵,所以maximum entropy也就是最大熵。熵原本是信息论中的概念,用在概率分布上可以表示这个分布中所包含的不确定度,熵越大不确定度越大。所以大家可以想象到,均匀分布熵最大,因为基本新数据是任何值的概率都均等。
而我们现在关心的是,给定某些假设之后,熵最大的分布。也就是说这个分布应该在满足我假设的前提下越均匀越好。比如大家熟知的正态分布,正是假设已知mean和variance后熵最大的分布。
回过来看logistic regression,这里假设了什么呢?首先,我们在建模预测 Y|X
,并认为 Y|X
服从伯努利分布,所以我们只需要知道 P(Y|X)
;其次我们需要一个线性模型,所以P(Y|X) = f(wx)
。接下来我们就只需要知道 f 是什么就行了。而我们可以通过最大熵原则推出的这个 f,就是sigmoid。
做出预测
在预测中这些概率值必须转化为二值化数据,以便用于分类任务,在sigmoid函数中那些在0到1之间的值将会根据器位置转化为0或者1
Logistic 和 Linear(线性回归) 区别 💡
logistic回归给出的是离散的输出结果,而线性回归是连续值:
- 线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。
- 线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量。
- 线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系
- logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系
结论
logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。
行动起来
- 导入训练集测试集
import pandas as pd
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.linear_model import LogisticRegression
train = pd.read_csv('dataset/monks-3.train',header=-1,sep=' ')
test = pd.read_csv('dataset/monks-3.test',header=-1,sep=' ')
print(train.head())
2. 文本属性转为数字
Y = train.values[:, 0:1].astype(np.uint8)
X = train.values[:, 1:-1].astype(np.uint8)
Y_test = test.values[:, 0:1].astype(np.uint8)
X_test = test.values[:,1:-1].astype(np.uint8)
- 训练模型
regressor = LogisticRegression(penalty='l1')
regressor.fit(X, Y)
4 预测结果
y_pred = regressor.predict(X_test)