一、Logistic回归算法
Logistic回归是一种线性拟合的分类算法,其中回归是指通过一条线对点进行拟合(该线称为最佳拟合曲线),即通过一条线使尽量多的点都在线上或离线最近(误差最小)。而logistic回归算法就是先获得所有特征的最佳拟合曲线的参数
然后再根据sigmod函数进行分类
sigmod函数是最典型的S曲线,它看起来很像一个阶跃函数,即当z>0时,sigmod(z)>0.5,且当z无限大时,sigmod(z)无限接近于1,相反则无限接近于0,故可采用sigmod函数进行分类,即当z>0时将其分为1类,小于0时分为0类,故logistic回归算法便成了求最佳拟合曲线的参数w的分类算法。
二、基于梯度上升法的拟合参数计算
梯度上升/下降和牛顿法是最常用的无约束最优参数的计算方法,此处采用其中梯度上升法。梯度上升的最基本的思想:不管是上升还是下降,如果一个函数是可微的,那么沿着它的一阶导数的方向(即梯度方向)上升和下降是最快的,如果梯度为▽,则函数f(x,y)的梯度可表示为:
在此处求参数时,先利用最大似然估计求得似然函数,然后再利用梯度上升算法求最大似然函数得参数值,从而求得z的参数值,故在此处梯度上升算法的迭代公式为:
,其中α是迭代的步长,或者叫做学习率。
故对于logistic回归算法来说,设:
为了求最优参数w,令其代价函数为:
对其取对数似然函数有:
故当采用梯度上升算法求最优w值时,只需要求得对数似然函数的导数,即可获得梯度上升的梯度,然后就知道迭代公式。具体推导步骤见下图:
故根据图片上的推导可知,梯度上升的迭代公式为:
这就是为什么在代码函数gradAscent中采用weights = weights + alpha * dataMatrix.transpose()* error 这句代码的原因,当时想了半天,查了好久终于推导出来了。
三、代码
对于logistic回归算法来说,理解sigmod函数和理解基于梯度上升求最优化参数w之后就没什么好讲的了,其中对于随机梯度上升算法来说就是改进了原来每次遍历所有数据集而变成每次只取一个数据集进行迭代,并且迭代过的数据集以后便不再使用,其他的就没什么好说的了。然后有什么问题的话,代码都加上了注解,直接上代码吧:
# -*- coding: utf-8 -*-
"""
Created on Mon Sep 17 20:15:27 2018
@author: chenxi
"""
fro