您的位置:首页 > 其它

机器学习实战第五章 - Logistic回归(包括GD和SGD的比较)

2018-03-05 16:53 429 查看

一,Logistic回归

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

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

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

主要就是利用sigmoid函数σ(z)=11+exp−z的特点,如下图所示:



令z=WTX,如果z>0即σ(z)>0.5,就将该样本分为1类;如果z<0即σ(z)<0.5,就将该样本分为0类。

关键是如何利用训练数据找到最佳的模型参数W。

二,模型参数估计

利用极大似然估计法来估计模型参数。

过程如下:

首先假设P(Y=1|x)=π(x),P(Y=0|x)=1−π(x)

则似然函数为:∏i=1n[π(xi)]yi[1−π(xi)]1−yi

为了加快求解,取对数,则对数似然函数为:L(w)=∑i=1n[yilogπ(xi)+(1−yi)log(1−π(xi))]=∑i=1n[yi(wxi)−log(1+exp(wxi))]

对L(w)求极大值,得到w的估计值。常用方法有梯度下降法、随机梯度下降法和拟牛顿法等等。

三,梯度下降法和随机梯度下降法

核心公式如下:

w:=w−α∂L(w)∂w=w−α∗errorVec∗dataMatrix

其中w为向量。

两者之间最主要的区别在于随机梯度下降法一次仅用一个样本点来更新回归系数。

而且为了减少在训练过程中回归系数的周期性波动,可以使用样本随机选择α动态减少机制的随机梯度下降法,该方法也比采用固定α的方法收敛速度更快。具体代码如下所示:

def stocGradDescent(dataMatrix,classLabels,numsIter):
m,n = shape(dataMatrix)
weights = ones(n)
for k in range(numsIter):
for i in range(m):
alpha = 4.0/(i+k+1.0)+0.01
randIndex = int(random.uniform(0,m))
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex]-h
weights = weights + alpha*error*dataMatrix[randIndex]
return weights


其中第6行就是α动态减少机制,第7行就是样本的随机选择。

总之,随机梯度下降法与梯度下降法的效果相当,但占用资源更少。此外,随机梯度下降法是一个在线算法,它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批处理运算。

加速梯度下降法的技巧

1,特征缩放(feature scaling)

xi=xiSi

其中,Si是特征xi的取值范围的大小,即Si=max(xi)−min(xi)。

2,均值归一化(mean normalization)

xi=xi−uiSi

其中,ui是特征xi的均值,Si同上(Si也可以取xi的标准差)。

四,处理数据集中的缺失值

主要有以下几种方法:

使用可用特征的均值来填补缺失值。

使用特殊值来填补缺失值,如-1、0。

忽略缺失值的样本。

使用相似样本的均值来填补缺失值。

使用另外的机器学习算法来预测缺失值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习