一、逻辑回归算法原理
逻辑回归主要解决二分类问题,用来表示某件事情发生的可能性。
逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数sigmoid函数映射,即先把特征线性求和,然后使用函数g(z)将做为假设函数来预测。g(z)函数可以将连续值映射到0和1上。logistic回归的假设函数如下所示,线性回归假设函数只是θx。
假设有一场球赛,我们有两支球队的所有出场球员信息、历史交锋成绩、比赛时间、主客场、裁判和天气等信息,根据这些信息预测球队的输赢。假设比赛结果记为y,赢球标记为1,输球标记为0,这就是一个典型的二元分类问题,可以用逻辑回归算法来解决。
1.1 预测函数
需要找出一个预测函数模型,使其值输出在[ 0 , 1 ]之间。然后选择一个基准值,如0.5,如果算出来的预测值大于0.5,就认为其预测值为1,反之则其预测值为0。我们选择g(z)作为预测函数,函数g ( z ) 称为Sigmoid函数,也称为Logistic函数。图像如下:
当z=0时,g(z)=0.5。
当z>0时,g(z)>0.5,当z越来越大时,g(z)无限接近于1。
当z<0时,g(z)<0.5,当z越来越小时,g(z)无限接近0。
对二分类来说,这是一个非黑即白的世界。
1.2 激活函数
·sigmoid函数
1.3 损失
逻辑回归的损失,称之为对数似然损失,公式如下:
分开类别:
怎么理解单个的式子呢?这个要根据log的函数图像来理解:
无论何时,我们都希望损失函数值,越小越好
分情况讨论,对应的损失函数值:
·当y=1时,我们希望h θ ( x ) h_\theta(x)h
(x)值越大越好;
·当y=0时,我们希望h θ ( x ) h_\theta(x)h
(x)值越小越好;
1.4 优化
同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。
二、代码实现
import pandas as pd
iris=load_iris()
X=iris.data
Y=iris.target
#将数据划分为训练集和测试集
#将数据划分为训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x_test,y,test_size=0.25, random_state=0)
#导入模型,调用逻辑回归LogisticRegression()函数
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(penalty='l2', solver='newton-cg', multi_class='multinomial')
#1. penalty: str类型,正则化项的选择。正则化主要有两种:11和12,默认为12正则化。
#2.newton-cg:利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
#3.'multinomial':直接采用多分类逻辑回归策略。
lr.fit(x_train, y_train)
#对模型进行评估
print('逻辑回归训练集准确率:%.3f'% lr.score(x_train,y_train))
print('逻辑回归测试集准确率:%.3f'% lr.score(x_test,y_test))
from sklearn import metrics
pred = lr.predict(x_test)
pred
三、正则化
正则化的意义:避免过拟合。
模型如果很复杂,变量值稍微变动一下,就会引起预测精度的问题。正则化可以避免过拟合的原因就是它降低了特征的权重,使得模型更简单。
主要思想:保留所有的特征变量,因为我们不太清楚要舍掉哪个特征变量,并且又想尽可能保留信息。所以我们只能是惩罚所有变量,让每个特征变量对结果的影响值变小,这样的话你拟合出来的模型才会更光滑更简单,从而减少过拟合的可能性。
1.L1正则化
L1=|w1|+|w2|+|w3|+...+|wn|
即损失函数再加一项正则化系数λ乘上L1正则化表达式
(λ决定惩罚力度,过高可能会欠拟合,过小无法解决过拟合)
作用:L1正则化有特征筛选的作用,对所有参数的惩罚力度都一样,可以让一部分权重变为零(降维),因此产生稀疏模型,能够去除某些特征(权重为0则等效于去除)
2.L2正则化
L2=w21+w22+…+w2n=wTw
即损失函数再加一项正则化系数λ乘上L2正则化表达式
作用:使各个维度权重普遍变小,减少了权重的固定比例,使权重平滑
四、逻辑回归优缺点
优点:
实现简单,广泛的应用于工业问题上;
分类时计算量非常小,速度很快,存储资源低;
便利的观测样本概率分数;
对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
计算代价不高,易于理解和实现;
缺点:
当特征空间很大时,逻辑回归的性能不是很好;
容易欠拟合,一般准确度不太高
不能很好地处理大量多类特征或变量;
只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;
对于非线性特征,需要进行转换;