机器学习(四):w·x+b模型(1)

假设输入空间 xRn
对于分类问题,我们使用的假设空间为 H={h=sign(wTx+b)|wRn,bR}
对于回归问题,我们使用的假设空间为 H={h=wTx+b|wRn,bR}
其实际意义也比较简单:对于分类问题,用一个超平面将特征空间分成两个部分;对于回归问题,用一个超平面去拟合真实函数。
这类模型有:线性回归模型(linear regression)、逻辑回归模型(logistic regression)、感知器模型(perceptron)、支持向量机(SVM)等等。


下文中,training set为m个数据 (x(i),y(i)),i=1,2...,m ,其中w,x都是列向量。training set的矩阵形式是:

X=x(i)T...x(m)T,Y=y(i)T...y(m)T

{下文我们将交替使用J和 Ein 来表示损失函数}

1. 线性回归

线性回归用于解决回归问题。其输出y通常为实数。
为了方便起见,令 w0=b,x0=1 ,此时 w,xRn+1

1.1 选择损失函数及学习策略

很明显地,使用平方损失函数,

J(w)=1mi=1m(wx(i)y(i))2=1m||XwY||2=1m(XwY)T(XwY)
我们的学习策略是:最小化J(w)。

1.2 使用的学习算法

1.2.1 梯度下降法

wJ(w)=2mi=1m(wx(i)y(i))x(i)=2m(XTXwXTY)
那么使用梯度下降法的公式是:
wt+1=wtηwJ(w)

由于此问题是一个凸函数,所以梯度下降法总是能找到最优解。

1.2.2 Normal equation解析解

wJ(w)=0

XTXw=XTY
如果 XTX 可逆,那么可以直接求得解析解;否则需要求解伪逆。总之,是可以解析求解的。

1.2.3两种方法的对比

这里写图片描述
通常情况下,如果数据量大于10000,那么选择梯度下降法比较好。

1.3 正则化

J(w)=1m[i=1m(wx(i)y(i))2+λj=1nw2j]=1m[(XwY)T(XwY)+λj=1nw2j]
(XTXλ[000I])w=XTY
正则化的过程中有
w0=w0η2mi=1m(wx(i)y(i))x(i)0
wj=wjη2m[i=1m(wx(i)y(i))x(i)j+λwj]

2. 逻辑回归

线性回归用于解决分类问题。其输出 y{0,+1}
为了方便起见,令 w0=b,x0=1 ,此时 w,xRn+1

2.1 引言

假设我有w,要解决分类问题可以有 h(x)=sign(wTx) 。很多情况下,我们并不想得到这种形式,而是想要得到:x属于某一类别的概率是多少。
所以,我们需要一个函数将wx映射为概率:
这里写图片描述
图示的s型曲线称为sigmoid函数。于是我们有了 H={h(x)=11+exp(wTx)|wRn+1}
现在,y=0的概率是1-h(x),y=1的概率是h(x)。对于sigmoid函数,有

h(x)=1h(x)

现在我们考虑:我们已经有了training set, 那么这个trainning set出现的概率是
P(x(1))P(y(1)|x(1))×...×P(x(m))P(y(m)|x(m))

对于y=0,我们使用 1h(x) 来估计P(y|x);对于y=1,我们使用 h(x) 来估计P(y|x)。也即
P(y|x)=yh(x)+(1y)(1h(x))

根据极大似然法,我们应该最大化这一概率,其中 P(x(i)) 不能改变,所以应该最大化
i=1m[y(i)h(x(i))+(1y(i))(1h(x(i)))]

取以2为低的对数,化乘法为加法:
i=1m[y(i)logh(x(i))+(1y(i))log(1h(x(i)))]

最大化上述公式。

2.2 损失函数和学习策略

前面是介绍了逻辑回归损失函数的来历;现在我们可以直接从此数学定义开始,定义损失函数:

j(w)=1mi=1m[y(i)logh(x(i))+(1y(i))log(1h(x(i)))]
我们的学习策略是:最小化损失函数。

2.3 学习算法——梯度下降

wj(w)=1mi=1m(h(x(i))y(i))x(i)

此损失函数并非是凸函数,所以很可能找到局部最优解,而不是全局最优解。所以我们需要用多个初始值运行梯度下降算法。

2.4正则化

j(w)=1m{i=1m[y(i)logh(x(i))+(1y(i))log(1h(x(i)))]+λj=1nw2j}
w0=w0η1mi=1m(h(x(i))y(i))x(i)0
wj=wjη1m{i=1m(h(x(i))y(i))x(i)j+2λwj}

2.5多分类问题

假设 y{1,2,3}

2.5.1 One VS ALL

对于每一种类别都分成两类:1/not 1;2/not; 3/not 3。分别学习h:
这里写图片描述
有k个分类,就会得到k个h;对于x,我们只需要看看,它属于哪个类别的概率大,就是哪一个类,也即

class=maxih(i)(x)

2.5.2One Vs One

假设有K个类别,每个类别的数据所占比例都相同。如果K=100,那么数据严重不平衡,对于class i/not class i问题:直接预测为i,准确率也有99%。所以这种情况下,我们不能再使用One Vs All模型,而是使用One Vs One。
也即对于K个类别,对于任意两个类别,学习一个分类模型h(训练时,只使用这两个类别相关的数据),将会有 (K2) 个h,其中 h[k,l](x) 代表x被分类为k或者l的情况。那么最后我们使用一个投票策略:对于所有的h计算出一个分类结果,出现次数最多的类别就是最终结果。
这里写图片描述

2.6 逻辑回归算法分析

对于分类算法,我们最终如何评价性能呢? Jtest/Etest 使用什么样的损失函数?很明显地,应当使用0-1损失函数。但是计算的时候我们却使用了 [y(i)logh(x(i))+(1y(i))log(1h(x(i)))]

这里补充说明一下,在《机器学习一》中有这么一张图:
这里写图片描述
我们可以看到学习算法中的损失函数 eˆrr 和评价算法性能用的err是不一样的。为什么呢? 理想情况下,让 eˆrr=err 最好,但是很多损失函数是对计算不友好的,譬如0-1损失函数一阶不连续。所以,为了更好地计算,现实中我们常常使用不同于 err eˆrr

用最小化损失函数 [y(i)logh(x(i))+(1y(i))log(1h(x(i)))] 学习出来的算法,使用0-1损失函数评估时,会得到怎么样的性能?
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangyanphp/article/details/54581719