基本概念
数据挖掘
从数据源中探寻有用的模式(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 |
查准率(Precision)
查准率 = 被正确分类的正例数量 / 被分类为正例的数据数量
p
=
T
P
T
P
+
F
P
p = \frac {TP} {TP+FP}
p=TP+FPTP
查全率(Recall)
查全率 = 被正确分类的正例数量 / 实际的正例数量
r
=
T
P
T
P
+
F
N
r = \frac {TP} {TP + FN}
r=TP+FNTP
F-score
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
过拟合 & 欠拟合
过拟合
- 模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差
- 模型没有理解数据背后的规律,泛化能力差
防止过拟合
- 提供正则化约束的参数正则化方法,如 L1/L2 正则化
- 通过工程上的技巧来实现更低泛化误差的方法,如提前终止(Early stopping)和Dropout
- 不直接提供约束的隐式正则化方法,如数据增强、控制模型复杂性、降低特征数量等
欠拟合
- 模型不能在训练集上获得足够低的误差
- 模型复杂度低,在训练集上就表现很差,没法学习到数据背后的规律
K折交叉验证
数据准备:将数据集分成 K K K 个不相交的等大数据子集
K 次迭代:
- 测试集:第 K K K 个子集
- 训练集:其余的 K − 1 K-1 K−1 个子集的
集成学习
监督学习算法通常被描述为执行搜索假设空间的任务以找到合适的假设,该假设将对特定问题做出良好预测。即使假设空间包含非常适合特定问题的假设,也可能很难找到一个很好的假设。集成学习结合多个假设,形成一个(希望)更好的假设。
聚类
聚类(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
Jaccard 指数用于度量样本集中的相似度。
设两数据点 x ⃗ \vec x x 与 y ⃗ \vec y y,它们的每个属性都是布尔属性,则:
- 令 a a a 为两个数据点中具有相同属性值 1 1 1 的属性个数
- 令 b b b 为两个数据点中 x i ⃗ = 1 \vec {x_i}=1 xi=1 且 y i ⃗ = 0 \vec {y_i} = 0 yi=0 的属性个数
- 令 c c c 为两个数据点中 x i ⃗ = 0 \vec {x_i}=0 xi=0 且 y i ⃗ = 1 \vec {y_i} = 1 yi=1 的属性个数
- 令 d d d 为两个数据点中具有相同属性值 0 0 0 的属性个数
则 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
关联规则挖掘 —— Apriori
向下封闭属性
如果一个项集满足某个最小支持度要求,那么这个项集的任何非空子集必须都满足这个最小支持度。
规则序列覆盖,关联规则用于分类
决策树
基本思想
决策树的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类的分布。
决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择选择下一比较分支,直到叶子节点作为最终的决策结果。
终止条件
-
当前结点包含的样本全属于同一个类别,无需划分
-
当前属性集为空,或是所有样本在所有属性上取值相同,无法划分
将当前结点标记为叶结点,类别为该结点所包含的样本最多的类别
-
当前结点包含的样本集合为空,不能划分
将当前结点标记为叶结点,类别为父结点所包含样本最多的类别
需要剪枝的原因
剪枝(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 分别代表操作前后的数据划分状态。
优点
- 面对类别较小的离散数据时表现较好
- 产生的分类规则易于理解,准确率较高
缺点
- 偏向取值较多的特征
- 在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效
- 只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行
朴素贝叶斯
基本思想
对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
P r ( C = c j ∣ A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ = a ∣ A ∣ ) = P r ( C = c j ) P r ( A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ = a ∣ A ∣ ∣ C = c j ) P r ( A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ = a ∣ A ∣ ) = P r ( C = c j ) P r ( A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ = a ∣ A ∣ ∣ C = c j ) ∑ k = 1 ∣ C ∣ P r ( C = c k ) P r ( A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ = a ∣ A ∣ ∣ C = c k ) {\rm Pr}(C=c_j \space | \space A_1=a_1,A_2=a_2,\cdots,A_{|A|}=a_{|A|}) \\ = \frac { {\rm Pr}(C=c_j) \space {\rm Pr}(A_1=a_1,A_2=a_2,\cdots,A_{|A|}=a_{|A|} \space | \space C=c_j) } {{\rm Pr}(A_1=a_1,A_2=a_2,\cdots,A_{|A|}=a_{|A|})} \\ \\ = \frac { {\rm Pr}(C=c_j) \space {\rm Pr}(A_1=a_1,A_2=a_2,\cdots,A_{|A|}=a_{|A|} \space | \space C=c_j) } { \displaystyle \sum^{|C|}_{k=1} {\rm Pr}(C=c_k) \space {\rm Pr}(A_1=a_1,A_2=a_2,\cdots,A_{|A|}=a_{|A|} \space | \space C=c_k) } Pr(C=cj ∣ A1=a1,A2=a2,⋯,A∣A∣=a∣A∣)=Pr(A1=a1,A2=a2,⋯,A∣A∣=a∣A∣)Pr(C=cj) Pr(A1=a1,A2=a2,⋯,A∣A∣=a∣A∣ ∣ C=cj)=k=1∑∣C∣Pr(C=ck) Pr(A1=a1,A2=a2,⋯,A∣A∣=a∣A∣ ∣ C=ck)Pr(C=cj) Pr(A1=a1,A2=a2,⋯,A∣A∣=a∣A∣ ∣ C=cj)
根据条件独立假设,得到:
P r ( A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ = a ∣ A ∣ ∣ C = c j ) = ∏ i = 1 ∣ A ∣ P r ( A i = a i ∣ C = c j ) {{\rm Pr}(A_1=a_1,A_2=a_2,\cdots,A_{|A|}=a_{|A|} \space | \space C=c_j)} = \displaystyle \prod^{|A|}_{i=1} {\rm Pr}(A_i=a_i \space | \space C=c_j) Pr(A1=a1,A2=a2,⋯,A∣A∣=a∣A∣ ∣ C=cj)=i=1∏∣A∣Pr(Ai=ai ∣ C=cj)
进而,得到朴素贝叶斯分类算法的核心公式:
P r ( C = c j ∣ A 1 = a 1 , A 2 = a 2 , ⋯ , A ∣ A ∣ ) = P r ( C = c j ) ∏ i = 1 ∣ A ∣ P r ( A i = a i ∣ C = c j ) ∑ k = 1 ∣ C ∣ P r ( C = c k ) ∏ i = 1 ∣ A ∣ P r ( A i = a i ∣ C = c k ) {\rm Pr}(C=c_j \space | \space A_1=a_1,A_2=a_2,\cdots,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) } Pr(C=cj ∣ A1=a1,A2=a2,⋯,A∣A∣)=k=1∑∣C∣Pr(C=ck) i=1∏∣A∣Pr(Ai=ai ∣ C=ck)Pr(C=cj) i=1∏∣A∣Pr(Ai=ai ∣ C=cj)
然后,需要从训练数据中估计先验概率
P
r
(
C
=
c
j
)
{\rm Pr}(C=c_j)
Pr(C=cj) 和条件概率
P
r
(
A
i
=
a
i
∣
C
=
c
j
)
{\rm Pr}(A_i=a_i \space | \space C=c_j)
Pr(Ai=ai ∣ C=cj):
P
r
(
C
=
c
j
)
=
属于类别
c
j
的样例总数
数据集中的样例总数
P
r
(
A
i
=
a
i
∣
C
=
c
j
)
=
A
i
=
a
i
并且属于类别
c
j
的样例总数
属于类别
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 的样例总数}
Pr(C=cj)=数据集中的样例总数属于类别 cj 的样例总数Pr(Ai=ai ∣ C=cj)=属于类别 cj 的样例总数Ai=ai 并且属于类别 cj 的样例总数
最后,给定一个测试样例,通过计算下式来决定最有可能的类别:
c
=
a
r
g
m
a
x
c
j
P
r
(
C
=
c
j
)
∏
i
=
1
∣
A
∣
P
r
(
A
i
=
a
i
∣
C
=
c
j
)
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)
c=argmaxcj Pr(C=cj) i=1∏∣A∣Pr(Ai=ai ∣ C=cj)
独立性假设
“数据样本独立同分布”是样本之间的独立性,“特征条件独立性假设”是针对每个样本内部特征之间的独立性,两个独立性假设让模型变得朴素、计算变得简单,尽管牺牲了一些精确度,但在特定的使用场景下也是值得的。
数据样本独立同分布
数据样本之间独立同分布意味着各个数据样本点之间没有依赖关系,也没有时序关系(或者时序关系不重要),是从同一个分布经过多次采样得到的。
如果不是同分布,是由多个分布产生的,那就是混合模型了,典型的如混合高斯模型;如果不独立,样本之间存在某种关系,那就需要把这种依赖关系建模进模型,如几天的天气情况可以使用马尔科夫网络建模。
特征条件独立性假设
假设一个样本 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 延续率。
多项式朴素贝叶斯 —— 文本分类
支持向量机(SVM)
假设空间中有超平面
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 :
W
⃗
x
⃗
+
b
≥
1
,当
y
i
=
1
W
⃗
x
⃗
+
b
≤
−
1
,当
y
i
=
−
1
\vec W \vec x + b \ge 1 ,当 \space y_i = 1 \\ \vec W \vec x + b \le -1 ,当 \space y_i = -1
Wx+b≥1,当 yi=1Wx+b≤−1,当 yi=−1
故可以使用标准拉格朗日乘子方法解决,即:
L
p
=
1
2
∣
∣
W
⃗
∣
∣
−
∑
i
=
1
n
α
i
[
y
i
(
W
⃗
x
⃗
i
+
b
)
−
1
]
L_p = {1 \over 2} ||\vec W|| - \displaystyle \sum^{n}_{i = 1} \alpha_i [y_i(\vec W \vec x_i + b) - 1]
Lp=21∣∣W∣∣−i=1∑nαi[yi(Wxi+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)
Kernel 函数
简化计算
KNN
当预测一个新的值 x x x 的时候,根据它距离最近的 K K K 个点是什么类别来判断 x x x 属于哪个类别。
优点
- 简单易用
- 模型训练时间快(KNN算法是惰性的)
- 预测效果好
- 对异常值不敏感
缺点
- 对内存要求较高(因为该算法存储了所有训练数据)
- 预测阶段可能很慢
- 对不相关的功能和数据规模敏感
K-means 聚类
给定样本集
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 没有数据点被重新分配给不同的聚类 | 没有聚类中心再发生变化 | 平方误差局部最小
优点
- 简洁
- 高效
缺点
- 应用于那些“均值能被定义”的数据集,很难被应用到范畴数据上
- 用户需要事先指定聚类数目 k k k
- 对于异常值十分敏感
层次聚类
合并(自下而上)聚类
- 开始:树状图的最底层
- 过程:每一次通过合并最相似(距离最近)的聚类来形成上一层中的聚类
- 终止:全部数据点都合并到一个聚类(根结点聚类)中时停止
通过计算每一个类别的数据点与所有数据点之间的距离来确定它们之间的相似性(距离越小,相似度越高),并将距离最近的两个数据点或类别进行组合,生成聚类树。
分裂(自上而下)聚类
- 开始:一个包含全部数据点的聚类(根)
- 过程:把根结点聚类分裂成一些子聚类,每个子聚类再递归地继续往下分裂
- 终止:每个聚类中仅包含一个数据点
层次聚类方法
- 单连结方法
- 两个聚类之间的距离:两个聚类中距离最近的两个数据点之间的距离
- 每一步合并那些最近元素具有最小值的距离,即具有最短最近数据点的两个聚类
- 对噪声数据敏感:可能会引发连锁反应而形成长链
- 全连结方法
- 两个聚类之间的距离:两个聚类中所有数据点之间两两距离的最大值
- 每一步合并那些最远元素具有最短距离,即具有最短最远数据点的两个聚类
- 对异常值敏感
- 平均连结方法
- 介于全连结防范对于异常值的敏感和单连结方法形成长链的趋势之间的折中方法
- 两个聚类之间的距离:两个聚类之中多个数据点对之间距离之和的平均值
神经网络
集成分类器
Bagging
Bagging使用装袋采样来获取数据子集训练基础学习器。
通常分类任务使用投票的方式集成,而回归任务通过平均的方式集成。
经过 bagging 得到的结果方差(variance)更小。
具体过程
- 从原始样本集中抽取训练集。每轮从原始样本集中使用 Bootstraping 的方法抽取 n 个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中),共进行 k 轮抽取,得到 k 个训练集(k 个训练集之间是相互独立的)。
- 每次使用一个训练集得到一个模型,k 个训练集共得到 k 个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
- 得到结果(所有模型的重要性相同)
- 对分类问题:将上步得到的 k 个模型采用投票的方式得到分类结果
- 对回归问题,计算上述模型的均值作为最后的结果
Boosting
Boosting指的是通过算法集合将弱学习器转换为强学习器。
训练的方式是利用加权的数据。在训练的早期对于错分数据给予较大的权重。
经过 boosting 得到的结果偏差(bias)更小。
具体过程
- 通过加法模型将基础模型进行线性组合。
- 每一轮训练都提升那些错误率小的基础模型权重,同时减小错误率高的模型权重。
- 在每一轮改变训练数据的权值或概率分布,通过提高那些在前一轮被弱分类器“分错样例”的权值,减小前一轮“分对样例”的权值,来使得分类器对误分的数据有较好的效果。
Bagging 与 Boosting 的不同
样本选择
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
样例权重
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
预测函数
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
并行计算
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
半监督学习
在许多实际问题中,有标签样本和无标签样本往往同时存在,且无标签样本较多,而有标签样本则相对较少。
半监督学习:在少量样本标签的引导下,能够充分利用大量无标签样本提高学习性能,避免了数据资源的浪费,同时解决了有标签样本较少时监督学习方法泛化能力不强和缺少样本标签引导时无监督学习方法不准确的问题。
半监督算法可以分为两类:直推式和归纳式。
直推式半监督中只包含有标签样本集和测试样本集,且测试样本也是无标签样本。直推式半监督算法先将测试样本视为无标签样本,然后利用有标签样本和无标签样本训练模型,并在训练过程中预测无标签样本。因此,直推式半监督算法只能处理当前的无标签样本(测试样本),不能直接进行样本外的扩展。对于新的测试样本,直推式半监督算法需要重新训练模型才能预测其标签。
归纳式半监督算法除了使用有标签样本集和无标签样本集外,还使用独立的测试样本集。归纳式半监督算法能够处理整个样本空间中的样本。归纳式半监督算法在有标签样本和无标签样本上训练学习模型。该模型不仅可以预测训练无标签样本的标签,还能直接预测新测试样本的标签。