机器学习:原理简明教程06-逻辑斯谛回归与最大熵模型
欢迎转载,作者:Ling,注明出处:机器学习:原理简明教程06-逻辑斯谛回归与最大熵模型
参考:《统计学习方法》
一句话概括(逻辑回归):线性回归是通过寻找一个最佳的拟合直线解决问题,cost函数为最小二乘,使用的方法是梯度下降学习参数,逻辑回归用于分类,是采用了sigmod函数变形后的指数函数模型,r然后后选择一个cost函数,通过梯度下降不断学习参数而得到最佳模型。
一句话概括(最大熵模型):最大熵模型是在满足经验期望和理论期望相等的约束条件下,求条件熵的最大化问题,它通过拉格朗日方法化简,最后得到概率的一个判别式,概率判别式无法直接求参数,需要通过GIS求近似参数,GIS通过比较经验期望和理论期望是否接近,不断进行更新,直到两者比较接近为止。
对数线性模型:
- 逻辑斯谛回归
- 最大熵模型
逻辑斯谛分布
二项逻辑斯蒂回归模型
模型参数估计
注:
π表示概率P,上面有为啥可以替换成w*x
多项逻辑斯谛回归
补充两个材料介绍:线性逻辑回归以及逻辑回归与分类,目前讲得最好的
梯度下降算法:向偏导数方向递减,每次根据所有样本进行参数更新
h = sigmoid(dataMatrix*weights) #矩阵内积
error = (labelMat - h) #向量减法
weights += alpha * dataMatrix.transpose() * error #矩阵内积
随机梯度下降:梯度下降算法在每次更新权值向量的时候都需要遍历整个数据集,该方法对小数据集尚可。但如果有数十亿样本和成千上万的特征时,它的计算复杂度就太高了。一种改进的方法是一次仅用一个样本点的回归误差来更新权值向量,这个方法叫随机梯度下降算法。好处是在线学习,即来了新样本,不必全部重新计算。
h = sigmoid(sum(dataMatrix[i]*weights)) #挑选(伪随机)第i个实例来更新权值向量
error = classLabels[i] - h
weights = weights + dataMatrix[i] * alpha * error
改进的随机梯度下降算法:既然随机梯度上升算法最终给出的参数不好,那是否仅仅是因为参数没有足够收敛,而算法本质是优秀的呢?对此,可以逐步减小步长,避免参数周期性的抖动。
alpha = 4/(1.0+j+i)+0.0001 #步长递减,但是由于常数存在,所以不会变成0
randIndex = int(random.uniform(0,len(dataIndex))) #总算是随机了
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex]) #删除这个样本,以后就不会选到了
三者收敛速度比较:
最大熵
熵(李航:60页):
说明:熵越大,越无序,概率越平均,在信息论文表示信息传输需要的最小空间
最大熵原理(李航:80页):
例子:
定义:
最大熵学习(李航:83页):
说明:
- 即:对P(Y/X)先求导,然后在求使得熵最大的w
- 为何最大熵模型用的是条件熵,因为更好求解
例子:
注:该例子比较容易通过求导w获得最后概率值,但是实际问题有n个w,很难一一求导求极值,所以需要之后的GIS方法
极大似然估计(李航:87,不看也行):
模型学习的最优化算法:
常用的方法有改进的迭代尺度法、梯度下降法、牛顿法或拟牛顿法,牛顿法或拟牛顿法一般收敛速度更快。
GIS算法:非常好的资料
1. 初始化所有λi 为任意值,一般可以设置为0,即:
其中λ的上标(t)表示第t论迭代,下标i表示第i个特征,n是特征总数。
2. 重复下面的权值更新直至收敛:
收敛的判断依据可以是λi 前后两次的差价足够小。其中C一般取所有样本数据中最大的特征数量
注:
1) 19式子表示,如果理论和实际期望差不多,λ不要調整,如果如果两者相差比较大,理论的过大,调小λ,否则调大
2)
3)
N为样本数,f为(xj,yj)的组合是否出现,i表示(xj,yj)在所有xy组合的下标,就是第几个xy组合
该式子表示样本期望,p表示每个样本概率,都是1/N
权值乘以到底组合是否存在,n是所有x,y组合数,全部累加,除以Z,该式子是理论期望
4)整个公式含义:就是已经给出一个经验公式,然后通过该公式更新权值。该公式的两个期望,样本期望是固定的,通过统计x,y不同组合数得到n个值,理论期望需要借助上一轮的权值计算,主要通过迭代N个样本得到
注意n与N区别
改进的迭代尺度法 :
拟牛顿法
留言