今天学习的是Logistic Regresion 说他是回归,其实他主要处理分类问题,用回归来处理分类问题其思想是:根据现有的数据对分类边界建立回归公式,以此进行分类。
优点:计算代价不高,易于理解和实现,
缺点:容易欠拟合,分类的精度可能不高
适用数据类型为:数值型和标称型
sigmoid 函数 1 + e的-x次方分之一
为了实现Logistic回归分类器,我们可以在每个特征上都乘以一个回归系数,然后把所有的结果都相加,将这个总和带入到sigmoid函数,进而得到一个范围在0~1之间的数,任何大于0.5的数被分入到1类,小于0.5 的数被分到0类。所以Logistic回归也被看作是一种概率估计。
sigmoid函数的输入记为z,
如果采用向量的写法,可以写成 z = x ,他们表示将这两个向量对应元素相乘然后全部相加后得到z,其中的x是输入数据, 向量w是我们要寻找的最佳回归系数。为了寻找该最佳参数需要用到最优化理论中的一些知识。
梯度上升算法:
梯度上升算法基于的思想是,如果想要找到该函数的最大值,最好的方法就是沿着该函数的梯度方向进行探寻,如果梯度记为
则函数f(x,y)的梯度由下式表示,
根据公式已经可以预想到算法怎么完成了,初始化一个w,制定一个步长,比如0.1,算法的思路就是,每次移动0.1然后重新计算该点处最佳的梯度,然后沿着梯度方向再次移动0.1,依次循环,直到误差小于一定范围,或者制定一个循环的次数,达到次数也可以停止。
随机梯度算法
刚刚的梯度上升算法,在每次更新回归系数时需要遍历整个数据集,当特征很多时,计算的复杂度会很高。一种改进的方法是一次仅用一个样本点来更新回归系数,该方法成为随机梯度上升算法。由于可以在新样本到来时对分类器进行增量更新,所以随机梯度上升算法是一种在线学习算法,与之对应的一次处理所有数据的方法叫做批处理。
处理数据中的缺失值:
使用该特征其他的数据计算处的均值来填补该特征下缺失的数据
使用特殊值如-1来填补缺失值
剔除有缺失数据的样本
使用相似样本的均值为缺失值填充
使用另外的机器学习算法先预测缺失值
以上部分代码:https://github.com/HanGaaaaa/MLAProject/tree/master/Logistic
下面是数学理论支持部分和扩展部分:
如图中所说的,这个式子后面要用到,化简用的
对每个样本来说:
所以对于m个样本来说就是连续相乘。然后用对数似然求得对数似然函数后,求导。
接下来定义一个事件的几率:
对于logistic回归,其实是一种广义的线性回归,因为他的几率的对数是一个线性回归,也叫做对数线性回归。
这样的前提下,可以对sigmoid函数做一个证明。
所以这里认为对于一个几率的对数是线性的模型,他的概率就是sigmoid函数。
以上求得的对数似然函数其实是求的最大值,是一种梯度上升算法。
那么对于logistic回归,有没有损失函数呢。
可以把刚刚求得的对数似然取一个负号就是负对数似然,可以用此来当作他的损失函数。
详细的推导为:
这个函数看起来很复杂,他的y的取值是0和1,当y取0时 loss = (1- y)* ln(1 + ),当y取1时,loss = y * ln(1 + )
如果把y的取值变为-1和1,那么函数会变得很漂亮。这里需要一些处理。
处理之后y会可以放到e的指数上面。
最后引出softmax回归,他主要用来处理多分类问题:
依据就是当前这类在总类别中的占比。
这部分实践代码:https://github.com/HanGaaaaa/MLAPractice/tree/master/LogisticRegression