人工智能在如今无疑是如日中天,它的各个子领域也因此得到了极大的发展,机器学习作为人工智能的一个子领域以赋予机器以人类特有的学习能力也得以大放异彩,它被应用在各个领域,典型的例子如个性化推荐,数据挖掘,垃圾邮件识别等等,机器学习算法和传统算法的不同之处在于传统算法研究的是如何解决一个有特定结果的问题,而机器学习算法则是挖掘数据中潜在的规律,然后对输入做出预测。按1959年Arthur Samuel的说法来说,机器学习领域研究的是如何赋予计算机解决不能被明确编程解决的问题的学习能力。
Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed. –Arthur Samuel.
从学习的方式来看,机器学习分为监督学习(Supervised Learning)和非监督学习(Unsupervised Learning), 两者的区别是学习的数据集是否含有已经标注好的标记。
从学习的结果来看,监督学习分为分类(Classification)和回归(Regresssion)两种,分类是相对于离散型的输出值,而回归相对的是连续型的输出值。非监督学习更多的是聚类型问题。
模型的表示
习惯性的字母表示的含义
- m,代表训练数据记录的条数
- n,每条训练数据具有的属性数,也就是每条训练数据的维数
- \( x\),代表输入集,\(x^{(i)}\)代表输入集的第i条记录,\(x_j^{(i)}\)代表第i条记录的第j个属性
- \(y\),代表输出集
单变量的线性回归(Linear regression with one variable)
单变量的线性回归假设函数(Hypothesis): \(h_\theta(x)=\theta_0+\theta_1 x\)
所谓单变量是值输入变量仅有x一个,而我们的最终的目标是通过现有的已有标记的训练数据(有x和y对应的值),来找出最好的线性参数\(\theta_0,\theta_1\)使得这条直线最好拟合训练数据,以期这个函数对新的输入x有接近正确的输出。从这个角度来说,我们是在寻找训练数据中的规律,并用线性函数进行刻画。那么我们应该如何选择\(\theta_0,\theta_1\)呢?
这里提出一个概念损失函数(Cost Function),所谓损失函数是指我们的\(h_\theta(x)\)计算出来的值和已知的值之间的差的均值,表示处理便是如下公式:
\(J(\theta_0,\theta_1)={{1\over 2m}(h_\theta(x^{(i)})-y^{(i)})^2} \)
当然,我们希望这个值越小越好,因为这个值越小,说明我们拟合的\(h_\theta(x)\)跟训练集中数据的相差很小,那么我们用\(h_\theta(x)\)推断新的x的对应的y值就越精确,那么,如何获得对应的的\(\theta_0,\theta_1\)使得\(J(\theta_0,\theta_1)\)最小呢?
一提到最小化问题,我们立即会想到导数,最优化算法中一个经典的迭代算法叫做梯度下降(Gradient Descent),我们可以用这个算法来获取\(J(\theta_0,\theta_1)\)取最小值时的\(\theta_0,\theta_1\)。梯度下降的基本原理是朝着梯度的反方向走,那么如果函数是凸函数的话经过多次迭代后就会区域收敛,取得最小值。而梯度的值是对应变量在目标函数上的偏导数组成的向量,如果我们想要朝着梯度的反方向走,只要减去沿着梯度方向的向量值即可。根据这个思想,我们可以归结出使用梯度下降来更新\(\theta\)值的方法,也就是:
\( \theta_j=\theta_j-{\alpha}{\frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1)}\)
\( \frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1)={\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^i}}\)
\(\Rightarrow\)
\( \theta_j=\theta_j-{\alpha}{\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^i}}\)
其中\(\alpha\)为下降速率,不可太小或太大,太小会导致下降速度过慢,太大会导致不收敛。并且所有的\(\theta\)要同步更新。
多变量的线性回归(Linear regression with multiple variables)
单一变量的线性回归仅仅有一维输入数据x,这里扩展到更为常见的具有多维的输入数据,相应的,我们的多变量的线性回归的假设函数变成:
\( h_\theta(x)=\theta^{T}x=\theta_0x_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_nx_n\)
其中,为了向量化方便计算,将\(x_0\)固定化为1,也就是在处理数据之前要加入一列1取得对\(\theta_0\)常数项的值。其中\(\vec{\theta}\)的维数为n+1。
其损失函数也一样:
\(J(\theta_0,\theta_1,\cdots,\theta_n)={{1\over 2m}(h_\theta(x^{(i)})-y^{(i)})^2} \)
使用梯度下降法来迭代更新
\( \theta_j=\theta_j-{\alpha}{\frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1)}\)
\( \frac{\partial}{\partial \theta_j}J(\vec{\theta})={\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^i}}\)
\(\Rightarrow\)
\( \theta_j=\theta_j-{\alpha}{\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^i}}\)
这里后面\(\theta_j\)的偏导数依赖于\(x_j\),对于矩阵X来说,\(x_0^i=1\)所以\(\theta_0\)的更新和其他一样
\( \theta_0=\theta_0-{\alpha}{\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^i}}\)
特征缩放(Feature Scaling)和平均正则化(Mean Normalization)
特征缩放和平均正则化解决的是特征之间相差比例太大,导致梯度下降速度过慢的问题,通过这两种方式使得特征属性变成同一范围内,当然这个包括我们加入的辅助特征\(x_0=1\)。具体的操作方法是
\(\frac{(x_i-平均值)}{标准差或(最大值-最小值)}\)
多项式回归(Polynomial Regression)
我们线性回归的思路使用较少的变量之间的乘积组合,形成非线性的假设函数,例如二次方程,三次方程,一个具有一维特征的例子如下:
\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_1^2\)
正则化方程式(Normal Equation)
正则化方程式求解\(\vec{\theta}\)适用于训练矩阵X维数不超过10000的情况,这种情况下可以通过一下公式进行求解
\(\vec{\theta}=(X^TX)^{-1}X^Ty\)
使用向量乘法来代替求和
机器学习算法大量使用矩阵之间的运算,使用向量化的方法计算求和使得实现起来更为简洁明了,避免使用繁琐的for循环,下面举几个常用的例子以显示其优点:
\( h_\theta(x)=\sum_{j=0}^{n}{\theta_j x_j}=\theta^T x\)
梯度下降:
\( \theta_0=\theta_0-{\alpha}{\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^i}}\)
\( \theta_1=\theta_1-{\alpha}{\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_1^i}}\)
\( \theta_2=\theta_2-{\alpha}{\frac{1}{m}{\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_2^i}}\)
\(\Rightarrow\)
\( \vec{\theta}=\vec{\theta}-\alpha{\frac{1}{m}X^T(h_\theta(x)-y)}\)
声明
本文首发表于Wenqi’s Blog,更多技术分享欢迎关注!转载须注明文章出处,已委托维权骑士为本站的文章进行维权, 作者保留文章所有权。