机器学习问题主要可以分为:监督学习(supervised) 和 非监督学习(unsupervised)
监督学习:
回归问题: 预测连续值输出
分类问题:预测离散值输出
数据集给出正确答案(有标签,有y值)
非监督学习:
聚类算法, 数据集无明确答案(没有标签,没有y值),由算法自动分成簇类。
假设函数(hypothesis):
用来拟合数据集的函数,像线性回归中的直线方程。
通过选择参数 Θ ,使得对于训练集(x,y), 让h(x)尽可能能接近于y值。
即h(x)就是预测值,算法对x所做的预测。
以单变量线性回归为例(其实就是初高中数学中的线性回归问题):
预测房价:
训练集:一个特征值x,代表房子的面积,一个y值,代表房价。
先假设用一条直线拟合,h(x) = θ0 + θ1x
可以给训练集再人为加上一个特征量x0,其值恒为1,主要用来匹配θ0,同时也使得h(x)可以采用矩阵乘法的方式来计算。
要使得h(x)接近于y,定义一个代价函数(cost),其形式为 J =
这里的x(i),y(i)(i都在上标位置)代表训练集中第i个样本,加平方可使得误差能更加小,同时保证为正数;除以m意为取平均;再除以2主要是为了后面求导时,与平方项求导的2抵消,对整体而言没什么影响。
h(x)要最接近y,也就是代价函数J要最小(接近0),所以整个算法的目标就是求出minimum(J)。
要求出J的最小值,最简单最基本的方法就是不断逼近它,而不断逼近的思想也是导数的思想。可以用“梯度下降法”来求。
梯度下降(Gradient Descent)
梯度,高数中的一个概念,某个点的梯度,是指函数在该点的方向导数沿该方向取得最大值,即函数在该点沿该方向(梯度的方向)变化最快。
对于单变量而言,可以简单理解成该点的导数,也就是该点切线的斜率,很明显,如果这个点时时刻刻地沿着它的切线方向移动,即它会不断地在函数曲线上走,最终走到一个导数为0的点(极值点),然后停在那里。
所以这种思路,可以用来求解J的最小值问题。求出来的实际上可能只是局部最优解,不一定是全局最优,J最好是一个凸函数(凸函数定义不统一,理解成大概一个“碗状”的样子)。
即不断改变θ值,来逐步收敛J值。
J(θ)对的求导,为 ,其中,当j为0时,也就是xj是为1的,也就是上文提到的 “人为给它加上一个特征量x0,其值恒为1,用来匹配θ0。”
因此,对于每个θ ,都去减掉它的梯度, 即有:
, 其实也就是:
α是学习速率,如果太大,会导致下降地过快,可能会错过最低点;而太小,又会导致收敛的速度太慢。
不断地迭代一定步数,就可以得到一个J最小值。