3.1 线性回归与逻辑回归
3.1.1 线性回归及代码展示
在机器学习中,线性回归模型是探讨变量y和多个变量x1,x2,…,xn间的关系,用已有的训练数据为基础,总结问题本身的规律变化,并建立相应的回归模型来以预测未知的样本数据。
假设有训练数据集数为m个,则(x(i),y(i)),i=1,2,…,m为一个训练数据,其中x(i)=(1,)和y(i)分别是第i个训练数据对应的自变量与因变量,则回归函数如下:
hθ(x)=θ0+θ1x1+θ2x2+…θnxn=θTx
其中
下面需要定义代价函数用来描述hθ(x(i))与对应的y(i)的接近程度:
的作用在于求导时,消掉常数系数。梯度下降法、最小二乘法等方法便是求代价函数最小值的方法。
最小二乘法是比较直接的使用矩阵运算来取得θ的一种算法,算法步骤是对代价函数J(θ)求偏导并令其等于零,所得到θ即为模型参数,即
矩阵形式即为
XTY=XTXθ
参数即解得为:
θ=(XTY)-1XTY
梯度下降法须要选取恰当的学习速率α和多次迭代更新来求得最终结果,而最小二乘法不需要。但最小二乘法须要求解(XTY)-1,其计算量大约为O(n3),当训练数据集过大时求解过程非常耗时。
Python中线性回归的使用代码展示如下。
3.1.2 逻辑回归及代码展示
逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。
线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θ,使得其满足Y=Xθ。此时Y是连续的,那离散的情况如何解决呢?则可以将Y做一次函数转换:g(Y)。如果令g(Y)的值在某个实数区间的时候是类别1,在另一个实数区间的时候是类别2,以此类推,该模型就可以分类了。这个函数g在逻辑回归中一般取为sigmoid函数,形式如下:
该函数有一个非常好的性质,即当z趋于正无穷时,g(z)趋于1,而当z趋于负无穷时,g(z)趋于0,这非常适合于分类概率模型,可以将(-∞,∞)的结果映射到(0,1)之间并作为概率,另外,它还有一个很好的导数性质:
g′(z)=g(z)(1-g(z))
这个通过函数对g(z)求导很容易得到,后面会用到这个公式。
如果令g(z)中的z为:z=xθ,这样就得到了二元逻辑回归模型的一般形式:
其中x为样本输入,h(x)为模型输出,可以理解为某一分类的概率大小。而θ为分类模型的要求出的模型参数。h(x)的值越小,而分类为0的概率越高,反之,值越大分类为1的概率越高。如果靠近临界点,则分类准确率会下降。
按照二元逻辑回归的定义,样本输出是0或者1两类。那么有:
P(y=1|x,θ)=h(x)
P(y=0|x,θ)=1-h(x)
y的概率分布函数表达式用矩阵法表示,即为:
P(Y|X,θ)=h(x)y(1-h(x))1-y
得到了y的概率分布函数表达式,就可以用似然函数最大化来求解需要的模型系数θ。为了方便求解,这里用对数似然函数最大化。其中:
似然函数的代数表达式为:
根据上面的推导设立恰当的损失函数来方便逻辑回归的算法求解:
此时训练时的梯度下降方向即为:
以上是不加正则项的推导,现实情况往往是需要加正则项的,具体加什么样的正则项需要根据具体任务判断。
逻辑回归是工业界非常常用也是非常基础的算法,应当动手推导一遍公式,并写代码实现,以保证完全熟悉该算法。下面是代码展示:
逻辑回归也可直接调用函数直接实现:
其中重要的参数如下。
(1)正则化penalty
默认是L2的正则化,也可以选择L1正则化。如果在实际项目中发现过拟合情况严重或者由于模型特征过多,从而想让模型系数稀疏化可以选择L1正则化。
(2)优化算法solver
一共有4种选择:
1)linlinear:即坐标轴下降法;
2)lbfgs:拟牛顿法的一种;
3)newton-cg:牛顿法的一种;
4)sag:随机平均梯度下降,该算法每次仅使用了部分样本计算梯度迭代,适合样本数据量很大的情况,收敛速度优于SGD和其他3种算法。
需要注意的是正则化项的选择会影响损失函数优化算法的选择。4种优化算法newton-cg、lbfgs、liblinear和sag都适用于L2正则化,但是如果选择L1正则化,则只能选择liblinear。这是由于L1正则化的损失函数不是连续可导的,而另外3种优化算法时要求损失函数的一阶可导或者二阶可导。
(3)分类方式multi_class
multi_class参数即指分类方式的选择,可以选择one-vs-rest(OvR)和many-vs-many(multinomial)。需要注意的是liblinear无法用于multinomial这种分类方式。
(4)类型权重class_weight
class_weight参数是指分类模型中各种类型的权重。如果在class_weight选择balanced,则会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别中,从而可以解决样本不平衡的问题。sample_weight也可以用于解决这类问题。
3.1.3 逻辑回归模型如何进行多分类
多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种,OvR指每次将一个类的样例作为正例,所有其他类的样例作为反例来训练N个分类器,在测试时若仅有一个分类器预测为正类,则对应的类别标记作为分类结果。MvM指每次将若干个类作为正类,若干个其他类作为反类。
此处介绍一种比较简单的多分类算法:假设是N元分类模型,把所有第N类的样本作为正例,除了第N类样本以外的所有样本都作为负例,然后在上面进行二元逻辑回归,得到第N类的分类模型。其他类的分类模型获得以此类推。
可以使用多项式逻辑回归模型计算最后得出概率值:
3.1.4 逻辑回归分类和线性回归的异同点是什么
逻辑回归的模型本质上是一个线性回归模型,是以线性回归为理论支持的。但线性回归模型由于没有sigmoid函数的非线性形式,所以不易处理0/1分类问题。
另外一方面经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数,另外线性回归的预测值是整个实数域范围内,而逻辑回归的预测值是[0,1]。