斯坦福机器学习视频教程
-
什么是机器学习
Exp:西洋棋 / 过滤邮件
监督学习:
预测房价(直线/二次拟合) ——
回归问题
0/1问题 ——
分类问题
主要特征:给算法一个数据集
算法——支持向量机
无监督学习:
区别,数据集没有重要的检查
- 聚类运算
exp:谷歌网址分组关联、基因学
- 鸡尾酒算法,音频分离技术
代码工具:Octave
步骤:建原型,移植算法
——————————————————————————————————————————————————
-
单变量线性回归
回归问题/分类问题——给予数据集(训练集)
样本数 m
输入 x
输出 y
实例 (x , y)
第i个观察实例 (
)
函数/假设 h
单变量线性回归表达式:
代价函数:
参数(系数,parameters)决定预测差距,即建模误差(modeling error)。
选出建模误差平方和最小的建模参数,即代价函数最小:
代价函数也称为平方误差函数
梯度下降:
求代价函数最小值,初值——局部最小值
Repeat until convergence {
(for j = 0 and j = 1)
}
α
:学习率
太小,则梯度下降过程缓慢
太大,则容易越过局部最小点,甚至无法收敛
如果预先在最低点,则
批量梯度下降:
Repeat {
}
另一种处理方法:正规方程求极值
—————————————————————————————————————————————————
-
线性代数回顾
m行,n列
常用列向量,1索引向量
———————————————————————————————————————————————————
-
多变量线性回归
n表示特征的数量(行数,m代表实例总数)
代表第i个训练实例
代表第j个特征
则
X
的维度为m(n+1)
多变量梯度下降:
特征缩放:将所有特征的尺度缩到-1到1之间
学习率:通常取0.01,0.03,0.1,0.3,1,3,10
特征与多项式回归:
二次/三次回归,转换变量为线性回归
正规方程:
只适合线性模型,在n<10000的范围内可接受,矩阵需可逆。
——————————————————————————————————————————————————–
-
Octave
语言
实际就是类似MATLAB的命令行语言
——————————————————————————————————————————————————–
-
逻辑回归(
Logistic Regression
)
分类问题:
逻辑回归算法(Logistic Regression)
判断是否属于某一类(0/1问题)
性质:输出介于0和1之间
因变量: 正向类(positive class) ——1
负向类(negative class) ——0
假说
(
函数
)
表示:
逻辑函数g是一个常用的逻辑函数为S形函数,公式为:
判定边界(
decision boundary
):
区分0/1的边界
调整参数的值(算法需要的值),来适应非常复杂的判定边界。
代价函数:用来拟合参数的优化目标,沿用线性回归函数的误差平方和。
把
代入到J中,得到一个非凸函数(Non-convex function)存在比较多的局部最小值,因此影响梯度下降算法寻找全局 最小值。
重新定义逻辑回归代价函数:
得到一个单调函数,方便使用梯度下降算法,但没有局部最优值。
简化的成本函数和梯度下降:
思路: 获取使代价函数最小的参数值,不断用X来训练,再用训练样本的新参数,输出对假设的预测。
概率:
,关于
以
为参数,
的概率
梯度下降法(Gradient Descent):不断更新
的值,计算过程类似于线性回归模型,但由于后者是逻辑回归,原理有所区 别。
高级优化:
没有学习率
共轭梯度法、BFGS(变尺度法)和L-BFGS(限制变尺度法)
多类别分类:
一对多,标签超出0/1
思路:以第i类作为1,其余作为0,获得边界i,最后得到I个函数模型,最后寻找出概率最高的模型(期望最大的)。
—————————————————————————————————————————————————————
-
正则化(
Regularization
)
过拟合问题(
over-fitting
):
用力过度,为拟合而拟合,不能正确预测假设值。
处理方法: 弃除不能帮助我们正确预测的特征
正则化:保留特征,减少参数的大小。
代价函数:
参数的减小,体现在高阶项系数的权重大幅度减小,以防止过拟合。
λ
称为正则化参数,注意
λ
不能过大,过大会导致所有参数最小化,导致欠拟合。
—————————————————————————————————————————————————————-
-
神经网络(
Neural Networks
):表述
非线性假设:
线性回归和逻辑回归在特征数目非常多时,计算的负荷很大。多特征处理需要神经网络。
神经元和大脑:
学习算法
模型表示:
处理单元:神经核
多个输入:树突
一个输出:轴突
神经元信号依据动作电位(弱电流)进行传递。
神经元(激活单元,activation unit)采纳一些特征作为输如,并且根据本身的模型提供一个输出。在神经网络中,参数也称为权重(weight)。
输入层(input layer):
输出层(output layer):
隐藏层(Hidden layer):
偏差单位(bias unit):下标为0
模型标记:
表示第
j
层的第
i
个激活单元
表示从第
j
层映射到第
j+
1 层时的权重矩阵
行=第
j+
1
激活单元行数
列=第
j
层激活单元数+1
前向传播算法(
forward propagation
):
从左向右
注:中间隐藏层可以看作是更高级的特征值。
特征和直观理解:
第三层用第二层的特征作预测,而非输入层的原始特征,神经网络第二层的特征是神经网络通过“学习”后自己得出的一系列用于预测输出的新特征。
单层神经元计算:
AND函数:0/1问题计算结果近似于“与”
OR 函数:0/1问题计算结果近似于“或”
样本和直观理解:
二元逻辑运算符(Binary Logical Operators),输入特征为布尔值,不同的权重有不同的逻辑运算符:AND(-30,20,20)、OR(-10,20,20)、NOT(10,-20),复杂的异或运算可以用组合逻辑来实现。
多类分类:
输出分为人、汽车、摩托车、卡车,那么就有多个输出,每个类在输出表现为当前类结果为1,其余类结果为0。
————————————————————————————————————————————————————
-
神经网络的学习
代价函数:
标记:
训练样本数:
m
训练层数:
L
第l层神经元个数:
输出层神经元个数:
两类问题:
二类分类:
K类分类:
(K>2)
逻辑回归代价函数:
输出只有一个,即标量(scalar),神经网络有多个输出变量,
输出
h
θx
是一个维度为K的向量,代价函数为:
反向传播算法:
首先计算最后一层的误差,然后再一层层反向求出各层的误差,直到倒数第二层。
梯度检验:
梯度的数值检验
随机初始化
:初始参数不能固定为0或者常数。
训练神经网络:
- 参数的随机初始化
- 利用正向传播算法计算所有的假设
- 编写计算代价函数的代码
- 利用反向传播方法计算所有偏导数
- 利用数值检验方法验证这些偏导数‘
- 使用优化算法来最小化代价函数
———————————————————————————————————————————————————–
-
应用机器学习的建议
算法优化与改进:
模型泛化性较差时,即新的数据预测误差较大,需要考虑以下几个方面进行改进算法:
- 减少特征数量
- 尝试获取更多的特征
- 尝试增加多项性特征
- 尝试减少或增加归一化程度
评估算法的性能:机器学习诊断法
评估一个假设:
如何避免过拟合或者欠拟合?
70%数据作为训练集,30%数据作为测试集,注意数据需要打乱以保证含有各种类型的数据。
在模型训练完毕后再用测试集计算误差。
模型选择与交叉验证集:
- 选择适应一般情况的模型,而非仅对新数据适用。
- 60%作为训练集,20%作为交叉验证集,20%作为测试集。
- 模型选择方法:
使用训练集训练10个模型
分别用交叉验证集计算交叉验证误差(代价函数的值)
选取代价函数最小的模型
用该模型以及测试集计算其推广误差(代价函数的值)
诊断偏差和方差:
欠拟合和过拟合,偏差大或者方差大
对于训练集,训练次数越大,误差越小,拟合程度增加;
对于交叉验证集,多项式次数增大时,误差先减小后增大,转折点就是过拟合的点。
训练集误差和交叉验证集误差近似时,偏差/欠拟合
交叉验证集误差远大于训练集误差时,方差/过拟合
归一化和偏差
/
方差:
归一化系数
的选择:0,0.01,0.02,0.08,
…
,5.12,10
选择方法:
- 训练12个归一化系数的模型
- 分别对交叉验证集计算交叉验证误差
- 选择交叉验证误差最小的模型
- 计算测试集的推广误差
较小时,训练集误差较小(过拟合),而交叉验证误差较大
增大时,训练集误差不断增加(欠拟合),但交叉验证误差先减小后增加
学习曲线(
learning curves
):
学习曲线用来判断学习算法是否处于偏差/方差问题,是学习算法的合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的曲线。
在高偏差/欠拟合的情况下,增加数据到训练集并不一定有帮助;
在高方差/过拟合的情况下,增加更多数据到训练集可以提高算法效果。
下一步:
解决高方差:
获得更多的训练实例
减少特征
增加归一化程度
解决高偏差:
获得更多的特征
增加多项式特征
减少归一化程度
————————————————————————————————————————————————————
-
机器学习系统(
Machine Learning System
)的设计
例子:邮件分类
误差分析(
error Analysis
):
构建学习系统的推荐方法:
- 从一个简单算法开始,实现该算法并用交叉验证集数据测试这个算法;
- 绘制学习曲线,决定是增加更多数据,或者添加更多特征;
- 进行误差分析,人工检查交叉验证集中我们算法中产生预测误差的实例,观察是否有某种系统化的趋势。
类偏斜的误差度量:
选取合适的误差度量值,即偏斜类(skewed classes)问题
预测为真,实际为真:正确肯定(TP)
预测为假,实际为假:正确否定(TN)
预测为真,实际为假:错误肯定(FP)
预测为假,实际为真:错误肯定(FN)
查准率(P)=TP/(TP+FP),查全率(R)= TP/(TP+FN),两个都是越高越好。
查全率和查准率之间的权衡:
提高查准率,抬高阈值;提高查全率,则降低阈值
选择阈值:计算F1值
机器学习的数据:
许多不同的学习算法有时倾向于表现出非常相似的表现,这还取决于一些细节,但真正能提高性能的,是你能够给一个 算法大量的训练数目。大部分算法,随着数据集的大量增加,算法的性能也都对应地增强了。
掌握成功的,不是拥有最好算法的人,而是拥有最多数据的人!
————————————————————————————————————————————————————-
-
支持向量机(
Support Vector Machines
,
SVM
)
优化目标:
将代价函数直线化
C越小,B将比A有更大的权重。
大边界的直观理解:
注意
的边界不是按照0来划分的,因此有一个额外的安全因子。
黑色的边界拥有更大的间距(margin),这是SVM具有鲁棒性的原因,因此SVM也被称为大间距分类器。
C不是非常大的时候,决策边界可以忽略一些异常点的影响,得到更好的决策界。
核函数(kernel):利用新特征来代替模型中的多项式,这里使用核函数来计算。
地标(landmarks)
高斯核函数:计算和地标的接近程度,与地标重合时取最大值
地标选择:选择m个地标,地标与特征实现一一对应。
不使用线性核函数,即线性核函数。
使用
SVM
:
支持向量机算法,liblinear以及libsvm
多项式核函数、字符串核函数、卡方核函数、直方图交集核函数
———————————————————————————————————————————————————————
-
聚类(
Clustering
)
无监督学习(
unsupervised learning
):
训练集无明显标签。将数据分成两个分开的点集(簇),一个能找到这些簇或者其他类型结构体的算法,称为聚类算法。
K-
均值算法(
K-Means Algorithm
):
将未标记数据聚类成不同组的算法
一种迭代算法,首先选择K个随机点(聚类中心cluster centroids),对于数据集每个数据,按照距离聚类中心的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。计算每一个组的均值,将该组所关联的中心点移动到平均值的位置。重复以上步骤多次直至中心点不再变化。
标记:聚类中心
,第i个实例数据最近的聚类中心索引
伪代码:
Repeat {
for i = 1 to m
:= index (from 1 to K) of cluster centroid closest to
for k = 1 to K
:= average (mean) of points assigned to cluster k
}
优化目标:
K-均值最小化的问题,就是最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此K-均值的代价函数(畸变函数Distortion function)为:
伪代码的一个循环减小c引起的代价,第二个循环减小
引起的代价
随机初始化:
K<m,多次运行算法,每一次都重新随机初始化,最后选择代价函数最小的结果,但如果K较大,问题仍然存在。
选择聚类数:
依据肘部法则,横轴代表聚类数,“肘部”转折点最佳。
——————————————————————————————————————————————————————
-
降维(
Dimensionality Reduction
)
数据压缩(
data compression
):
减少使用计算机内存,加快学习算法。
用冗余的多余数据,例如,采用不同度量衡测出的同样的长度,这样的数据可以降维。两个具有相关性的数据可以实现降维。
数据可视化:
降维方便数据的表达和可视化。
主成分分析(
Principle Component Analysis
,
PCA
)问题:
常用降维算法
方向向量(Vector direction):数据与方向向量的
平均均方误差
尽量小。
投射误差(Projected error):特征点向方向向量做垂线的长度
*回归误差:垂直于横轴,与线性预测直线的距离误差。
PCA实现数据压缩,将n个特征降维到k个,可以用于图像处理的KL变换,但需要保证数据压缩后特征损失最小。
主成分分析算法:
减少投射的平均均方误差
- 均值归一化
- 计算协方差矩阵
- 计算协方差矩阵的特征向量
选择主成分的数量(维数):
从1开始计算,直到找到符合比例的最小K值。
重建的压缩表示
主成分分析法应用
——————————————————————————————————————————————————————————–
-
异常检测(
Anomaly Detection
)
问题来源:
解决非监督学习问题
密度估计、欺诈检测,检测非正常用户
高斯分布(
Gaussian Distribution
):
正态分布
计算样本均值和方差(除以m)
算法:
异常检测算法:依据均值和方差,并寻找一个判定边界进行检测
开发和评价:
交叉检验和测试过程:
- 根据测试集数据,我们估计特征的均值和方差并构建p(x)函数
- 对交叉验证集,尝试选择不同的边界阈值,预测数据是否异常,根据F1值来选择边界
- 确定边界后,针对测试集进行预测,计算异常检验系统的F1值
异常检测和监督学习的对比
:区别于负向类的数据占比
选择特征:
数据分布转为高斯分布:x=log(x+c)
误差分析
多元高斯分布以及应用