机器学习思路整理-分类器 #
Date: 2015/6/12
发现md+tex其实挺好的,纯文本编写blog。
本章接着玩分类器,使用分类器能够将样本数据分为2类或更多的类。more分类器
线性回归其实是可以做分类器的。
线性回归将得到一个$ math h_{\theta}(x)$,在其对应的直线上,截出若干区间,判断待分类数据$x’$对应的$ math h_{\theta}(x’)$在哪个区间上,即可对其分类。但是,由于线性函数拟合的结果太容易被干扰,所以分类器并不优化。因而需要用到下面的手段来实现S形函数
使用逻辑函数(logistic function),又被称为S形函数(sigmod function):$g(z)$来进行划分,可以获得一个跨越区间,大部分的数据在$g(z)$函数的作用下,其分类结果值要么是1,要么是0,均远离0.5附近这个“说不清楚”的范围,所以分类的效果远比线性分类的效果要好得多。
通常情况下,$g(z)$被定义为:
$ math g(z) = \frac{1}{1+e^{-z}} $
这个函数很接近分段函数,但又不是分段函数,这是为了能够方便计算,方便拟合以快速获得较好的结果。如果是分段函数,就很难用数学方法和程序去实现了。????(使用分段函数来实现的被称作感知机学习算法)
可以看出,$g(z)$其实是从z=0切分的。显然,样本数据多半不从0切分,那么我们对样本数据做一个空间移动,使它变换到z=0上,就可以使用$g(z)$来分类了。于是,分类器中,新的$ math h_{\theta}(x) $产生了:
$ math h_{\theta}(x) = g(\theta^Tx) $
一开始先考虑将样本分为两类的情况,那么可以假定$ math h_{\theta}(x) $的结果是:样本被标记为1的概率。那么,样本被标记为0的概率是:$ math 1 - h_{\theta}(x) $。所以有:
$$
P(y=1|x; \theta) = h_{\theta}(x)\
P(y=0|x; \theta) = 1 - h_{\theta}(x)\
P(y|x; \theta) = (h_{\theta}(x))^y*(1 - h_{\theta}(x))^{1-y}
$$
上面的公式,在传入真正的$x$后,会获得一个概率P。如果分类得比较准,那么获得的概率会非常大;如果分类不准,那么就恰好取得大概率的反,也就是小概率。
举个例子:假设$ math h_{\theta}(x) $接近1,就意味着我们的分类结果接近1。如果样本集结果为1,证明我们分类准确,此时P接近1,否则证明我们分类不准确,P接近0。对$ math h_{\theta}(x) $接近0时有类似的证明。
那么,我们就需要尽可能的提高预测准确性,其判断依据根据似然估计:
$$
L(\theta) = p(\vec{y} | X; \theta)\
= \prod_{i=1}^{m}{p(y^{(i)}|x^{(i)}; \theta)}
$$
计算得到log估计:
$ math l(\theta) = logL(\theta) = \sum_{i=1}^{m}{y^{(i)}logh_{\theta}(x^{(i)}) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)}))} $
通过求偏导得到:$ math \frac{\partial}{\partial \theta_j}l(\theta) = (y - h_{\theta}(x))x_j $
所以可以利用梯度下降法求解,其中迭代变量为:$ math \theta_j := \theta_j + \alpha(y^{(i)} - h_{\theta}(x^{(i)}))x_j^{(i)} $
得到了一个与线性回归一样的迭代方法!!!log似然估计$l(\theta)$的优化
在线性回归和分类的概率模型中,都提到了$l(\theta)。使$l(\theta)$最大化的$\theta$也就是我们想要求解的对象。使用牛顿迭代方法可以加快求解速度。而使用海森矩阵(hessian Matrix)可以对牛顿迭代法进一步优化。公式就不在此推导了。k分类-多项式分布
将样本分到k个类中,标记为${1,2,…,k}$,称为k分类。通常使用多项式分布处理。
定义$ math \phi_i $为分为第i类的概率,则$ math \phi_k = \sum_{i=1}^{k-1}{\phi_i}$。
所以
$$
P(y;\phi) = \phi_1^{1{y=1}} \phi_2^{1{y=2}}…\phi_k^{1{y=k}}\
= \phi_1^{1{y=1}} \phi_2^{1{y=2}}…\phi_k^{1-\sum_{i=1}^{k-1}{1{y=i}}}\
=…
$$
然后中间的推导用到了指数族分布的一些性质,没弄懂。再然后得到:
$$
h_{\theta}(x) = \left[\begin{matrix}
\frac{exp(\theta_1^Tx)}{\sum_{j=1}^{k}{exp(\theta_j^Tx)}}\
\frac{exp(\theta_2^Tx)}{\sum_{j=1}^{k}{exp(\theta_j^Tx)}}\
…
\frac{exp(\theta_{k-1}^Tx)}{\sum_{j=1}^{k}{exp(\theta_j^Tx)}}\
\end{matrix}\right]
$$
当然,$ math p(y = k | x; \theta) = 1 - \sum_{i=1}^{k-1}{\phi_i} $
最后,就得到了log似然函数:
$ math l(\theta) = \sum_{i=1}^{m}{log\prod_{l=1}^{k}{\left(\frac{e^{\theta_l^Tx^{(i)}}}{\sum_{j=1}^{k}{e^{\theta_j^Tx^{(i)}}}}\right)^{1{y^{(i)}=l}}}} $
有一句很经典的话:当你决定用多项式分布时,前面的都不用看了,直接用结论就好了。 Categories: 机器学习