机器学习两个核心任务:
- 任务一:如何优化训练数据 —> 主要用于解决欠拟合问题
- 任务二:如何提升泛化性能 —> 主要用于解决过拟合问题
KNN
-
定义:给定一个训练集,对新输入的未知样本,通过计算与每个训练样本的距离,找到与该实例最邻近的K个实例,这K个实例大多属于某个类,该样本就属于某个类 -
应用场景:分类/回归问题 -
算法流程:
- 计算已知类别数据集中的点与当前点之间的距离
- 按照距离值进行排序
- 选取最小的k个距离,并统计这k个点所在类别出现的概率
- 返回前k个点出现频率最高的类别作为当前点的预测分类
-
求解方法:距离公式 -
优缺点:
- 优:算法简单,易于理解,适合类域交叉样本、大数据集自动分类
- 缺:计算量大,属于懒惰学习方式,可解释性比较差
-
扩展:
d
=
(
x
1
?
x
2
)
2
+
(
y
1
?
y
2
)
2
d = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}
d=(x1??x2?)2+(y1??y2?)2
?
d
=
∣
x
1
?
x
2
∣
+
∣
y
1
?
y
2
∣
d = |x_1 - x_2| + |y_1 - y_2|
d=∣x1??x2?∣+∣y1??y2?∣
-
切比雪夫距离:
d
=
m
a
x
(
∣
x
1
?
x
2
∣
,
∣
y
1
?
y
2
∣
d = max(|x_1 - x_2|, |y_1 - y_2|
d=max(∣x1??x2?∣,∣y1??y2?∣ -
闵可夫斯基距离: (不特定指某一个,是一组距离的概括)
d
=
∑
i
=
1
n
∣
x
1
k
?
x
2
k
∣
p
p
d = \sqrt[p]{\sum \limits_{i=1} ^{n}|x_{1k} - x_{2k}|^p}
d=pi=1∑n?∣x1k??x2k?∣p
? -
标准化欧氏距离:
d
=
∑
i
=
1
n
∣
x
1
k
?
x
2
k
s
k
∣
2
d = \sqrt{\sum \limits_{i=1} ^{n}|\frac{x_{1k} - x_{2k}}{s_k}|^2}
d=i=1∑n?∣sk?x1k??x2k??∣2
? -
余弦距离:
c
o
s
(
θ
)
=
x
1
x
2
+
y
1
y
2
x
1
2
+
y
1
2
x
2
2
+
y
2
2
cos(\theta) = {x_1x_2 + y_1y_2\over \sqrt{x_1^2 + y_1^2} \sqrt{x_2^2 + y_2^2}}
cos(θ)=x12?+y12?
?x22?+y22?
?x1?x2?+y1?y2?? -
汉明距离: 用来计算两个等长字符串的最小替换次数 -
杰卡德距离: 杰卡德相似系数:两个集合A和B的交集元素在A、B的并集中所占的比例
J
(
A
,
B
)
=
∣
A
?
B
∣
∣
A
?
B
∣
J(A,B) = {|A \bigcap B|\over |A \bigcup B|}
J(A,B)=∣A?B∣∣A?B∣? 杰卡德距离:与杰卡德相似系数相反,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度
J
δ
(
A
,
B
)
=
1
?
J
(
A
,
B
)
=
1
?
∣
A
?
B
∣
∣
A
?
B
∣
=
∣
A
?
B
∣
?
∣
A
?
B
∣
∣
A
?
B
∣
J_\delta(A,B) = 1- J(A,B) = 1 - {|A \bigcap B|\over |A \bigcup B|} = {|A \bigcup B| - |A \bigcap B|\over |A \bigcup B|}
Jδ?(A,B)=1?J(A,B)=1?∣A?B∣∣A?B∣?=∣A?B∣∣A?B∣?∣A?B∣? -
马氏距离: 用来表示数据的协方差距离(或两个分布的距离),是一种有效的计算两个位置样本集的相似度的方法,考虑到各种特性之间的联系,独立于测量尺度。 -
kd树
- 定义:是一种对K维空间中的实例点进行存储以便对其进行快速检索的属性数据结构。相当于不断的用垂直于坐标轴的超平面将k维空间切分,构成一些列的k维超矩形区域。
- 构建方法:首先构造根节点,使根结点对应于K维空间中包含所有实例点的超矩形区域,然后通过递归方式,不断对k维空间进行切分,生成子节点。
- 搜索过程:
- 二叉树搜索比较待查询节点和分裂节点的分裂维的值。
- 顺着“搜索路径”找到最近邻的近似点
- 回溯搜索路径,并判断是否可能存在更近的数据点
- 重复这个过程,直到搜索路径维空
线性回归
-
定义:利用回归方程对一个或多个特征值和目标值之间的关系进行建模的一种分析方式 -
两种模型:线性模型和非线性模型 -
应用场景:回归任务(房价预测等) -
损失函数:
J
(
w
)
=
(
h
(
x
1
)
?
y
1
)
2
+
(
h
(
x
2
)
?
y
2
)
2
+
.
.
.
+
(
h
(
x
m
)
?
y
m
)
2
=
∑
i
=
1
m
(
h
(
x
i
)
?
y
i
)
2
J(w) = (h(x_1)-y_1)^2 + (h(x_2)-y_2)^2+ ...+(h(x_m)-y_m)^2 = \sum \limits_{i=1} ^{m}(h(x_i)-y_i)^2
J(w)=(h(x1?)?y1?)2+(h(x2?)?y2?)2+...+(h(xm?)?ym?)2=i=1∑m?(h(xi?)?yi?)2 -
优化方法:
-
正规方程: 一次性进行求解的过程,带入公式就可以求的w的值。
J
(
w
)
=
(
X
w
?
y
)
2
J(w) = (Xw-y)^2
J(w)=(Xw?y)2
w
=
(
X
T
X
)
?
1
?
X
T
y
w = (X^TX)^{-1}*X^Ty
w=(XTX)?1?XTy -
梯度下降法:
? 迭代式求解的方式,逐渐去计算最小值的过程
w
i
+
1
=
w
i
?
α
?
J
(
w
)
?
w
i
w_{i+1} = w_i - \alpha\frac{ \partial J(w) }{\partial w_i}
wi+1?=wi??α?wi??J(w)? 两种方法对比:
正规方程法(最小二乘法) | 梯度下降法 |
---|
不需要学习率 | 需要学习率 | 一次计算 | 需要迭代求解 | 需要计算方程,时间复杂度高O(
n
3
n_3
n3?) | 特征数量较大可以使用 | 简洁高效 | 约束条件较多,需要保证$(XTX)-1的逆矩阵存在 | 适用于小规模数据,但不能解决拟合问题 | 适用于大规模数据 |
-
防止过拟合策略->正则化:
-
原因:原始特征过多,或者存在一些异常特征 -
解决方法:
- 重新清洗数据,有可能是数据不属于同一分布导致。
- 增大数据训练量,有可能是数据量太小,训练数据占总数据的比例过小
- 正则化
- 减少特征维度,防止维灾难
-
正则化方式:
-
L1正则化:
J
(
w
)
=
M
S
E
(
w
)
+
α
∑
i
=
1
n
∣
w
i
∣
J(w) = MSE(w) + \alpha\sum\limits_{i=1} ^{n}|w_i|
J(w)=MSE(w)+αi=1∑n?∣wi?∣
- 可以使得其中一些W的值直接为0,删除这个特征的影响
- 倾向使用少数特征,导致特征权重的稀疏性(权重衰减)
-
L2正则化:
J
(
w
)
=
M
S
E
(
w
)
+
α
∑
i
=
1
n
w
i
2
J(w) = MSE(w) + \alpha\sum\limits_{i=1} ^{n}w_i^2
J(w)=MSE(w)+αi=1∑n?wi2?
- 可以使得权重趋向于0,一般不等于0
- 倾向于使用所有特征,可以让一些系数变得很小
逻辑回归 -
定义:在线性回归的输出端加上sigmoid激活函数,使得输出>0.5判为1类别,<0.5判为0类别 -
应用场景:分类问题(广告点击率、是否为垃圾邮件等) -
损失函数: 对数似然损失,表示的所有样本被分类正确的最大化概率。
c
o
s
t
(
h
w
(
x
)
,
y
)
=
?
∑
i
=
1
n
y
i
l
o
g
(
P
i
)
+
(
1
?
y
i
)
l
o
g
(
1
?
P
i
)
cost(h_w(x), y) = -\sum\limits_{i=1}^{n}y_ilog(P_i) + (1-y_i)log(1-P_i)
cost(hw?(x),y)=?i=1∑n?yi?log(Pi?)+(1?yi?)log(1?Pi?) -
优化:梯度下降法 将
P
i
=
1
1
+
e
?
w
x
?
b
P_i= \frac1{1+e^{-wx-b}}
Pi?=1+e?wx?b1?代入损失函数中,使得对w的导数等于0,解得:
w
i
=
w
?
α
(
y
i
?
P
)
x
w_i = w - \alpha(y_i - P)x
wi?=w?α(yi??P)x -
优缺点: 优点:模型简单 缺点:sigmoid存在饱和区,容易梯度消失或梯度爆炸 -
分类评估方法:
-
精确率: 预测结果为正的样本中真正为正的比例
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision = \frac {TP}{TP + FP}
Precision=TP+FPTP? -
召回率:真实为正例的样本中预测结果为正例的比例
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall = \frac {TP}{TP + FN}
Recall=TP+FNTP? -
F1-score: 模型的精度、召回率是一对矛盾的存在,如果我们想要提高模型的精度,则需要减少样本的数量,如果我们想要提高模型的召回率,则需要增加样本数量,F1-使用的是精度、召回率的调和平均数,综合考虑精确率和召回率。
F
1
=
2
T
P
2
T
P
+
F
N
+
F
P
=
2
?
P
r
e
c
i
s
i
o
n
?
R
e
c
a
l
l
P
r
e
c
i
s
o
n
+
R
e
c
a
l
l
F1 = \frac{2TP}{2TP+FN+FP} = \frac{2*Precision*Recall}{Precison+Recall}
F1=2TP+FN+FP2TP?=Precison+Recall2?Precision?Recall? -
ROC曲线
?
T
P
R
=
T
P
T
P
+
F
N
TPR = \frac{TP}{TP+FN}
TPR=TP+FNTP? ->正样本中被预测为正样本的概率 ?
F
P
R
=
F
P
F
P
+
T
N
FPR= \frac{FP}{FP+TN}
FPR=FP+TNFP? -> 负样本中被预测为正样本的概率
决策树
-
定义:一种树形结构,本质上是一颗有多个判断节点组成的树 -
原理:根据一种分类规则,不断的由根节点向下分裂的过程,其中每一个内部节点表示一个属性上的判断,每一个分支代表一个判断结果的输出,最后的叶子节点代表一种分类结果。某一个分支的纯度越高越好,越能给出预测类别。 -
应用场景:分类/回归问题 -
分裂标准:
-
信息增益:
-
信息熵:是一个变量(特征)包含信息多少的方式,熵值越大信息种类越多,代表系统的混乱程度越大,纯度越低。 -
条件熵:在某种条件下的信息熵的大小 -
信息增益:以某特征进行划分数据集前后的熵值的差值,表示得知特征X的信息而使得类Y的信息熵减少的程度,从而用来衡量使用当前特征对于样本集合D划分效果的好坏,纯度提升大就是好,对应的增益越大。 信息增益 = 信息熵-条件熵 -
缺点:倾向于选择种类较多的特征进行分裂,倾向于选择信息增益值大的特征 -
ID3算法:多叉树,喜欢种类多的特征,会使得树构建的过于简单 -
信息增益率:
-
信息增益倾向于选择取值数目较多的属性作为下一次分裂节点。 -
信息增益率=
信
息
增
益
固
有
值
\frac{信息增益} {固有值}
固有值信息增益?, 固有值一般取属性熵值,若一个特征值种类较多则让该特征信息增益除以一个较大的系数,以此调整种类多的特征值的重要性。一般固有值为信息熵 -
缺点:信息增益率一般情况下优先考虑值种类较少特征优先进行分裂,倾向于选择信息增益率大的特征 -
C4.5算法 优点:1. 克服了用信息增益来选择属性时偏向选择值多的属性的不足
2. 避免树的高度无节制的增长,避免过度拟合数据(后剪枝)
3. 通过赋给它结点n所对应的训练实例中该属性的最常见值,来处理缺失值
-
基尼指数:
-
分裂结束条件:1.节点只有一个样本 2.节点上的样本为同一个类别 -
解决过拟合方法:
-
预剪枝:指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点; -
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。 后剪枝一般保留了更多的分支,所以欠拟合风险更小,泛化性能更高,但训练开销比预剪枝要大。 -
优缺点: 优点:拟合能力强 缺点:如果样本发生一点点改动,整个树的结构都会发生剧烈变化。
集成学习
集成学习通过构建多个模型共同解决预测问题,其工作原理是:
- 生成多个分类器/模型,各自独立地学习和作出预测
- 整合多个学习器的预测,输出最终预测
集成学习核心思想:
-
通过建立几个模型来解决单一预测问题 -
弱弱变强 -> boosting -
互相遏制变壮 -> bagging
集成学习方法能够带来什么好处:
- 可以提升单个分类器的预测准确性,通过整合多个学习器来提升单个学习器的性能上限
- 避免模型选择问题,可以多个模型整合
基习器使用不同的学习方法还是相同的?
这些基学习器应该注意哪些?
- 基础学习器之间要存在差异性
- 基础学习器的能力不需要很强,只需要比随机猜测 0.5 高一点就行
集成学习集成策略:bagging、boosting
bagging
bagging集成过程【知道】
- 1.采样 — 从所有样本里面,采样一部分
- 2.学习 — 训练弱学习器
- 3.集成 — 使用平权投票
随机森林:
-
定义:包含多个决策树的分类项目,并且输出类别由个别树输出的类别的众数来决定 -
本质:bagging + 决策树 -
随机森林构造流程:
-
一次随机选出一个样本,有放回的抽样,重复N次(有可能出现重复的样本)(自助法) -
随机去选出m个特征, m <<M,建立决策树 ```
1.为什么要随机抽样训练集?
如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的
2.为什么要有放回地抽样?
如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决。
```
-
包外估计:包外数据是指在整个训练过程中没有被选中用来训练的数据。大概占整个样本的36.8%。
- 可以利用这部分数据辅助剪枝或用于估计决策树中各节点的后验概率以辅助对零训练样本节点的处理。
- 当基学习器是神经网络时,可使用包外样本来辅助早停以减小过拟合。
-
bagging集成学习优点:
- 均在原算法上提升约2%左右的繁华准确率
- 简单、方便、通用
-
评估标准 -> 交叉熵:
l
o
g
l
o
s
s
=
?
1
N
∑
i
=
1
N
∑
j
=
1
M
y
i
j
l
o
g
(
p
i
j
)
logloss = -\frac1N\sum\limits_{i=1}^N\sum\limits_{j=1}^My_{ij}log(p_{ij})
logloss=?N1?i=1∑N?j=1∑M?yij?log(pij?)
boosting
随着积累从弱到强,体现了提升的思想:
-
每个训练器重点关注前一个训练器不足的地方进行训练 -
通过加权投票的方式,得出预测结果
bagging于boosting区别:
-
数据方面:
- bagging:对数据进行采样训练
- boosting:根据前一轮学习结果调整数据的重要性
-
投票方面:
-
学习顺序:
- bagging的学习是并行的,每个学习器没有依赖关系;
- boosting的学习是串行的,学习有先后顺序;
-
主要作用:
- bagging主要用于提高泛化能力(解决过拟合,也可以说降低方差)
- boosting主要用于提高训练精度(解决欠拟合,也可以说降低偏差)
代表算法:Adaboost,GBDT,XGBoost,LightGBM
Adaboost
GBDT 梯度提升树
无论处理回归问题还是分类问题,使用的CART回归树
-
为什么不用CART分类树呢?
- 因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
- 分类树中使用的划分标准是熵或者基尼系数,都是用纯度来衡量的,但在回归树中,样本标签值都是连续值,使用熵之类的指标不再合适,而是使用平方误差,对于分类问题,使用交叉熵
-
提升树的原理:迭代的拟合残差,不断的接近真实目标值 -
GBDT原理:沿着损失函数对之前已经训练得到的强学习器预测值的负梯度方向迭代,依次构造样本的标签值训练每一个弱学习器。 -
GBDT树构建过程: 1)初始化弱学习器 2)对每个样本计算负梯度,获得残差,并将上一步获得残差作为目标值 3)更新强学习器,直到达到指定的学习器个数 4)得到最终学习器
f
(
x
)
=
f
0
(
x
)
+
∑
i
=
1
m
∑
j
=
1
n
Υ
j
i
I
(
x
∈
R
j
i
)
f(x) = f_0(x)+\sum\limits_{i=1}^m\sum\limits_{j=1}^n\Upsilon_{ji}I(x\in R_{ji})
f(x)=f0?(x)+i=1∑m?j=1∑n?Υji?I(x∈Rji?)
XGBoost
BDT(提升树) -> GBDT(梯度提升树) -> XGBoost(极端梯度提升树)
XGBoost 是对梯度提升算法的改进:
- 求解损失函数极值时使用泰勒二阶展开
- 另外在损失函数中加入了正则化项
- XGB 自创一个树节点分裂指标。这个分裂指标就是从损失函数推导出来的。XGB 分裂树时考虑到了树的复杂度。
我们在前面已经知道,构建最优模型的一般方法是最小化训练数据的损失函数。
min
?
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
\min \frac{1}{N} \sum_{i=1}^{N} L\left(y_{i}, f\left(x_{i}\right)\right)
minN1?i=1∑N?L(yi?,f(xi?))
预测值和真实值经过某个函数计算出损失,并求解所有样本的平均损失,并且使得损失最小。
上面的式子称为 经验风险最小化,如果仅仅追求经验风险最小化,那么训练得到的模型复杂度较高,很容易出现过拟合。因此,为了降低模型的复杂度,常采用下式:
min
?
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
Ω
(
f
)
\min \frac{1}{N} \sum_{i=1}^{N} L\left(y_{i}, f\left(x_{i}\right)\right)+\Omega (f)
minN1?i=1∑N?L(yi?,f(xi?))+Ω(f) 上面的式子称为结构风险最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测 。
XGBoost的决策树生成是结构风险最小化的结果。
-
目标函数: XGBoost(Extreme Gradient Boosting)是对梯度提升树的改进,并且在损失函数中加入了正则化项。
obj
?
(
θ
)
=
∑
i
n
L
(
y
i
,
y
^
i
)
+
∑
k
=
1
K
Ω
(
f
k
)
\operatorname{obj}(\theta)=\sum_{i}^{n} L\left(y_{i}, \hat{y}_{i}\right)+\sum_{k=1}^{K} \Omega\left(f_{k}\right)
obj(θ)=i∑n?L(yi?,y^?i?)+k=1∑K?Ω(fk?) 目标函数的第一项表示整个强学习器的损失,第二部分表示强学习器中 K 个弱学习器的复杂度。 -
XGBoost与GBDT区别:
-
区别一:
- XGBoost生成CART树考虑了树的复杂度,
- GDBT未考虑,GDBT在树的剪枝步骤中考虑了树的复杂度。
-
区别二:
- XGBoost是拟合上一轮损失函数的二阶导展开,GDBT是拟合上一轮损失函数的一阶导展开,因此,XGBoost的准确性更高,且满足相同的训练效果,需要的迭代次数更少。
-
区别三:
- XGBoost与GDBT都是逐次迭代来提高模型性能,但是XGBoost在选取最佳切分点时可以开启多线程进行,大大提高了运行速度。
LightGBM
通过对 XGBoost 算法多方面的优化,提升训练速度、减少内存占用
原理:
-
直方图算法
- 构建直方图:
- 对每个特征构建一个直方图
- 遍历所有样本,累计每个直方图中的样本数量、一阶导和、二阶导和
- 遍历所有的 bin,并计算 SL 和 SR 的梯度和和样本数量,其中 SR 可以通过父直方图减去 SL 得到
- 计算出增益,取最大增益的特征分裂点对树进行下一步分裂.
直方图算法是以 bin 为粒度计算分裂增益,而 GBDT 是以单个分裂点粒度计算分类增益
- 由于特征被离散化后,找到的并不是很精确的分割点,所以会对结果产生影响
- 在不同的数据集上的结果表明,离散化的分割点对最终的精度影响并不是很大,甚至有时候会更好一点
- 集成算法本来就是将弱模型,弱弱变强,分割点是不是精确并不是太重要,较粗的分割点也有正则化的效果,可以有效地防止过拟合
- 即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升的框架下没有太大的影响
-
leaf-wise
- level-wise:
- level-wise 遍历一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合
- Level-wise 是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂
- leaf-wise
- 是一种更为高效的策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环
- 同 level-wise 相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度
- leaf-wise 的缺点是可能会长出比较深的决策树,产生过拟合,可通过最大深度的限制
-
直接支持类别特征
- 多数机器学习工具都无法直接支持类别特征,一般需要把类别特征进行 one-hot 编码,这就使得特征维度增加,分裂时增加树的深度
- LightGBM 优化了对类别特征的支持,可以直接输入类别特征,不需要进行 one-hot 编码
- 通过实验,发现相比 one-hot 编码处理类别特征,LGB 训练速度可以增加 8 倍,并且精度一致
-
支持高效并行
-
特征维度并行:
- 每一个 worker 在本地保存全部数据
- 每一个 worker 在本地数据集的特征子集上计算最佳分裂点
- worker 之间同步最佳分裂点,并在本地构建直方图
-
数据维度并行:
- 每一个 worker 使用部分数据构建局部直方图
- 将局部直方图合并成全局直方图
-
基于投票的并行:
-
每一个 worker 在本地构建直方图找出 Top K 个分裂特征 -
在全局将 K 个特征特征合并并选出全局最优分裂特征 互斥特征捆绑 : 将一些特征进行进行合并,减少特征的数量 单边梯度采样:从原来的所有样本中通过一定的策略选取部分样本的梯度
K-means
无监督学习算法,主要用于将相似的样本自动归到一个类别中
-
原理:计算不同样本之间的相似性,常见的相似度计算方法有欧式距离法 -
实现流程:
-
随机选择 K 个样本点作为初始聚类中心 -
计算每个样本到 K 个中心的距离,选择最近的聚类中心点作为标记类别 -
根据每个类别中的样本点,重新计算出新的聚类中心点(平均值) 1)如果计算得出的新中心点与原中心点一样则停止聚类 2)否则重新进行第 2 步过程,直到聚类中心不再变化 -
评估方法:(簇内内聚程度、簇外分离程度、尽量少的簇中心三个角度)
S
S
E
=
∑
i
=
1
k
∑
p
∈
C
i
∣
p
?
m
i
∣
2
S S E=\sum_{i=1}^{\mathrm{k}} \sum_{p \in C_{i}}\left|p-m_{i}\right|^{2}
SSE=i=1∑k?p∈Ci?∑?∣p?mi?∣2 ? k–质心个数 p–某个簇内的样本 m–质心点 ? SSE越大说明聚类效果越不好
-
优缺点: -
优点:
- 原理简单,实现容易
- 聚类效果中上,比较依赖K的选择
- 空间复杂度O(N), 时间复杂度O(IKN) [N为样本点个数,K为中心点个数,I为迭代次数]
-
缺点:
- 对离群点、噪声点敏感(中心点易偏移)
- 很难发现大小差别很大的簇及进行增量计算
- 结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)
-
算法优化: K-means 算法聚类效果受到了簇的个数、初始质心位置、离群点影响,并且不太容易进行增量计算,算法优化主要通过簇内的个数、初始质心位置、抵抗噪声的角度来优化
-
Cannopy算法
- 能够在不指定簇个数的情况下,粗略的计算簇的个数和质心,在此基础上再进行聚类
- 优点:抗干扰、选取的质心点更为准确
- 缺点:容易进入局部最优
-
kmeans++算法(是kmeans中参数选项)
-
二分 K-means算法 主要从减少误差平方和的角度来来进行质心的选择,并每次对方差较大的簇进行二分。 -
K-medoids 算法 选取质心的时候使用的是中位数,是一个实实在在的中心点(是真实的样本),而 K-means 使用的可能是一个虚拟的中心点,从这一点来讲,k-medoids 有很强的抗噪特点(对离群点处理效果较好)。 -
Kernel k-means算法 主要是从低维空间有时无法对数据进行聚类,无法区分,此时可以将其映射到高维空间,再进行 k-means 聚类 -
Mini batch k-means 算法(单独API) 主要针对数据量大的时候,k-means 算法效率较低,此时使用部分样本点来更新质心。提高聚类效果。【重点】 -
isodata算法 在聚类的过程中,如果某一类别的样本比较少,或者类别间的距离较近,则将其合并。如果类别内部的方差超过阈值则将其分裂
朴素贝叶斯
P
(
C
∣
W
)
=
P
(
W
∣
C
)
P
(
C
)
P
(
W
)
P(C \mid W)=\frac{P(W \mid C) P(C)}{P(W)}
P(C∣W)=P(W)P(W∣C)P(C)?
- P? 表示 C 出现的概率【先验概率】
- P(W|C) 表示 C 条件 W 出现的概率
- P(W) 表示 W 出现的概率
- P(C|W) 叫做【后验概率】
-
原理:先由目标值作出先验猜测,再由测试样本特征和训练集的分布情况共同关注训练集中特征的联合概率 -
应用场景:分类或回归,一般用在NLP中 -
朴素:特征条件独立性假设【排除了特征之间的线性相关性、选择相对较为独立的特征】 -
拉普拉斯平滑系数:为了避免概率值为 0,我们在分子和分母分别加上一个数值
P
(
F
1
∣
C
)
=
N
i
+
α
N
+
α
m
P(F 1 \mid C)=\frac{N i+\alpha}{N+\alpha m}
P(F1∣C)=N+αmNi+α?
- α 是拉普拉斯平滑系数,一般指定为 1
- Ni 是 F1 中符合条件 C 的样本数量
- N 是在条件 C 下所有样本的总数
- m 表示所有独立样本的总数
-
预测过程:
- 已知未知样本 ,通过模型计算其属于不同类别的后验概率
- 将后验概率最大的类别作为未知样本所属类别
- 当计算条件概率出现 0 时,使用拉普拉斯平滑系数
-
优点:
- 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类
- 分类准确度高,速度快
-
缺点:
- 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好
- 需要计算先验概率,而先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳;
-
朴素贝叶斯与LR的区别
- 朴素贝叶斯需要通过计算联合概率,从而得到后验概率,属于生成模型
- 逻辑回归不关心样本中类别的比例及类别下特征值出现的概率,模型直接给出后验概率,属于判别模型
-
使用方式:
- 对预测速度要求高的场景,对给定训练集,可将设计的所有概率估值事先计算保存,在预测时进行“查表”判别;
- 数据更替频繁时,采用懒惰学习方式,收到预测请求时再计算;
SVM 支持向量机
-
定义:寻找一个N维超平面使样本分成两类,并且间隔最大,并保证样本被分类正确 -
应用场景:线性/非线性分类/回归;异常值检测任务 -
划分超平面的两个问题:
- 硬间隔:让所有样本都被分类正确,寻找最大间隔
- 软间隔:尽可能在保持最大间隔宽阔和限制间隔违例之间找到平衡
-
惩罚参数C:用来平衡间隔违例样本损失、最大间隔。 -
SVM公式:f(x) = sign(wTx + b)。如果 f(x) >= 0,判定为 +1 类,否则判定为 -1 类 -
SVM目标函数: SVM 我们要求解的目标是:在能够将所有样本能够正确分割开的基础上,求解最大间隔。
-
最大间隔距离表示:
2
∥
w
∥
\frac{2}{\|\boldsymbol{w}\|}
∥w∥2? -
训练样本能够正确分类:
{
w
T
x
i
+
b
?
+
1
,
y
i
=
+
1
w
T
x
i
+
b
?
?
1
,
y
i
=
?
1
\left\{\begin{array}{ll} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \geqslant+1, & y_{i}=+1 \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \leqslant-1, & y_{i}=-1 \end{array}\right.
{wTxi?+b?+1,wTxi?+b??1,?yi?=+1yi?=?1? 我们希望在将所有样本正确分类的情况,实现间隔最大化。所以,我们的目标函数可以写为:
max
?
w
,
b
=
2
∥
w
∥
?s.t.?
y
i
(
w
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
?
?
,
m
\begin{array}{l} \max _{w, b}=\frac{2}{\|w\|} \\ \text { s.t. } y_{i}\left(w^{T} x_{i}+b\right) \geq 1, i=1,2, \cdots, m \end{array}
maxw,b?=∥w∥2??s.t.?yi?(wTxi?+b)≥1,i=1,2,?,m?
- 我们可以将其转换为最小化问题:
min
?
w
,
b
=
1
2
∥
w
∥
2
?s.t.?
y
i
(
w
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
?
?
,
m
\begin{aligned} &\min _{w, b}=\frac{1}{2}\|w\|^{2}\\ &\text { s.t. } y_{i}\left(w^{T} x_{i}+b\right) \geq 1, i=1,2, \cdots, m \end{aligned}
?w,bmin?=21?∥w∥2?s.t.?yi?(wTxi?+b)≥1,i=1,2,?,m? ? 1)||w|| 范数为:sqrt( w12+w22+…+wn2 ),加上平方之后将根号去掉,不影响优化目标。 ? 2)1/2 是为了求导的时候,能够将系数去掉。
-
利用拉格朗日乘子法取消约束项: 约束条件转换为:
y
i
(
w
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
?
?
,
m
y_{i}\left(w^{T} x_{i}+b\right) \geq 1, i=1,2, \cdots, m
yi?(wTxi?+b)≥1,i=1,2,?,m 即
∑
i
=
1
n
(
1
?
y
i
(
w
T
?
Φ
(
x
i
)
+
b
)
)
\sum_{i=1}^{n} \left(1 - y_{i}\left(w^{T} \cdot \Phi\left(x_{i}\right)+b\right)\right)
∑i=1n?(1?yi?(wT?Φ(xi?)+b))
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
?
∑
i
=
1
n
α
i
(
y
i
(
w
T
?
Φ
(
x
i
)
+
b
)
?
1
)
L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{n} \alpha_{i}\left(y_{i}\left(w^{T} \cdot \Phi\left(x_{i}\right)+b\right)-1\right)
L(w,b,α)=21?∥w∥2?i=1∑n?αi?(yi?(wT?Φ(xi?)+b)?1)
? 此时问题是在满足所有样本都能正确分类的情况下,求解极小极大值问题:
min
?
w
,
b
max
?
α
L
(
w
,
b
,
α
)
<
=
=
>
max
?
α
min
?
w
,
b
L
(
w
,
b
,
α
)
\min _{w, b} \max _{\alpha} L(w, b, \alpha) <==> \max _{\alpha} \min _{w, b} L(w, b, \alpha)
w,bmin?αmax?L(w,b,α)<==>αmax?w,bmin?L(w,b,α)
-
对偶问题转换: 对 w 求偏导,并令其等于 0:
?
L
?
w
=
1
2
∣
∣
w
∣
∣
2
?
∑
i
=
1
n
α
i
(
y
i
w
T
φ
(
x
i
)
+
y
i
b
?
1
)
=
0
=
1
2
∣
∣
w
∣
∣
2
?
∑
i
=
1
n
α
i
y
i
w
T
φ
(
x
i
)
+
α
i
y
i
b
?
α
i
=
0
=
w
?
∑
i
=
1
n
α
i
y
i
φ
(
x
i
)
=
0
\begin{aligned} \frac{\partial L}{\partial w} &=\frac{1}{2}|| w||^{2}-\sum_{i=1}^{n} \alpha_{i}\left(y_{i} w^{T} \varphi\left(x_{i}\right)+y_{i} b-1\right)=0 \\ &=\frac{1}{2}|| w||^{2}-\sum_{i=1}^{n} \alpha_{i} y_{i} w^{T} \varphi\left(x_{i}\right)+\alpha_{i} y_{i} b-\alpha_{i}=0 \\ &=w-\sum_{i=1}^{n} \alpha_{i} y_{i} \varphi\left(x_{i}\right)=0 \end{aligned}
?w?L??=21?∣∣w∣∣2?i=1∑n?αi?(yi?wTφ(xi?)+yi?b?1)=0=21?∣∣w∣∣2?i=1∑n?αi?yi?wTφ(xi?)+αi?yi?b?αi?=0=w?i=1∑n?αi?yi?φ(xi?)=0? 得出:
w
=
∑
i
=
1
n
α
i
y
i
φ
(
x
i
)
w=\sum_{i=1}^{n} \alpha_{i} y_{i} \varphi\left(x_{i}\right)
w=i=1∑n?αi?yi?φ(xi?) ? 对 b 求偏导:
?
L
?
w
=
1
2
∥
w
∥
2
?
∑
i
=
1
n
α
i
y
i
w
T
φ
(
x
i
)
+
α
i
y
i
b
?
α
i
=
∑
i
=
1
n
α
i
y
i
=
0
\begin{aligned} \frac{\partial L}{\partial w} &=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{n} \alpha_{i} y_{i} w^{T} \varphi\left(x_{i}\right)+\alpha_{i} y_{i} b-\alpha_{i} \\ &=\sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{aligned}
?w?L??=21?∥w∥2?i=1∑n?αi?yi?wTφ(xi?)+αi?yi?b?αi?=i=1∑n?αi?yi?=0? -
将w、b代入4中公式:
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
?
∑
i
=
1
n
α
i
(
y
i
(
w
T
?
Φ
(
x
i
)
+
b
)
?
1
)
=
1
2
w
T
w
?
∑
i
=
1
n
α
i
y
i
w
T
?
(
x
i
)
+
α
i
y
i
b
?
α
i
=
1
2
w
T
w
?
∑
i
=
1
n
α
i
y
i
w
T
?
(
x
i
)
?
b
∑
i
=
1
n
α
i
y
i
+
∑
i
=
1
n
α
i
=
1
2
w
T
w
?
∑
i
=
1
n
α
i
y
i
w
T
?
(
x
i
)
+
∑
i
=
1
n
α
i
=
1
2
w
T
∑
i
=
1
n
α
i
y
i
?
(
x
i
)
?
w
T
∑
i
=
1
n
α
i
y
i
?
(
x
i
)
+
∑
i
=
1
n
α
i
=
?
1
2
w
T
∑
i
=
1
n
α
i
y
i
?
(
x
i
)
+
∑
i
=
1
n
α
i
=
∑
i
=
1
n
α
i
?
1
2
(
∑
i
=
1
n
α
i
y
i
?
(
x
i
)
)
T
∑
i
=
1
n
α
i
y
i
?
(
x
i
)
=
∑
i
=
1
n
α
i
?
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
?
(
x
i
)
?
(
x
j
)
L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{n} \alpha_{i}\left(y_{i}\left(w^{T} \cdot \Phi\left(x_{i}\right)+b\right)-1\right) \\ =\frac{1}{2}w^Tw - \sum_{i=1}^{n}\alpha_iy_iw^T\phi(x_i)+\alpha_iy_ib - \alpha_i \\ =\frac{1}{2}w^Tw -\sum_{i=1}^{n}\alpha_iy_iw^T\phi(x_i)-b\sum_{i=1}^{n}\alpha_iy_i+\sum_{i=1}^{n}\alpha_i \\ =\frac{1}{2}w^Tw -\sum_{i=1}^{n}\alpha_iy_iw^T\phi(x_i)+\sum_{i=1}^{n}\alpha_i \\ =\frac{1}{2}w^T\sum_{i=1}^{n}\alpha_iy_i\phi(x_i)-w^T\sum_{i=1}^{n}\alpha_iy_i\phi(x_i)+\sum_{i=1}^{n}\alpha_i \\ =-\frac{1}{2}w^T\sum_{i=1}^{n}\alpha_iy_i\phi(x_i) + \sum_{i=1}^{n}\alpha_i \\ = \sum_{i=1}^{n}\alpha_i -\frac{1}{2}(\sum_{i=1}^{n}\alpha_iy_i\phi(x_i))^T\sum_{i=1}^{n}\alpha_iy_i\phi(x_i) \\ =\sum_{i=1}^{n}\alpha_i -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_j\phi(x_i)\phi(x_j)
L(w,b,α)=21?∥w∥2?i=1∑n?αi?(yi?(wT?Φ(xi?)+b)?1)=21?wTw?i=1∑n?αi?yi?wT?(xi?)+αi?yi?b?αi?=21?wTw?i=1∑n?αi?yi?wT?(xi?)?bi=1∑n?αi?yi?+i=1∑n?αi?=21?wTw?i=1∑n?αi?yi?wT?(xi?)+i=1∑n?αi?=21?wTi=1∑n?αi?yi??(xi?)?wTi=1∑n?αi?yi??(xi?)+i=1∑n?αi?=?21?wTi=1∑n?αi?yi??(xi?)+i=1∑n?αi?=i=1∑n?αi??21?(i=1∑n?αi?yi??(xi?))Ti=1∑n?αi?yi??(xi?)=i=1∑n?αi??21?i=1∑n?j=1∑n?αi?αj?yi?yj??(xi?)?(xj?)
求解当
α
\alpha
α是什么值时,该值会变得很大,当求出
α
\alpha
α时,再求出w,b值
-
确定超平面
- 求解当 α 什么值时公式值最大
a
?
=
arg
?
max
?
α
(
∑
i
=
1
n
α
i
?
1
2
∑
i
,
j
=
1
n
α
i
α
j
y
i
y
j
Φ
T
(
x
i
)
Φ
(
x
j
)
)
a^{*}=\underset{\alpha}{\arg \max }\left(\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} \Phi^{T}\left(x_{i}\right) \Phi\left(x_{j}\right)\right)
a?=αargmax?(i=1∑n?αi??21?i,j=1∑n?αi?αj?yi?yj?ΦT(xi?)Φ(xj?)) 将上面的问题转换为极小值问题:
min
?
α
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
(
Φ
(
x
i
)
?
Φ
(
x
j
)
)
?
∑
i
=
1
n
α
i
?s.t.?
∑
i
=
1
n
α
i
y
i
=
0
α
i
≥
0
,
i
=
1
,
2
,
…
,
n
\begin{array}{l} \min _{\alpha} \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\Phi\left(x_{i}\right) \cdot \Phi\left(x_{j}\right)\right)-\sum_{i=1}^{n} \alpha_{i} \\ \\ \text { s.t. } \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \\ \\ \alpha_{i} \geq 0, \quad i=1,2, \ldots, n \end{array}
minα?21?∑i=1n?∑j=1n?αi?αj?yi?yj?(Φ(xi?)?Φ(xj?))?∑i=1n?αi??s.t.?∑i=1n?αi?yi?=0αi?≥0,i=1,2,…,n? 将训练样本带入上面公式,求解出 α 值。然后,将 α 值代入下面公式计算 w, b 的值:
w
?
=
∑
i
=
1
N
α
i
?
y
i
Φ
(
x
i
)
b
?
=
y
i
?
∑
i
=
1
N
α
i
?
y
i
(
Φ
(
x
i
)
?
Φ
(
x
j
)
)
\begin{aligned} w^{*} &=\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} \Phi\left(x_{i}\right) \\ b^{*} &=y_{i}-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(\Phi\left(x_{i}\right) \cdot \Phi\left(x_{j}\right)\right) \end{aligned}
w?b??=i=1∑N?αi??yi?Φ(xi?)=yi??i=1∑N?αi??yi?(Φ(xi?)?Φ(xj?))? 最后求得分离超平面:
w
?
Φ
(
x
)
+
b
?
=
0
w^{*} \Phi(x)+b^{*}=0
w?Φ(x)+b?=0 求得分类决策函数:
f
(
x
)
=
sign
?
(
w
?
Φ
(
x
)
+
b
?
)
f(x)=\operatorname{sign}\left(w^{*} \Phi(x)+b^{*}\right)
f(x)=sign(w?Φ(x)+b?)
α
i
≠
0
\alpha_i\ne0
αi??=0的样本会落在最大间隔直线上,被称为支持向量
-
SVM损失函数: SVM 的三种损失函数衡量模型的性能。
- 0-1 损失:
- 当正例样本落在 y=0 下方则损失为 0,否则损失为 1.
- 当负例样本落在 y=0 上方则损失为0,否则损失为 1.
- Hinge (合页)损失:
- 当正例落在 y >= 1 一侧则损失为0,否则距离越远则损失越大.
- 当负例落在 y <= -1 一侧则损失为0,否则距离越远则损失越大.
- Logistic 损失:
- 当正例落在 y > 0 一侧,并且距离 y=0 越远则损失越小.
- 当负例落在 y < 0 一侧,并且距离 y=0 越远则损失越小.
?
? SVM 默认使用 RBF 核函数,将低维空间样本投射到高维空间,再寻找分割超平面
算法选择
|