机器学习基础
机器学习的优势
- 对于那些现有解决方案需要大量手动调整或者规则列表超长的问题:通过机器学习的算法,就可以简化代码,并且提升执行表现。
- 对于哪些传统技术根本无法解决的问题,通过最好的机器学习技术,可以找到一个解决方案
- 对于环境波动,机器学习系统可以适应新的数据。
- 从复杂问题和海量数据中获得洞见。
机器学习的种类
按照是否在人类监督下训练分为如下几类:
监督式学习
提供给算法的包含所需解决方案的训练数据,成为标签或者标记,这种学习方式成为监督式学习。
常见的监督式学习算法如下:
- K-近邻算法
- 线性回归
- 逻辑回归
- 支持向量机
- 决策树和随机森林
- 神经网络
无监督式学习
提供给算法的包含所需解决方案的训练数据中不包含标签
- 聚类算法
- k-平均算法(k-Means)
- 分层聚类算法(Hierachical Cluster Analysis, HCA)
- 最大期望算法(Expectation Maximization)\
- 可视化和降维
*主成分分析(PCA)- 核主成分分析(Kernel PCA)
- 局部线性嵌入(LLE)
- t-分布随机性近邻嵌入(t-SNE)
- 关联学习规则
- Apriori
*Eclat
半监督式学习
大量未标记的数据和少量标记的数据,这成为半监督式学习。
如:相册系统。先按照无 监督的方式给照片分类,然后由人去指定类的标签名称,之后,预测中,就可以指出照片上的人了。
强化学习
学习系统能够观察环境,做出选择,执行操作,获得回报,或者以负面回报的形式获得惩罚。
如:alphaGo
- Apriori
按照是否可以动态地进行增量学习:
在线学习
循序渐进给体统提供训练数据,逐步积累学习成果。提供数据可以是单独的,也可以是小批量的。
批量学习
在离线系统下进行学习,训练系统,然后将其投入到生产环境,这个时候学习过程停止。
按照基于的内容:
基于实例的学习
建立规则
基于模型的学习
建立模型
机器学习过程中的问题
- 训练数据数量不足
- 训练数据不具有代表性
- 训练数据质量差
- 数据中包含无关特征
- 训练数据过度拟合
- 训练数据拟合不足
测试与验证
通常使用80%的数据集进行训练,20%的数据来作为测试。
查看数据结构,直方图
机器学习项目
确定框架
确定框架
根系业务问题,确定业务目标
确定机器学习的类型
是监督学习还是无监督学习?
是批量学习还是增量学习?
是基于实例的学习还是模型的学习?
确定性能指标
通常使用均方根误差和曼哈顿距离作为机器学习的性能指标
均方根误差(RMSE)
注意:这个公式和欧氏距离是有区别的,欧氏距离不用求平均
R
M
S
E
(
X
,
h
)
=
1
m
Σ
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
RMSE(\bold X, h) = \sqrt{\frac 1m \Sigma_{i=1}^m(h(\bold x^{(i)})-y^{(i)})^2}
RMSE(X,h)=m1Σi=1m(h(x(i))−y(i))2
平均绝对误差
注意:这个公式和曼哈顿距离是有区别的,曼哈顿距离不用求平均
M
A
E
(
X
,
h
)
=
1
m
Σ
i
=
1
m
∣
h
(
x
(
i
)
)
−
y
(
i
)
∣
MAE(\bold X, h) = \sqrt{\frac 1m \Sigma_{i=1}^m|h(\bold x^{(i)})-y^{(i)}|}
MAE(X,h)=m1Σi=1m∣h(x(i))−y(i)∣
获取数据查看数据结构
创建测试集
** 随机抽样**
分层抽样
把数据集根据某个或者某些属性,分为若干层,在每一层 中,按照设定的比例进行抽样,以实现抽样的合理性。
数据分析
对数据进行可视化、进行相关性分析
数据清理
对于缺失的值
- 放弃这些数据
- 放弃这个属性
- 将缺失值设置为某个值,一般为0,平均数,中位数等
处理文本和分类属性
大部分机器学习更易于跟数字打交道,所以,有时候需要把文本标签转换为数字。
特征缩放
选择和训练模型
使用交叉验证更好地评估模型
根据交叉验证的结果,选择出最优的模型
微调模型
使用随机搜索和网格搜索的方式,对模型的超参数进行调整。
分类
K-近邻算法
k近邻算法既可以做分类,也可以做回归分析。做分类时,前k个结果集中,取最多的类别作为决策类别;做回归时,前k个结果集中,去平均值作为决策结果。
步骤
- 计算已知类别数据集中的点与输入点之间的距离。
- 按照距离递增排序
- 选取与当前点距离最小的k个点
- 确定前k个点中,所在类别的出现频率。
- 返回前k点出现频率最高的类别作为当前点的预测分类。
注意
- 没有训练过程
- 数据使用前需要进行归一化
- 样本数量巨大时,效果不佳。预测时,需要所有样本参与运算。
贝叶斯分类
贝叶斯分类过程中,会计算某个输入属于各个类别的概率,概率最大的则即为该输入所属的分类。这是贝叶斯分类的核心思想。
条件概率
p
(
c
∣
x
)
=
p
(
x
∣
c
)
p
(
c
)
p
(
x
)
p(c|x)=\frac {p(x|c)p(c)}{p(x)}
p(c∣x)=p(x)p(x∣c)p(c)
贝叶斯条件概率
p
(
c
i
∣
x
,
y
)
=
p
(
x
,
y
∣
c
i
)
p
(
c
i
)
p
(
x
,
y
)
p(c_i|x, y)=\frac {p(x, y|c_i)p(c_i)}{p(x, y)}
p(ci∣x,y)=p(x,y)p(x,y∣ci)p(ci)
贝叶斯文档分类中,是假设单词之间彼此独立的。
将
(
x
,
y
)
(x,y)
(x,y)替换为向量
w
\bold w
w,则公式可以表达为
p
(
c
i
∣
w
)
=
p
(
w
∣
c
i
)
p
(
c
i
)
p
(
w
)
p(c_i|w)=\frac {p(\bold w|c_i)p(c_i)}{p(\bold w)}
p(ci∣w)=p(w)p(w∣ci)p(ci)
假设
w
\bold w
w中的各个元素独立,则
p
(
w
∣
c
i
)
=
p
(
w
0
∣
c
i
)
p
(
w
1
∣
c
i
)
p
(
w
2
∣
c
i
)
⋯
p
(
w
0
∣
c
i
)
p(\bold w|c_i)=p(w_0|c_i)p(w_1|c_i)p(w_2|c_i)\cdots p(w_0|c_i)
p(w∣ci)=p(w0∣ci)p(w1∣ci)p(w2∣ci)⋯p(w0∣ci)
由于对于各个输出类别而言,
p
(
w
)
p(\bold w)
p(w)是相同的,结果中也只需要比较大小,因此
p
(
w
)
p(\bold w)
p(w)不需要计算。
注意
- 程序中应注意处理第j个 p ( w j ∣ c i ) p(w_j|c_i) p(wj∣ci)值为0的情形,导致整个值为零的情况
- 程序中应该注意处理下溢出的情况,即多个很小的值相乘,会导致数据归0的情形。一般采用将乘法转换为对数进行输出的形式。其单调性是一致的。
词袋模型和词集模型
将每个词的出现是否作为一个特征,这可以被描述为词集模型。
如果一个词在文档中出现不止一次,这可能意味着包含该词是否出现在文档中不能表达的某种信息,这种方法被称为词袋模型。
线性回归
逻辑回归
两分类的目标函数
J
(
θ
)
=
−
1
2
m
Σ
i
=
1
m
(
y
(
i
)
l
o
g
(
p
^
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
p
^
(
i
)
)
)
J(\theta) =-\frac 1{2m} \Sigma_{i=1}^m(y^{(i)}log(\hat p^{(i)})+(1-y^{(i)})log(1-\hat p^{(i)} ))
J(θ)=−2m1Σi=1m(y(i)log(p^(i))+(1−y(i))log(1−p^(i)))
多分类目标函数
J
(
θ
)
=
−
1
m
Σ
i
=
1
m
Σ
k
=
1
K
y
k
(
i
)
l
o
g
p
^
k
(
i
)
J(\theta) =-\frac 1{m} \Sigma_{i=1}^m\Sigma_{k=1}^K y^{(i)}_k log \hat p^{(i)}_k
J(θ)=−m1Σi=1mΣk=1Kyk(i)logp^k(i)
性能指标
使用交叉验证测量精度
混淆矩阵
多类别分类混淆矩阵
二元分类的混淆矩阵、
评估指标速记
精度
真正为真的样例在所有预测为真的样例数之间的占比。精度又叫做查准率
精
度
=
T
P
T
P
+
F
P
精度 = \frac {TP}{TP+FP}
精度=TP+FPTP
召回率
真正为真占有所有实际为真的样例数之间的占比。召回率又叫做查全率。
换言之,是为真的样例中,猜对的比例。
召回率越高,为真结果越可靠,但是也会导致实际为假的实例中,判断为真的数量也会越高。
召
回
率
=
T
P
T
P
+
F
N
召回率 = \frac {TP}{TP+FN}
召回率=TP+FNTP
假正率
预测为真的样例,占所有实际为假的样例数的比例。
假
正
率
=
F
P
F
P
+
T
N
假正率 = \frac {FP}{FP+TN}
假正率=FP+TNFP
F
1
F_1
F1分数
又称作谐波平均
F
1
F_1
F1分数越高,说明精度和召回率越接近。这种场景在实际应用过程中,相对会少一些。
F
1
=
2
1
精
度
+
1
召
回
率
=
T
P
T
P
+
F
N
+
F
P
2
F_1 = \frac 2{\frac{1}{精度}+\frac1{召回率}} = \frac{TP}{TP+\frac{FN+FP}2}
F1=精度1+召回率12=TP+2FN+FPTP
Jaccard Coefficien
J
=
T
P
F
P
+
F
N
+
T
P
J = \frac {TP}{FP+FN+TP}
J=FP+FN+TPTP
Jaccard Distance
d
=
F
P
+
F
N
F
P
+
F
N
+
T
P
d = \frac {FP+FN}{FP+FN+TP}
d=FP+FN+TPFP+FN
精度、召回率和阈值曲线
随着判断阈值的增加,精度会越来越高,即判断为真的结果越可靠。
而召回率会越来越低,也就是把一个样本判断为真的可能性就越低,把真样本判断为假的可能性就增加了。
所以精度和召回率是一对矛盾体。
PR曲线
基于精度、召回率和阈值曲线,绘制精度和召回率之间的关系曲线(不显示阈值),可以得到PR曲线。
PR曲线绘制的是精度和召回率之间的关系,曲线越靠近右上角,模型性能就越好。
ROC曲线
ROC曲线描述的是召回率和和假正率之间的关系,去曲线月靠近左上方,模型特性就越好。
简言之就是把真的判断为真的概率(召回率,又叫查全率)和把假的判断为真的概率之间的关系(假正率)
约登指数
指的是 真阳率和假阳率之和减去1,通过约登指数最大时的阈值,为模型的最佳阈值。
支持向量机
相关公式
线性SVM分类器预测
y
^
=
{
0
i
f
w
T
⋅
x
+
b
<
0
1
i
f
w
T
⋅
x
+
b
⩾
0
\hat y=\left\{\begin{matrix} 0 \; if\; \, \bold w^T \cdot \bold x +b < 0\\ 1 \; if\; \, \bold w^T \cdot \bold x +b \geqslant 0\\ \end{matrix}\right.
y^={0ifwT⋅x+b<01ifwT⋅x+b⩾0
硬间隔SVM分类器的目标
a
r
g
m
i
n
w
,
x
1
2
w
T
w
\mathop {argmin }\limits_{\bold w,\bold x} \frac 1{2}\bold w^T \bold w
w,xargmin21wTw
S.T
y
(
i
)
(
w
T
w
+
b
)
⩾
1
y^{(i)}(\bold w^T\bold w +b) \geqslant 1
y(i)(wTw+b)⩾1
软间隔SVM分类器的目标
a
r
g
m
i
n
w
,
x
,
ζ
1
2
w
T
w
+
C
Σ
i
=
0
m
ζ
(
i
)
\mathop {argmin }\limits_{\bold w,\bold x, \zeta} \frac 1{2}\bold w^T \bold w+ C\Sigma_{i=0}^m\zeta^{(i)}
w,x,ζargmin21wTw+CΣi=0mζ(i)
S.T
y
(
i
)
(
w
T
w
+
b
)
⩾
1
−
ζ
(
i
)
且
ζ
(
i
)
⩾
0
y^{(i)}(\bold w^T\bold w +b) \geqslant 1-\zeta^{(i)}且\zeta^{(i)} \geqslant 0
y(i)(wTw+b)⩾1−ζ(i)且ζ(i)⩾0
线性SVM目标的对偶形式
a
r
g
m
i
n
α
Σ
i
=
1
m
Σ
j
=
1
m
α
(
i
)
α
(
j
)
t
(
i
)
t
(
j
)
x
(
i
)
T
−
Σ
i
=
1
m
α
(
i
)
\mathop {argmin}\limits_{\alpha}\Sigma_{i=1}^m\Sigma_{j=1}^m\alpha^{(i)}\alpha^{(j)}t^{(i)}t^{(j)}\bold x^{(i)T}-\Sigma_{i=1}^m\alpha^{(i)}
αargminΣi=1mΣj=1mα(i)α(j)t(i)t(j)x(i)T−Σi=1mα(i)
S.T.
α
(
i
)
⩾
0
(
i
=
1
,
2
,
3
,
⋯
,
m
)
\alpha^{(i)}\geqslant 0(i=1,2,3,\cdots ,m)
α(i)⩾0(i=1,2,3,⋯,m)
SVM核技巧的本质
将核运算分方式进行转换,降低预算的计算量,减少了维度的爆炸
线性核函数
K
(
a
,
b
)
=
a
T
⋅
b
K(\bold a, \bold b) = \bold a^T\cdot \bold b
K(a,b)=aT⋅b
多项式核函数
K
(
a
,
b
)
=
(
γ
a
T
⋅
b
+
r
)
d
K(\bold a, \bold b) =(\gamma \bold a^T\cdot \bold b + r)^d
K(a,b)=(γaT⋅b+r)d
高斯RBF核函数
K
(
a
,
b
)
=
e
x
p
(
−
γ
∣
∣
a
−
b
∣
∣
2
)
K(\bold a, \bold b) =exp(-\gamma ||\bold a - \bold b ||^2)
K(a,b)=exp(−γ∣∣a−b∣∣2)
Sigmoid核函数
K
(
a
,
b
)
=
t
a
n
h
(
γ
a
T
⋅
b
+
r
)
K(\bold a, \bold b) = tanh(\gamma a^T\cdot \bold b+r)
K(a,b)=tanh(γaT⋅b+r)
决策树
决策树是非常直观的,他们的决策也很容易解释,这类模型通常被称为白盒模型。
决策树的特质之一就是,他们需要的数据准备工作特别少。特别是完全不需要进行特征缩放或者集中。
参考资料:
ID3,C4.5
ID3划分数据集的方式是使用信息增益,而ID45使用的是信息增益比。
首先定义信息熵
H
=
−
Σ
i
=
0
n
p
(
x
i
)
l
o
g
2
p
(
x
i
)
H = -\Sigma_{i=0}^np(x_i)log_2p(x_i)
H=−Σi=0np(xi)log2p(xi)
对于某一个节点,各个标签的概率与对应概率的乘积之和。
- 当节点中只有一个类别时,信息熵为0
- 在一个节点中,类别越多,信息熵就越高,也就意味着包含的信息越丰富
- 当类别数量相同时,各个类别占比越均衡,基尼不纯度就越大。
CART
ID3使用信息增益划分数据集
原理是,遍历每一个特征,将这个特征下的每一个值对应的样本实例划分为一个数据集,之后计算每个值的信息熵,把这个特征对应的各个子信息熵求和作为总的信息熵,减去分割前的总数据集的信息熵,就得到信息增益。另 n n n为特征总数, m m m为某个特征不同的值的数量,信息增益表示为
g a i n ( k ) = H k − Σ i = 0 m H i k p i k gain(k) = H_k -\Sigma_{i=0}^mH_{ik} p_{ik} gain(k)=Hk−Σi=0mHikpik
信息增益最大的特征,就是用于划分数据集的特征。
C4.5使用信息增益比划分数据集
g
a
i
n
(
k
)
=
Σ
i
=
0
m
H
i
k
p
i
k
H
k
gain(k) = \frac {\Sigma_{i=0}^mH_{ik} p_{ik}}{H_k}
gain(k)=HkΣi=0mHikpik
相关公式
基尼不纯度
第i个节点上的基尼不纯度。
G
i
=
1
−
Σ
k
=
1
n
p
i
,
k
2
G_i=1-\Sigma_{k=1}^np_{i,k}^2
Gi=1−Σk=1npi,k2
p
i
,
k
p_{i,k}
pi,k是在第i个节点上,类别为k的实例占比。
- 当节点中只有一个类别时,基尼不纯度为0
- 当节点中类别越多,基尼不纯度越大。
- 类别相同时,类别数量越均衡,基尼不纯度越大。
CART分类成本函数(分裂的原则)
J ( k , t k ) = m l e f t m G l e f t + m r i g h t m G r i g h t J(k,t_k) = \frac {m_{left}}mG_{left}+\frac {m_{right}}mG_{right} J(k,tk)=mmleftGleft+mmrightGright
正则化超参数
决策树极少对训练数据做出假设,。如果不加以限制,树的结构将跟随训练集变化,严密拟合,并且很可能过度拟合。这种模型通常被称为非参数模型(在训练之前没有确定参数的数量,导致模型结构紧密贴近数据)。为了避免过拟合,需要在训练过程中降低决策树的自由度。也就是决策树的正则化.
通常有两种做法:
预剪枝
- 决策树的最大深度
- 分裂前节点应该具有的最小样本数
- 叶节点必须有的最小样本数
- 叶节点必须有的最小样本数(加权实例总数的占比)
- 最大叶节点数量
后剪枝
先不加约束地创建树,延后再删除不必要的节点。
CART树回归
和分类相比,唯一的不同在于,他分裂训练集的方式不是最小化不纯度,而是最小化MSE。
CART回归成本函数(分裂的原则)
J
(
k
,
t
k
)
=
m
l
e
f
t
m
M
S
E
l
e
f
t
+
m
r
i
g
h
t
m
M
S
E
r
i
g
h
t
J(k,t_k) = \frac {m_{left}}m{MSE}_{left}+\frac {m_{right}}m{MSE}_{right}
J(k,tk)=mmleftMSEleft+mmrightMSEright
其中
{
M
S
E
n
o
d
e
=
Σ
(
y
^
n
o
d
e
−
y
(
i
)
)
y
^
=
1
m
n
o
d
e
Σ
i
∈
n
o
d
e
y
(
i
)
\left\{\begin{matrix} MSE_{node}=\Sigma(\hat y_{node} -y^{(i)})\\ \hat y=\frac 1{m_{node}}\Sigma_{i\in node} y^{(i)} \end{matrix}\right.
{MSEnode=Σ(y^node−y(i))y^=mnode1Σi∈nodey(i)
树回归的特点
- 容易理解和解释
- 使用简单,功能全面强大
- 对数据的旋转非常敏感
树剪枝
部分剪枝技巧
- 训练过程中,降低决策树的最大深度。
- 分裂前节点必须有的最小样本数
- 叶节点必须有的最小样本数
- 叶节点加权实例占比
- 最大叶节点的数量
- 每个节点评估的最大特征数量
剪枝的相关文章
集成学习随机森林
投票分类器
使用若干个若分类器,聚合每个分类器的预测,然后将投票最多的结果作为预测类别,这种大多数的投票分类器被称为硬投票分类器
硬投票和软投票
硬投票:指的是根据每个分类器的预测结果,以少数服从多数的原则,进行最终决策结果的输出。
软投票:指的是根据每个分类器的预测结果,将每个类别的预测概率进行求和平均,平均值最大的结果,作为投票器最终的输出结果。
当预测期尽可能互相独立时,集成的方法最优。
使用不同的算法是实现独立
获得多种分类器的方法之一就是使用不同的算法进行训练。这会增加他们犯不同类型错误的机会,从而提升集成的概率。
使用不同的数据集实现独立
另一种方式使预测器独立的方式是使用相同的算法,但是在不同的随机训练子集上进行训练。
- bagging(bootstrap aggregating)采样时,将样本放回进行采样。也叫自举汇聚法。bagging方式通常生成的模型更好。
- pasting :采样时,同一个预测期采样时不放回。允许多个预测期同时对一个实例进行采样。
包外评估
bagging抽样时,是从m个样本中,抽取m个作为每个预测器的输入。当m无穷大时,会有大约37%的样本违背样的训练实例,这些实例被称为包外实例。对于不同的测试器,这37%的实例是不一样的。
正好可以使用这37%进行验证。
l i m n → ∞ p = l i m n → ∞ ( 1 − 1 n ) n = 1 e \mathop {lim} \limits_{n\to\infty }p=\mathop {lim} \limits_{n\to\infty }(1-\frac 1{n})^n=\frac 1{e} n→∞limp=n→∞lim(1−n1)n=e1
随机森林
随机森林是决策树的集成,通常是bagging(有时也可能是是pasting)方法进行训练的。随机森林在树的生长上引入了更多的随机性
分裂节点时,不再是搜索最好的特征,而是在一个随机生成的特征子集里搜索最好的特征。这导致决策树具有更大的多样性,用更高的偏差换区更低的方差,总之还产生了一个整体性能更优的模型。
极端随机树
在随机森林中,如果对每个特征使用随机阈值,而不是搜索得出最佳阈值(如常规决策树),则可能让决策树生长得更加随机。这种极端随机的决策树组成的森林,被称为极端随机树集成。
极短随机树训练起来比常规随机森林要快很多,因为在每个节点上找到每个特征的最佳阈值是决策树生长中最耗时的任务之一。
提升法(Boosting)
提升法是指将几个弱学习器结合成一个强学习器的任意集成方法。大多数提升法的总体思路是循环训练预测器,每次都对前序做出一些改正。
Adaboost
新预测器更多地关注前序拟合不足的训练实例,从而使新预测期越来越关注于难缠的问题。
训练过程中,为每个样本实例和预测器指定权重,对于某一个预测器训练完成之后,根据样本的错误率,更新样本权重和这个预测器的权重。之后,使用调整权重后的样本,对下一个预测器进行训练,不断循环向前。
训练完成之后,集成整体预测和bagging和pasting方法是一样的了。
Adaboost相关公式
(公式的内容,和另一本机器学习上的稍微有些差别)
-
第i个预测器的加权误差率
r j = Σ i = 1 , y ^ j i ≠ y ( i ) m w ( i ) Σ i = 1 m w ( i ) r_j = \frac {\Sigma_{i=1, \hat y_j^i\neq y^{(i)}}^m\ w^{(i)}}{\Sigma_{i=1}^m w^{(i)}} rj=Σi=1mw(i)Σi=1,y^ji=y(i)m w(i) -
预测器权重
r j = η l o g 1 − r j r j r_j = \eta log\frac {1-r_j}{r_j} rj=ηlogrj1−rj -
权重更新规则
w ( i ) { w ( i ) ( y ^ j ( i ) = y ( i ) ) w ( i ) e ( − α j ) ( y ^ j ( i ) ≠ y ( i ) ) w^{(i)} \left\{\begin{matrix} w^{(i)}\; (\hat y_j^{(i)}=y^{(i)})\\ w^{(i)}e^{(-\alpha_j)} \; (\hat y_j^{(i)}\neq y^{(i)}) \end{matrix}\right. w(i){w(i)(y^j(i)=y(i))w(i)e(−αj)(y^j(i)=y(i)) -
Adaboost预测
y ^ ( x ) = a r g m a x k Σ j = 1 , y ^ j i ≠ y ( i ) N α j \hat y(\bold x) = \mathop {argmax} \limits_k \Sigma_{j=1, \hat y_j^i\neq y^{(i)}}^N \alpha_j y^(x)=kargmaxΣj=1,y^ji=y(i)Nαj
梯度提升(Gradient Boosting)
和AdaBoost不同的是,他不像AdaBoost那样在每个迭代中调整实例权重,而是让新的预测器针对前一个预测器的残差进行拟合。
堆叠法
之前的集成方式的最后一步,是使用一些简单的函数来聚合集成中所有预测器的预测,而堆叠法的思路是,是训练一个模型,来执行这个聚合。以各个分类器的输出作为混合器或者叫作元学习器的输入,进行最终的预测。
神经网络
半监督学习
有些算法可以处理部分标记的数据,通常是大量未标记数据和少量标记数据。则成为班监督式学习。
也就是说,部分需要人工去标记,部分需要机器自动去识别。如相册的人物识别。
降维
降维的特点
- 能够减速训练,也会轻微降低系统的性能。
- 降维让流水线更为复杂,维护难度上升。
- 降维确实会丢失一部分信息,因此降维的前提是降维后的数据,是能够满足模型训练的需求的。
- 降维之后,有利于数据的可视化。
所以,如果训练太慢,该尝试的还是继续使用原始数据,然后再考虑数据降维。
两种主要的数据降维方法,投影和流行学习
三种数据降维的技术,PCA、Kernal PCA以及LLE。
PCA
主成分分析可以将训练集中识别出哪条轴对差异性的贡献度最高。
主成分的方向是不稳定的,如果稍微打乱数据集,然后重新运行PCA,部分新的主成分可能指向跟原来主成分相反的方向。
主成分通过一种标准矩阵分解技术来是实现,焦作奇异值分解。将矩阵分成三部分
X
=
U
⋅
Σ
⋅
V
T
\bold X = \bold U \cdot \bold \Sigma \cdot \bold V^T
X=U⋅Σ⋅VT
低维度投影
X
d
−
p
r
o
j
=
X
⋅
W
d
\bold X_{d-proj}=\bold X\cdot \bold W_d
Xd−proj=X⋅Wd
W
d
\bold W_d
Wd是
V
T
\bold V^T
VT前d列构成的矩阵。
矩阵分解时,同时可以生成方差解释率,表示了每个主成分轴对整个数据集的方差的贡献度。
可以去前d个维度解释率之和大于某个值时的d值作为维度的取值。
增量PCA
增量PCA主要是应对内存不足时的技术实现方式。
随机PCA
他能够找到前d个主成分的近似值,他的计算复杂度是
O
(
m
×
d
2
)
+
O
(
d
3
)
O(m \times d^2)+O(d^3)
O(m×d2)+O(d3),而不是
O
(
m
×
n
2
)
+
O
(
n
3
)
O(m\times n^2)+O(n^3)
O(m×n2)+O(n3),当d<<n时,运算会很快。
核主成分分析
使用核技巧,应用再PCA上,使得复杂的非线性投影降维成为可能。
由于kPCA是一种无监督的学习算法,因此没有明显的性能指标来帮助你选择最佳的核函数和超参数值,而降维通常是监督式学习任务的准备步骤,因此通常通过网格搜索的方式来寻找最佳的核和超参数。
LLE
很难扩展到大型数据集,不再讨论。
无监督学习
k-平均算法
K-均值是发现给定数据集的k个族的算法。族个数是用户给定的,每个族通过其质心(centeroid),即族中的中心点来描述的。
工作流程
- 随机选择k个初始点作为质心
- 将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。
- 将每个簇的质心更新为该簇所有点的平均值。
通俗一点来讲,先指定k个质心,然后逐个处理样本中的每个实例;对于某个实例而言,如果这个实例离哪一个质心最近,就把这个实例分配给这个质心;所有的实例处理完成之后,更新质心的位置,更新的方式就是根据这一轮处理中所有分配到这个簇上的实例计算质心的位置,并更新;直到数据点的簇分配结果不再改变位置。
评价聚类效果的指标
SSE(Sum of Squared Error)误差平方和:SSE越小,表示数据点月接近他们的质心,聚类效果也越好。一种肯定能降低SSE值的方式是增加簇的个数(极限值是每个实例为一个簇),但这违背了聚类的目标。聚类的目标是在保持簇数不变的情况下,提高聚类效果。
一种方式是将最大SSE值的簇花费为两个簇。即在这个簇中,运行K-近邻算法,令k=2
为了保持簇总数不变,可以将某两个簇进行合并。
- 通过计算所有质心之间的距离,然后合并距离最近的两个点。
- 先选两个簇进行合并,然后计算总的SSE, 重复执行这个过程,直到直到找到合并最佳的两个簇为止。
二分K-均值法
该算法首先将所有点作为一个簇,然后将簇一分为二,之后选择其中一个簇进行划分,选择哪一个簇取决于其划分是否可以最大程度降低SSE值。上述划分不断重复,直到得到用户指定的簇数目为止。
Apriori进行关联分析
从大规模的数据集中寻找物品建的隐含关系被称作关联分析(association analysis)或者关联学习(association rule learning)
基本概念
支持度:数据集中包含该项集的记录所占的比例。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集。支持度是没有方向性的。
置信度/可信度:是针对某一条关联规则
{
A
→
B
}
\{A \to B\}
{A→B}来进行定义的。表示的是,A出现时,B出现的可能性。注意,置信度是有方向性的
{
A
→
B
}
\{A \to B\}
{A→B}
{
B
→
A
}
\{B \to A\}
{B→A}的置信度结果可能是不一样的。
Apriori
如果采用枚举的方式计算频繁项,可能的组合会有很多种,计算机处理起来会很困难。而Apriori就是为了解决这个问题的。
Apriori核心内容是:如果某个项集是频繁(满足最小支持度)的,那么他的所有的子集也一定是频繁的。比如说如果 { 0 , 1 } \{0,1\} {0,1}是频繁的,那么
分层聚类分析
最大期望算法
关联学习
Apriori
Apriori序列模式
Eclat
可视化和降维
主成分分析
核主成分分析
局部线性嵌入
t-分布随机近邻嵌入(t-SNE)
强化学习
学习系统能够观察环境,做出选择,执行操作,获得回报,或者以负面回报的形式获得惩罚。
在线学习
循序渐进给体统提供训练数据,逐步积累学习成果。提供数据可以是单独的,也可以是小批量的。
批量学习
在离线系统下进行学习,训练系统,然后将其投入到生产环境,这个时候学习过程停止。
基于实例的学习
建立规则
基于模型的学习
建立模型
机器学习的主要困难
- 训练数据不足
- 训练数据不具有代表性
- 数据的质量差
- 数据中包含无关特征
- 训练数据过度拟合(泛化能力差)
- 训练数据拟合不足