我与机器学习 - [Today is LR] - [Logistic 回归]

今天学习的是Logistic Regresion 说他是回归,其实他主要处理分类问题,用回归来处理分类问题其思想是:根据现有的数据对分类边界建立回归公式,以此进行分类。

优点:计算代价不高,易于理解和实现,

缺点:容易欠拟合,分类的精度可能不高

适用数据类型为:数值型和标称型

sigmoid 函数 1 + e的-x次方分之一

为了实现Logistic回归分类器,我们可以在每个特征上都乘以一个回归系数,然后把所有的结果都相加,将这个总和带入到sigmoid函数,进而得到一个范围在0~1之间的数,任何大于0.5的数被分入到1类,小于0.5 的数被分到0类。所以Logistic回归也被看作是一种概率估计。

sigmoid函数的输入记为z,

如果采用向量的写法,可以写成 z = w^{T}x ,他们表示将这两个向量对应元素相乘然后全部相加后得到z,其中的x是输入数据, 向量w是我们要寻找的最佳回归系数。为了寻找该最佳参数需要用到最优化理论中的一些知识。

梯度上升算法:

梯度上升算法基于的思想是,如果想要找到该函数的最大值,最好的方法就是沿着该函数的梯度方向进行探寻,如果梯度记为\triangledown

扫描二维码关注公众号,回复: 4577098 查看本文章

则函数f(x,y)的梯度由下式表示,

根据公式已经可以预想到算法怎么完成了,初始化一个w,制定一个步长,比如0.1,算法的思路就是,每次移动0.1然后重新计算该点处最佳的梯度,然后沿着梯度方向再次移动0.1,依次循环,直到误差小于一定范围,或者制定一个循环的次数,达到次数也可以停止。

随机梯度算法

刚刚的梯度上升算法,在每次更新回归系数时需要遍历整个数据集,当特征很多时,计算的复杂度会很高。一种改进的方法是一次仅用一个样本点来更新回归系数,该方法成为随机梯度上升算法。由于可以在新样本到来时对分类器进行增量更新,所以随机梯度上升算法是一种在线学习算法,与之对应的一次处理所有数据的方法叫做批处理。

处理数据中的缺失值:

使用该特征其他的数据计算处的均值来填补该特征下缺失的数据

使用特殊值如-1来填补缺失值

剔除有缺失数据的样本

使用相似样本的均值为缺失值填充

使用另外的机器学习算法先预测缺失值

以上部分代码:https://github.com/HanGaaaaa/MLAProject/tree/master/Logistic

下面是数学理论支持部分和扩展部分:

如图中所说的,这个式子后面要用到,化简用的

对每个样本来说:

所以对于m个样本来说就是连续相乘。然后用对数似然求得对数似然函数后,求导。

接下来定义一个事件的几率:

对于logistic回归,其实是一种广义的线性回归,因为他的几率的对数是一个线性回归,也叫做对数线性回归。

这样的前提下,可以对sigmoid函数做一个证明。

所以这里认为对于一个几率的对数是线性的模型,他的概率就是sigmoid函数。

以上求得的对数似然函数其实是求\Theta的最大值,是一种梯度上升算法。

那么对于logistic回归,有没有损失函数呢。

可以把刚刚求得的对数似然取一个负号就是负对数似然,可以用此来当作他的损失函数。

详细的推导为:

这个函数看起来很复杂,他的y的取值是0和1,当y取0时 loss = (1- y)* ln(1 + e^{\Theta x}),当y取1时,loss = y * ln(1 + e^{-\Theta x}

如果把y的取值变为-1和1,那么函数会变得很漂亮。这里需要一些处理。

处理之后y会可以放到e的指数上面。

最后引出softmax回归,他主要用来处理多分类问题:

依据就是当前这类在总类别中的占比。

这部分实践代码:https://github.com/HanGaaaaa/MLAPractice/tree/master/LogisticRegression

猜你喜欢

转载自blog.csdn.net/weixin_43409627/article/details/84889473