线性回归
代价函数
为了使建模误差(modeling error)最小,应当使建模误差的平方和最小
即
Gradient Descent
先随机选择参数组合,计算代价函数,然后寻找能让代价函数值下降最多的参数集合,直到找到一个局部最小值(local minumum)
批量梯度下降算法(batch gradient descent)
其中, α α 是学习率(learning rate),
注意我们应该同时更新 θ θ 的值
Learning rate
如果
α
α
太小,导致程序运行效率低下
如果
α
α
太大。可能无法收敛,甚至发散
特征缩放 Feature Scaling
帮助Gradient Descent更快收敛
其中 μn μ n 是平均值 sn s n 是标准差
逻辑回归
分类问题中,我们尝试预测结果是否属于某一个类。
以二元问题为例
将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量
y∈{0,1}
y
∈
{
0
,
1
}
,其中
0
0
表示负向类
逻辑回归模型
判断边界
当 θTX≥0时,预测y=1 θ T X ≥ 0 时 , 预 测 y = 1
当 θTX≤0时,预测y=0 θ T X ≤ 0 时 , 预 测 y = 0
代价函数Cost Function
如果应用线性回归模型,将得到非凸函数(non-convex function)
多类别分类
使用一对余的方法,若有 n (n≥3) n ( n ≥ 3 ) 个类别则需 n n 个分类器
正则化 Regularization
用于解决过拟合问题
一般解决过拟合问题的方案:
丢弃一些不能帮助我们正确预测的feature
Regularization, 保留所有特征,减少参数大小
一定程度上减小高次项的系数
正则化线性回归
若 λ λ 过大,导致模型变成 hθ(x)=θ0 h θ ( x ) = θ 0 ,造成欠拟合,所以要选取合理的 λ λ 值
正则化逻辑回归
注意:
θ0 θ 0 不参与正则化
神经网络
非线性假设
使用神经网络原因:如果有n个变量(feature),则需要 C2n C n 2 个特征组合,数量过于庞大,所以需要使用神经网络
模型表示 Model Representation
神经网络模型建立在很多神经元之上,每个神经元又是一个个模型。
这些神经元(激活单元, activation unit)采用一些特征作为输出,并根据本身的模型提供一个输出
在神经网络中,参数可被称为权重(weight)
其中
x1,x2,x3
x
1
,
x
2
,
x
3
是输入单元,
a1,a2,a3
a
1
,
a
2
,
a
3
是中间单元,
hθ(x)
h
θ
(
x
)
是输出单元。
神经网络是许多逻辑单元按照不同层级组织起来的网格,每一层的输出变量都是下一层的输入变量。
第一层为输入层(Input Layer),最后一层为称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)
反向传播算法
学习完1个样本后,就要进行一次反向传播的计算,并添加到误差矩阵 Δ(l)ij Δ i j ( l ) 中
梯度检验
用割线斜率检验偏导数
注意在学习过程中关闭梯度检验,因为运行速度很慢
随机初始化
不能初始化所有参数为零
通常选择初始参数为正负
ϵ
ϵ
之间的随机值,越小越好
选择神经网络时的步骤
决定选择多少层的神经网络,一般选择一层隐藏层,若有多个隐藏层,尽量使每个隐藏层的单元个数相同。通常情况下,隐藏层单元越多越好
具体步骤:
1. 参数的随机初始化
2. 利用正向传播计算所有的
hθ(x)
h
θ
(
x
)
3. 编写计算代价函数
J
J
的代码
4. 利用反向传播算法计算所有的偏导数
5. 利用数值检验方法检验偏导数
6. 使用优化算法最小化代价函数
神经网络的诊断方法
判断过拟合
训练数据和测试数据七三分
1. 对于线性回归模型,用训练集计算出的代价函数计算测试集
2. 对于逻辑回归模型,除了用代价函数外,还可用误分比计算。若误判则结果为1,否则为0,然后加和求平均
模型选择和交叉验证
60%的数据作为训练集,20%的数据作为验证集,20%的数据作为测试集
先用训练集训练不同的模型,再用验证集选出最优模型,最后用测试集检验最优模型
判断偏差与方差
若和
Jcv
J
c
v
都很高且两者相差不大时,为偏差较大的情况——欠拟合;
若
Jtrain
J
t
r
a
i
n
很小,
Jcv
J
c
v
很大,则为方差较大的情况——过拟合。
若
λ
λ
较大,属于较大偏差的情况
若
λ
λ
较小,属于较大方差的情况
操作过程
1. 创建包含不同
λ
λ
值的列表
2. Create a set of models with different degrees or any other variants.
3. 对每个
λ
λ
进行迭代,得到矩阵
Θ
Θ
4. 在无正则化的情况下,通过
JCV(Θ)
J
C
V
(
Θ
)
计算所得
Θ
Θ
矩阵的交叉验证误差
5. 选取交叉误差最小的矩阵
6. 使用最优
Θ
Θ
和
λ
λ
在
Jtest(Θ)
J
t
e
s
t
(
Θ
)
进行验证
学习曲线
高偏差
高误差
决定下一步做什么
- 获得更多的训练实例——解决高方差
- 尝试减少特征的数量——解决高方差
- 尝试获得更多特征——解决高偏差
- 尝试增加多项式特征——解决高偏差
- 尝试减少正则化程度 λ λ ——解决高偏差
- 尝试增加正则化程度 λ λ ——解决高方差
较小的神经网络,参数少,容易导致高偏差和欠拟合,但计算代价小
较大的神经网络,参数多,容易导致高方差和过拟合,虽然计算代价大,但可通过正则化调整
通常选较大神经网络+正则化处理
机器学习系统设计
误差分析 Error Analysis
构建一个学习算法的推荐方法:
1. 从简单的能快速实现的算法开始,实现它,并用交叉验证集数据测试
2. 绘制学习曲线,决定是增加数据还是添加特征或其他
3. 误差分析,人工检查交叉验证集中算法产生的预测误差的实例,看看实例是否有系统化的倾向
类偏斜的误差度量 Error Metrics for Skewed Classes
查准率于查全率之间的权衡
用
F
F
值评估
支持向量机 Support Vector Machine
假设函数 hθ(x) h θ ( x ) 直接预测0或1,而不是概率
核函数 Kernels
可以用一系列新的特征
f
f
来替代多项式模型中的每一项。
而可用核函数计算。用
x
x
与预先给定的地标的近似程度来选取新的特征
例如:
其中, ∥x−l(i)∥2=∑nj=1(xj−l(1)j)2 ‖ x − l ( i ) ‖ 2 = ∑ j = 1 n ( x j − l j ( 1 ) ) 2 ,上例中的 similarity(x,l(1)) s i m i l a r i t y ( x , l ( 1 ) ) 就是核函数,此处使用的是高斯核函数。
若 x x 与间的距离很近,则 f f 近似于,反之近似于 0 0
使用SVM
可以使用线性核函数(直接用线性函数)或其他核函数
如果使用高斯核函数,最好进行特征归一化
无监督算法
聚类 Clustering
K均值算法
- 首先选择K个随机点,为聚类中心(cluster centroids)
- 对每个数据按照距离K个点的位置,将其与距离最近的中心点关联
- 计算每组的均值,将改组的关联中心移到均值点
- 重复直至均值点不再变化
优化目标
最小化所有数据点与其关联中心点之间的距离之和,K均值的代价函数(又称畸变函数(Distortion function))为
随机初始化
- 选择 K<m K < m
- 随机选择
K
K
个训练实例,然后令个聚类中心分别与这
K
K
个实例相等
为解决得到局部最优解的情况,需要多次运行K均值算法,但若K较大,这种措施收效甚微
选择聚类数
考虑算法使用的动机,或者遵循“肘部法则”
即画出代价函数与
K
K
值的图像,选取“肘部点”
降维(Dimensionality Reduction)
降维的两个:
1. 数据压缩
2. 数据可视化
主成分分析算法(PCA)
- 均值归一化
- 计算协方差矩阵,即
Σ=1m∑i=1n(x(i))(x(i))T Σ = 1 m ∑ i = 1 n ( x ( i ) ) ( x ( i ) ) T
- 计算协方差矩阵的特征向量
- 从(Octave奇异值分解得到的[U,S,V]=svd(sigma)中的)矩阵
U
U
中选取前个向量,获得
n×k
n
×
k
的矩阵,用
Ureduce
U
r
e
d
u
c
e
表示,然后通过如下计算
z(i)=UTreduce×x(i) z ( i ) = U r e d u c e T × x ( i )获得新特征向量 z(i) z ( i )
选择主成分的数量
减少平均均方投射误差
训练集方差
1m∑mi=1∥x(i)∥2
1
m
∑
i
=
1
m
‖
x
(
i
)
‖
2
在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的
K
K
值
若希望此比例小于1%,则原本数据99%的偏差都保留下来了
可取不同的值,找使得比例满足要求的最小
K
K
值
重建的压缩表示
则
应用PCA的建议
- 压缩训练集特征
- 对训练集运行学习算法
- 在预测时,采用之前学习的
Ureduce
U
r
e
d
u
c
e
将输入的特征向量
x
x
转化为特征向量然后预测
注意:
1. 不要用PCA来解决过拟合
2. 不要将PCA默认作为学习过程的一部分
异常检测算法
…… … …算法
对于给定的数据集 x(i),i=1,2,...,m x ( i ) , i = 1 , 2 , . . . , m ,针对每一个特征计算 μ μ 和 σ2 σ 2开发和评价一个异常检测系统
从带标记的数据着手,从中选择一部分正常数据构建数据集,剩下的构成交叉验证集和测试集 例如:有10000台正常引擎,20台异常引擎,数据应当这样分配 6000台正常引擎作为训练集 2000台正常引擎和10台异常引擎作为交叉验证集 2000台正常引擎和10台异常引擎作为测试集 评价方法: 1. 根据测试集数据,估计**特征**的平均值和方差并构建 p(x) p ( x ) 函数(如高斯分布函数) 2. 对交叉验证集,尝试不同的 ϵ ϵ 作为阀值,根据 F1 F 1 值来选择 ϵ ϵ 3. 选出 ϵ ϵ 后,对测试集进行预测,计算异常检测系统的 F1 F 1 值异常检测和监督学习对比
异常检测 | 监督学习 |
---|---|
非常少的正向类(异常数据y=1), 大量的负向类(y=0) | 同时有大量的正向类和负向类 |
许多不同种类的异常。 根据非常少的正向数据训练算法。 未来遇到的异常可能与已掌握的异常类非常不同 | 有足够多的正向类实例,未来的正向类实例可能与训练集中的非常相似 |
例如: 1.欺诈行为检测 2.生产 3.检测数据中心计算机运行情况 | 例如: 1.邮件过滤器 2.天气预报 3.肿瘤分类 |
选择特征
- 若数据不符合高斯分布,可使用对数化,或指数化转化成高斯分布的情况
- 手动增加特征
多元高斯分布
- 对于训练集
μ=1m∑i=1mx(i) μ = 1 m ∑ i = 1 m x ( i )Σ=1m∑i=1m(x(i)−μ)(x(i)−μ)T Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T
- 对于新实例
p(x)=1(2π)n2|Σ|12exp(−12(x−μ)TΣ−1(x−μ)) p ( x ) = 1 ( 2 π ) n 2 | Σ | 1 2 exp ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) )如果 p(x)<ϵ p ( x ) < ϵ ,标记为异常
高斯分布 | 多元高斯分布 |
---|---|
不能捕捉特征之间的相关性,但可通过特征组合的方法解决 | 自动捕捉特征间的相关性 |
计算代价低,能适应大规模特征 | 计算代价高 必须 m>n m > n ,否则协方差矩阵不可逆,通常 m>10n m > 10 n ,另外冗余特征也会导致协方差矩阵不可逆 |
推荐系统
一些标记
nu n u 代表用户的数量
nm n m 代表电影数量
r(i,j) r ( i , j ) 如果用户 j j 给电影评过分则 r(i,j)=1 r ( i , j ) = 1
y(i,j) y ( i , j ) 代表用户 i i 给电影的评分
m(j) m ( j ) 代表用户 j j 评过分的电影总数
基于内容的推荐系统
针对每个用户训练一个线性回归模型,如是第1个用户的参数,
于是:
θ(i)
θ
(
i
)
用户
j
j
的参数向量
电影
i
i
的特征向量
对于用户和电影
i
i
,我们预测评分为:
为了学习所有的参数
协同过滤算法
优化目标同时对
x
x
和进行
学习参数时要去掉截距量 x0 x 0 ,且 x∈Rn,θ∈Rn x ∈ R n , θ ∈ R n
实现协同过滤算法
1. 将 x(i),i=1,2,...,nm,θ(j),j=1,2,...,nu x ( i ) , i = 1 , 2 , . . . , n m , θ ( j ) , j = 1 , 2 , . . . , n u 设为小的随机值
2. 使用梯度下降或其他算法优化 J(x(i),θ(j)) J ( x ( i ) , θ ( j ) )
3. 对于拥有参数 θ θ 和特征 x x 的用户,预测评分为