机器学习--逻辑回归与softmax

1. 简介

逻辑回归和Softmax回归是两个基础的分类模型,前者主要处理二分类问题,而后者处理多分类问题,但事实上Softmax回归就是逻辑回归的一般形式。

2.逻辑回归模型

 sigmoid

想了解Logistic回归,我们必须先看一看Sigmoid函数 ,我们也可以称它为Logistic函数。它的公式如下:

机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

整合成一个公式,就变成了如下公式:

机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

下面这张图片,为我们展示了Sigmoid函数的样子。

机器学习实战教程(六):Logistic回归基础篇之梯度上升算法

3.对数几率

对数几率(log odds)

由(1-1)变化得到

其中

(1-2)

(1-2)

4. 极大似然法(maximum likelihood)

①极大似然法:最大化对数似然函数

初始化参数

再令P为

则似然项可重写为

(1-3)

②将最大化问题转换为最小化负对数似然函数求解

 5.Softmax回归

Softmax回归处理多分类问题,我们假设函数 形式如下:
 


和逻辑回归一样,得到loss函数为:


 
其中的1{.}是一个指示性函数,即当大括号中的值为真时,该函数的结果就为1,否则其结果就为0。


然后计算损失函数的偏导函数,得到:


 
之后就可以用如果要用梯度下降法,或者L-BFGS法求得未知参数。


 
看上面的推到我们可以发现,对每一个参数减去一个参数,最后的结果没有影响。其实softmax 回归中对参数的最优化解不只一个,每当求得一个优化参数时,如果将这个参数的每一项都减掉同一个数,其得到的损失函数值也是一样的,这说明解不是唯一的。


之所以会出现这样的现象,因为损失函数不是严格非凸的,也就是说在局部最小值点附近是一个”平坦”的,所以在这个参数附近的值都是一样的了。
为避免出现这样的情况,加入正则项(比如说,用牛顿法求解时,hession矩阵如果没有加入规则项,就有可能不是可逆的从而导致了刚才的情况,如果加入了规则项后该hession矩阵就不会不可逆了),加入正则项后的loss函数表达式为:
 
此时loss函数的偏导函数为:
 

同样的,我们在逻辑回归中,也可以加上正则项。

5 LogisticRegression 参数说明

参数 意义 备注
penalty 惩罚项,str类型,可选参数为l1和l2,默认为l2 用于指定惩罚项中使用的规范 。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),加约束的情况下,理论上应该可以获得泛化能力更强的结果。另newton-cg、sag和lbfgs求解算法只支持L2规范。
dual 对偶或原始方法,bool类型,默认为False。 对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。
tol 停止求解的标准,float类型,默认为1e-4 即求解到多少的时候停止,认为已经求出最优解。
c 正则化系数λ的倒数,float类型,默认为1.0,必须是正浮点型数。 像SVM一样,越小的数值表示越强的正则化。
fit_intercept 是否存在截距或偏差,bool类型,默认为True。 指定是否应将常量(a.k.a. bias或intercept)添加到决策函数中。
intercept_scaling float类型,默认为1。 仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。【注意】合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。
class_weight 用于标示分类模型中各种类型的权重,可以是一个字典dict或 ’balanced’ 字符串,默认为None,即不输入,不考虑权重 如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重 。 举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。
random_state 随机数种子,int类型,可选参数,默认为无 仅在正则化优化算法为sag,liblinear时有用。
solver 优化算法选择参数,有五个可选参数,即newtoncg, lbfgs, liblinear, sag,saga。 默认为liblinear。 solver参数决定了我们对逻辑回归损失函数的优化方法,有五种算法可以选择,分别是: liblinear: 使用开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。saga:线性收敛的随机优化算法的的变种。 对于小型数据集,‘liblinear’是一个不错的选择,而 'sag’和’saga’对于大型的更快。对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失; 'liblinear’仅限于one-vs-rest方案。‘newton-cg’, 'lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证。 您可以使用sklearn.preprocessing中的缩放器预处理数据。版本0.17中的新功能:随机平均梯度下降求解器。版本0.19中的新功能:SAGA slover。
max_iter 算法收敛最大迭代次数,int类型,默认为100 仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数
multi_class 分类方式选择参数,str类型,可选参数为’ovr’和’multinomial’,默认为’ovr’。 ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。多类选项可以是’ovr’或’multinomial’。 如果选择的选项是’ovr’,那么二进制问题适合每个标签。 另外,最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear解算器。版本0.18中的新功能:“多项式”案例的随机平均梯度下降求解器。
verbose 日志冗长度,int类型。默认为0 0就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出
warm_start 热启动参数,bool类型。默认为False。 如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化),否则,只需擦除以前的解决方案。 对于liblinear解算器没用。
n_jobs 并行数,int类型,默认为1。 1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。

6.参考

https://blog.csdn.net/weixin_38278334/article/details/82958979

猜你喜欢

转载自blog.csdn.net/lgy54321/article/details/83065092