从数据源中探寻有用的模式(Pattern)或知识的过程。
机器学习是对能通过经验自动改进的计算机算法的研究,是用数据或以往的经验,以此优化计算机程序的性能标准。
有监督学习从有标记的训练数据中推导出预测函数。有标记的训练数据是指每个训练实例都包括输入和期望的输出。
给定数据,预测标签
无监督学习从无标记的训练数据中推断结论。最典型的无监督学习就是聚类分析,它可以在探索性数据分析阶段用于发现隐藏的模式或者对数据进行分组。
给定数据,寻找隐藏的结构/特征
回归问题:预测一个值
如:预测房价、未来的天气情况等
分类问题:将事物打上一个标签,通常结果为离散值
如:判断一幅图片上的动物是一只猫还是一只狗
分类通常是建立在回归之上,分类的最后一层通常要使用 softmax 函数进行判断其所属类别。
关联规则(Association Rule):数据中所蕴含的一类重要规则
序列模式:给定一个由不同序列组成的集合,其中每个序列由不同的元素按顺序有序排列,每个元素由不同项目组成
规则 X → Y X \rightarrow Y X→Y 的支持度是指 T T T 中包含 X ∪ Y X \cup Y X∪Y 的事务的百分比:
支持度 = ( X ∪ Y ) . c o u n t n 支持度 = {{(X \cup Y).count} \over n} 支持度=n(X∪Y).count
序列模式支持度:序列中包含有该序列的数据占总数据的比重
规则 X → Y X \rightarrow Y X→Y 的置信度是指即包含 X X X 又包含 Y Y Y 的事务的数量占所有包含了 X X X 的事务的百分比:
置信度 = ( X ∪ Y ) . c o u n t X . c o u n t 置信度 = {{(X \cup Y).count} \over {X.count}} 置信度=X.count(X∪Y).count
A c c u r a c y = c o r r e c t t o t a l Accuracy = {{correct} \over {total}} Accuracy=totalcorrect
分类为正例 | 分类为负例 | |
---|---|---|
实际上为正例 | TP | FN |
实际上为负例 | FP | TN |
查准率 = 被正确分类的正例数量 / 被分类为正例的数据数量
p = T P T P + F P p = \frac {TP} {TP+FP} p=TP+FPTP
查全率 = 被正确分类的正例数量 / 实际的正例数量
r = T P T P + F N r = \frac {TP} {TP + FN} r=TP+FNTP
F-score 是查准率( p p p)与查全率( r r r)的调和平均值
查全率的提高往往是在牺牲查准率的情况下得到的,反之亦然;因此,需要使用 F-score
如果要使得 F-score 很高的话, p p p 和 r r r 都需要很高
F = 2 1 p + 1 r = 2 p r p + r F = \frac {2} {\frac 1 p + \frac 1 r} = \frac {2pr} {p+r} F=p1+r12=p+r2pr
数据准备:将数据集分成 K K K 个不相交的等大数据子集
K 次迭代:
监督学习算法通常被描述为执行搜索假设空间的任务以找到合适的假设,该假设将对特定问题做出良好预测。即使假设空间包含非常适合特定问题的假设,也可能很难找到一个很好的假设。集成学习结合多个假设,形成一个(希望)更好的假设。
聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。
d i s t ( x i ⃗ , x j ⃗ ) = ( ∣ x i 1 ⃗ − x j 1 ⃗ ∣ h + ∣ x i 2 ⃗ − x j 2 ⃗ ∣ h + ⋯ + ∣ x i r ⃗ − x j r ⃗ ∣ h ) 1 h dist(\vec {x_i}, \vec {x_j}) = (|\vec {x_{i1}} - \vec {x_{j1}}|^h + |\vec {x_{i2}} - \vec {x_{j2}}|^h + \cdots + |\vec {x_{ir}} - \vec {x_{jr}}|^h)^{\frac 1 h} dist(xi,xj)=(∣xi1−xj1∣h+∣xi2−xj2∣h+⋯+∣xir−xjr∣h)h1
d i s t ( x i ⃗ , x j ⃗ ) = ( x i 1 ⃗ − x j 1 ⃗ ) 2 + ( x i 2 ⃗ − x j 2 ⃗ ) 2 + ⋯ + ( x i r ⃗ − x j r ⃗ ) 2 dist(\vec {x_i}, \vec {x_j}) = \sqrt {(\vec {x_{i1}} - \vec {x_{j1}})^2 + (\vec {x_{i2}} - \vec {x_{j2}})^2 + \cdots + (\vec {x_{ir}} - \vec {x_{jr}})^2} dist(xi,xj)=(xi1−xj1)2+(xi2−xj2)2+⋯+(xir−xjr)2
d i s t ( x i ⃗ , x j ⃗ ) = ∣ x i 1 ⃗ − x j 1 ⃗ ∣ + ∣ x i 2 ⃗ − x j 2 ⃗ ∣ + ⋯ + ∣ x i r ⃗ − x j r ⃗ ∣ dist(\vec {x_i}, \vec {x_j}) = |\vec {x_{i1}} - \vec {x_{j1}}| + |\vec {x_{i2}} - \vec {x_{j2}}| + \cdots + |\vec {x_{ir}} - \vec {x_{jr}}| dist(xi,xj)=∣xi1−xj1∣+∣xi2−xj2∣+⋯+∣xir−xjr∣
每个属性都有一个权值来表示它相对于其他属性的重要性
d i s t ( x i ⃗ , x j ⃗ ) = w 1 ( x i 1 ⃗ − x j 1 ⃗ ) 2 + w 2 ( x i 2 ⃗ − x j 2 ⃗ ) 2 + ⋯ + w r ( x i r ⃗ − x j r ⃗ ) 2 dist(\vec {x_i}, \vec {x_j}) = \sqrt {w_1(\vec {x_{i1}} - \vec {x_{j1}})^2 + w_2(\vec {x_{i2}} - \vec {x_{j2}})^2 + \cdots + w_r(\vec {x_{ir}} - \vec {x_{jr}})^2} dist(xi,xj)=w1(xi1−xj1)2+w2(xi2−xj2)2+⋯+wr(xir−xjr)2
加大了距离较远的数据点的权重
d i s t ( x i ⃗ , x j ⃗ ) = ( x i 1 ⃗ − x j 1 ⃗ ) 2 + ( x i 2 ⃗ − x j 2 ⃗ ) 2 + ⋯ + ( x i r ⃗ − x j r ⃗ ) 2 dist(\vec {x_i}, \vec {x_j}) = {(\vec {x_{i1}} - \vec {x_{j1}})^2 + (\vec {x_{i2}} - \vec {x_{j2}})^2 + \cdots + (\vec {x_{ir}} - \vec {x_{jr}})^2} dist(xi,xj)=(xi1−xj1)2+(xi2−xj2)2+⋯+(xir−xjr)2
当需要**定义当两个数据点有一个属性值不同时它们就是“不同的”**时,切比雪夫距离定义是合适的
d i s t ( x i ⃗ , x j ⃗ ) = m a x ( ∣ x i 1 ⃗ − x j 1 ⃗ ∣ , ∣ x i 2 ⃗ − x j 2 ⃗ ∣ , ⋯ , ∣ x i r ⃗ − x j r ⃗ ∣ ) dist(\vec {x_i}, \vec {x_j}) = max(|\vec {x_{i1}} - \vec {x_{j1}}|, |\vec {x_{i2}} - \vec {x_{j2}}|, \cdots , |\vec {x_{ir}} - \vec {x_{jr}}|) dist(xi,xj)=max(∣xi1−xj1∣,∣xi2−xj2∣,⋯,∣xir−xjr∣)
通过计算两个向量的夹角余弦值:
c o s θ = x ⃗ ⋅ y ⃗ ∣ ∣ x ⃗ ∣ ∣ × ∣ ∣ y ⃗ ∣ ∣ cos \theta = \frac {\vec x \cdot \vec y} {||\vec x|| \times ||\vec y||} cosθ=∣∣x∣∣×∣∣y∣∣x⋅y
余弦相似度的取值范围为 [ − 1 , 1 ] [-1, 1] [−1,1],值越大表示越相似。
Jaccard 指数用于度量样本集中的相似度。
设两数据点 x ⃗ \vec x x 与 y ⃗ \vec y y,它们的每个属性都是布尔属性,则:
则 Jaccard 距离为:
d i s t ( x ⃗ , y ⃗ ) = b + c a + b + c dist(\vec x, \vec y) = \frac {b + c} {a + b + c} dist(x,y)=a+b+cb+c
如果一个项集满足某个最小支持度要求,那么这个项集的任何非空子集必须都满足这个最小支持度。
决策树的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类的分布。
决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择选择下一比较分支,直到叶子节点作为最终的决策结果。
当前结点包含的样本全属于同一个类别,无需划分
当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
将当前结点标记为叶结点,类别为该结点所包含的样本最多的类别
当前结点包含的样本集合为空,不能划分
将当前结点标记为叶结点,类别为父结点所包含样本最多的类别
剪枝(pruning)的目的是为了避免决策树模型的过拟合。
因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多(即模型过于复杂),也就导致了过拟合。
预剪枝(pre-pruning):在构造决策树的过程中,先对每个结点在划分前进行估计,如果当前结点的划分不能带来决策树模型泛化性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。
后剪枝(post-pruning):先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛化性能的提升,则把该子树替换为叶结点。
二分法
熵:用来描述“一个系统的混乱程度”
一个系统的信息熵越高就越无序,信息熵越低就越有序,信息熵越高,使其有序所要消耗的信息量就越大。
假设变量 x ⃗ = { x 1 , x 2 , ⋯ , x i , ⋯ , x n } \vec x = \{x_1, x_2, \cdots, x_i, \cdots, x_n \} x={x1,x2,⋯,xi,⋯,xn},其中每个元素对应的概率为 p ⃗ = { p 1 , p 2 , ⋯ , p i , ⋯ , p n } \vec p = \{p_1, p_2, \cdots, p_i, \cdots, p_n \} p={p1,p2,⋯,pi,⋯,pn},则对应的熵的计算公式如下:
e n t r o p y ( x ⃗ ) = − ∑ i = 1 n p i l o g 2 ( p i ) entropy(\vec x) = - \displaystyle \sum^n_{i=1} p_i log_2(p_i) entropy(x)=−i=1∑npilog2(pi)
而信息增益(Info-Gain)指的就是熵的减少量(信息增益衡量信息混乱度的减少量):
G a i n ( S , A ) = e n t r o p y ( S ) − e n t r o p y ( A ) Gain(S, A) = entropy(S) - entropy(A) Gain(S,A)=entropy(S)−entropy(A)
其中, S S S 和 A A A 分别代表操作前后的数据划分状态。
\frac {
{\rm Pr}(C=c_j) \space \displaystyle \prod^{|A|}{i=1} {\rm Pr}(A_i=a_i \space | \space C=c_j)
} {
\displaystyle \sum^{|C|}{k=1} {\rm Pr}(C=c_k) \space \displaystyle \prod^{|A|}{i=1} {\rm Pr}(A_i=a_i \space | \space C=c_k)
}
KaTeX parse error: Can't use function '$' in math mode at position 22: …**从训练数据中估计先验概率 $̲{\rm Pr}(C=c_j)…
{\rm Pr}(C=c_j) = \frac {属于类别 \space c_j \space 的样例总数} {数据集中的样例总数}
\
{\rm Pr}(A_i=a_i \space | \space C=c_j) = \frac {A_i = a_i \space 并且属于类别 \space c_j \space 的样例总数} {属于类别 \space c_j \space 的样例总数}
最后,给定一个测试样例,通过计算下式来决定最有可能的类别: 最后,给定一个测试样例,通过计算下式来决定最有可能的类别: 最后,给定一个测试样例,通过计算下式来决定最有可能的类别:
c = argmax{c_j} \space {\rm Pr}(C=c_j) \space \displaystyle \prod^{|A|}_{i=1} {\rm Pr}(A_i=a_i \space | \space C=c_j)
$$
“数据样本独立同分布”是样本之间的独立性,“特征条件独立性假设”是针对每个样本内部特征之间的独立性,两个独立性假设让模型变得朴素、计算变得简单,尽管牺牲了一些精确度,但在特定的使用场景下也是值得的。
数据样本之间独立同分布意味着各个数据样本点之间没有依赖关系,也没有时序关系(或者时序关系不重要),是从同一个分布经过多次采样得到的。
如果不是同分布,是由多个分布产生的,那就是混合模型了,典型的如混合高斯模型;如果不独立,样本之间存在某种关系,那就需要把这种依赖关系建模进模型,如几天的天气情况可以使用马尔科夫网络建模。
假设一个样本 x x x 有 n n n 个特征,特征条件独立性假设说的就是在特定类别下这些特征之间是独立的。
对所有概率加入一个小样本校正:令 n i j n_{ij} nij 为同时满足 A i = a i A_i = a_i Ai=ai 和 C = c j C=c_j C=cj 的样本数量,令 n j n_j nj 为训练数据中 C = c j C=c_j C=cj 的数据总数,则校正后的估计是:
P r ( A i = a i ∣ C = c j ) = n i j + λ n j + λ m i {\rm Pr}(A_i=a_i \space | \space C=c_j) = \frac {n_{ij} + \lambda} {n_j + \lambda m_i} Pr(Ai=ai ∣ C=cj)=nj+λminij+λ
其中 m i m_i mi 是 A A A 可能值的总数, λ \lambda λ 是一个因子,一般设为 λ = 1 / n \lambda = 1/n λ=1/n( n n n 是训练数据的总数),当 λ = 1 \lambda = 1 λ=1 时,得到 Laplace 延续率。
假设空间中有超平面 W ⃗ x ⃗ + b = 0 \vec W \vec x + b = 0 Wx+b=0,其中 W ⃗ \vec W W 是法向量,则点 x i ⃗ \vec {x_i} xi 到超平面 W ⃗ x ⃗ + b = 0 \vec W \vec x + b = 0 Wx+b=0 的垂直欧式距离为:
∣ W ⃗ x i ⃗ + b ∣ ∣ ∣ W ⃗ ∣ ∣ {|\vec W \vec {x_i} + b|} \over {||\vec W||} ∣∣W∣∣∣Wxi+b∣
其中 ∣ ∣ W ⃗ ∣ ∣ ||\vec W|| ∣∣W∣∣ 是 W ⃗ \vec W W 的欧式范数。
SVM 最大化正例与负例之间的边距 → \rightarrow → 提高模型鲁棒性
对正例,支持向量所在的超平面 H + H_+ H+ 为 W ⃗ x ⃗ + b = 1 \vec W \vec x + b = 1 Wx+b=1;对负例,支持向量所在的超平面 H − H_- H− 为 W ⃗ x ⃗ + b = − 1 \vec W \vec x + b = -1 Wx+b=−1。
支持向量:使得 y i ( W ⃗ x ⃗ i + b ) − 1 = 0 y_i(\vec W \vec x_i + b) - 1 = 0 yi(Wxi+b)−1=0 的若干个点
定义 d + d_+ d+ 与 d − d_- d− 为超平面 W ⃗ x ⃗ + b = 0 \vec W \vec x + b = 0 Wx+b=0 离正例与负例的最近距离,有 d + = d − = 1 ∣ ∣ W ⃗ ∣ ∣ d_+ = d_- = {1 \over {||\vec W||}} d+=d−=∣∣W∣∣1,即边距 m a r g i n = d + + d − = 2 ∣ ∣ W ⃗ ∣ ∣ margin = d_+ + d_- = {2 \over {||\vec W||}} margin=d++d−=∣∣W∣∣2。
最大化边距 m a r g i n margin margin < = > <=> <=> 最小化 ∣ ∣ W ⃗ ∣ ∣ 2 / 2 ||\vec W||^2 / 2 ∣∣W∣∣2/2 < = > <=> <=> 最小化 W ⃗ T W ⃗ / 2 \vec W^T \vec W / 2 WTW/2
且需要满足 y i ( W ⃗ x ⃗ + b ) ≥ 1 , i = 1 , 2 , ⋯ , n y_i(\vec W \vec x + b) \ge 1, \space i=1, 2, \cdots,n yi(Wx+b)≥1, i=1,2,⋯,n :
$$
\vec W \vec x + b \ge 1 ,当 \space y_i = 1
\
\vec W \vec x + b \le -1 ,当 \space y_i = -1
故可以使用标准 ∗ ∗ 拉格朗日乘子 ∗ ∗ 方法解决,即: 故可以使用标准**拉格朗日乘子**方法解决,即: 故可以使用标准∗∗拉格朗日乘子∗∗方法解决,即:
L_p = {1 \over 2} ||\vec W|| - \displaystyle \sum^{n}_{i = 1} \alpha_i [y_i(\vec W \vec x_i + b) - 1]
$$
其中, α i ≥ 0 \alpha_i \ge 0 αi≥0 就是拉格朗日乘子。
L = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i L = \frac 1 2 \displaystyle \sum^N_{i=1} \sum^N_{j=1} \alpha_i \alpha_j y_i y_j (x_i \cdot x_j) - \sum^N_{i=1} \alpha_i L=21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi
w ⃗ ∗ = ∑ i = 1 N α i ∗ y i x i ⃗ b ∗ = y j − ∑ i = 1 N α i ∗ y i ( x i ⃗ ⋅ x j ⃗ ) \vec w^* = \displaystyle \sum^N_{i = 1} \alpha^*_i y_i \vec {x_i} \\ b^* = y_j - \displaystyle \sum^N_{i = 1} \alpha^*_i y_i (\vec {x_i} \cdot \vec {x_j}) w∗=i=1∑Nαi∗yixib∗=yj−i=1∑Nαi∗yi(xi⋅xj)
简化计算
当预测一个新的值 x x x 的时候,根据它距离最近的 K K K 个点是什么类别来判断 x x x 属于哪个类别。
给定样本集 D = { x 1 ⃗ , x 2 ⃗ , ⋯ , x m ⃗ } D=\{\vec {x_1}, \vec {x_2}, \cdots, \vec {x_m} \} D={x1,x2,⋯,xm},“ k k k 均值“算法针对聚类所得簇划分 C = { C 1 , C 2 , ⋯ , C k } C = \{C_1, C_2, \cdots, C_k \} C={C1,C2,⋯,Ck} 最小化平方误差:
E = ∑ i = 1 k ∑ x ⃗ ∈ C i ∣ ∣ x ⃗ − μ i ⃗ ∣ ∣ 2 2 E = \displaystyle \sum^k_{i=1} \sum_{\vec x \in C_i} ||\vec x - \vec {\mu_i}||^2_2 E=i=1∑kx∈Ci∑∣∣x−μi∣∣22
其中 μ i ⃗ = 1 ∣ C i ∣ ∑ x ⃗ ∈ C i x ⃗ \vec {\mu_i} = \frac 1 {|C_i|} \sum_{\vec x \in C_i} \vec x μi=∣Ci∣1∑x∈Cix 是簇 C i C_i Ci 的均值向量。
选择 k 个“初始均值向量中心”
repeat
1. 将数据集中每个数据分配到距离最近的“均值向量中心”(一般使用欧氏距离作度量)
2. 重新计算每个簇的“均值向量中心”
until 没有数据点被重新分配给不同的聚类 | 没有聚类中心再发生变化 | 平方误差局部最小
通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性(距离越小,相似度越高),并将距离最近的两个数据点或类别进行组合,生成聚类树。
Bagging使用装袋采样来获取数据子集训练基础学习器。
通常分类任务使用投票的方式集成,而回归任务通过平均的方式集成。
经过 bagging 得到的结果方差(variance)更小。
Boosting指的是通过算法集合将弱学习器转换为强学习器。
训练的方式是利用加权的数据。在训练的早期对于错分数据给予较大的权重。
经过 boosting 得到的结果偏差(bias)更小。
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
在许多实际问题中,有标签样本和无标签样本往往同时存在,且无标签样本较多,而有标签样本则相对较少。
半监督学习:在少量样本标签的引导下,能够充分利用大量无标签样本提高学习性能,避免了数据资源的浪费,同时解决了有标签样本较少时监督学习方法泛化能力不强和缺少样本标签引导时无监督学习方法不准确的问题。
半监督算法可以分为两类:直推式和归纳式。
直推式半监督中只包含有标签样本集和测试样本集,且测试样本也是无标签样本。直推式半监督算法先将测试样本视为无标签样本,然后利用有标签样本和无标签样本训练模型,并在训练过程中预测无标签样本。因此,直推式半监督算法只能处理当前的无标签样本(测试样本),不能直接进行样本外的扩展。对于新的测试样本,直推式半监督算法需要重新训练模型才能预测其标签。
归纳式半监督算法除了使用有标签样本集和无标签样本集外,还使用独立的测试样本集。归纳式半监督算法能够处理整个样本空间中的样本。归纳式半监督算法在有标签样本和无标签样本上训练学习模型。该模型不仅可以预测训练无标签样本的标签,还能直接预测新测试样本的标签。