一、机器学习算法的类型
主要分为两种:
- Supervised learning(有监督学习)
(实际运用中用得最多的) - Unsupervised learning(无监督学习)
二、有监督学习
指学习输入x到y输出映射的算法
1. 主要特点:
给算法提供例子,对于给定的输入x,标上正确的标签y, 通过学习正确的输入x,最终实现算法只接受输入,而不需要接受输出标签,就能给出正确的预测.
例子:
输入一段音频,算法能够提取字幕,这就是有监督学习。
或者让算法自动识别垃圾邮件,这也是有监督学习。
2. 主要种类:
2.1 回归预测:
比如根据现在和以前的房价进行拟合,预测之后的房价
2.2 分类预测:
比如分类乳腺癌的肿瘤是良性还是恶性。与回归算法不同在于,它的预测值量比较小,可能只有0或1这种。少量的输出,可能是个有限的离散的集合。
三、无监督学习
通过算法,在数据中找到数据分布的规律或者结构模式等等。
和有监督学习不同,在无监督学习中,数据只有输入x,没有输出标签y。
主要的种类:
- 聚类算法(Clustering):
找到用户的偏好,并将他们分组这些。
把类似的数据点分组。 - 异常检测(Anomaly detection):
找到不寻常的数据点 - 数据降维(Dimensionality reduction):
将一个大数据集尽可能压缩成一个小的数据集
同时丢失尽可能少的信息。
四、线性回归模型
(Linear Regression)
单变量线性回归叫Univariate linear regression
一些常见的术语:
- Training set(训练集)用来训练模型
- x = “input” variable或feature(特征、输入特征)
- y (目标变量) “target” variable
- m 训练样本的总数(number of training examples)
- (x,y) 单个的训练样本(single training example)
- ( x i x^{i} xi, y i y^{i} yi)第i个训练样本
- y-hat y拔 预测值
数据处理到预测值的流程,这里的f指的是函数。
f w , b ( x ) = w x + b f_{w,b}(x) = wx+b fw,b(x)=wx+b
w和b叫做模型的参数(Parameter),有的时候叫coefficient(系数)或者权重(weight)
是在训练过程中可以调整的变量,用于改造模型。
w叫斜率(slope)
b叫做截距(intercept)
五、Cost Function(代价函数)
它是评价模型的一个指标,有助于我们去优化模型。为了衡量w和b的选择和训练数据的吻合程度。
计算代价函数需要比较两个值:
- y拔 - y (这个叫误差(error),测量的是预测值和目标之间的差值)
- 均方误差:(y拔-y)的平方
- 整个训练集的误差:把所有项的均方误差都加上
需要注意的是,当m变成更大的数据集,这个代价函数可能会计算出一个很大的数字。
所以为了建立一个不会因训练集变大而变大的代价函数,我们一般会计算均方误差,也就是说,把整个训练集的误差乘上一个1/m。并且,我们还会把代价函数再乘以一个1/2,为了让后面的计算更简洁一些。(实际上是后面求极值点偏导数的时候会有平方求导的2出现)
所以,下面这个就是代价函数,也叫做方差代价函数:
但实际上,不同场景可能会使用不同的代价函数。但这个是线性回归最常用的一个。
也可以这么写:
所以为了实现最优的模型,我们会minimizeJ,找到最准确的最合适的w和b。
所以,一般会不停的改变w和b, 然后画出w和b改变后的J(w)的值,画出图像,找到使J(w)最小时的w的值。
最终画出来的图像会是这个样子的:
那一般我们会把它变成一个二维的可视化图:
横轴为w, b为纵轴,中间取到的点越趋近于椭圆的中心,说明J越小。
但实际上,在机器学习中,我们不需要通过读等高线图去获得w和b的最佳值,因为一旦我们使用更复杂的机器学习的算法,就没有用了。所以一般我们会编写算法,以自动找到最合适的w和b。其中有一种很有用的算法(梯度下降法)。
六、梯度下降法(Gradient descent)
梯度下降法不仅使用于线性回归中,还包括比如最先进的神经网络模型等深度学习模型。
可以用来最小化任意函数,而不仅仅是线性回归的代价函数。
一般的使用方式:
将w和b都设置为0,保持对w和b的改变去减小J,直到让J在最小值或接近最小值(但可能是局部最优值,不一定是全局最小值)
因为J不一定长得像吊床那样,可能更复杂,所以可能存在不止一个可能的最小值。
比如:
梯度下降算法一般是怎么做的呢:
通俗来说,好比算法是一个人,站在一个多山的公园的某个山头,你要找到那个最快速度走到山底下的那条路,那要做的就是,360旋转,并且找到那条看起来下降最快的那条路。并且是往你选择的那个方向往下走一小步之后,再360度旋转,一直这样循环,在每一个点都找到那个最佳的方向,往下走一小步,直到到达山脚。