数据挖掘算法总结$\theta;tech$
总结学习中遇到的数据挖掘算法,推导过程,实现方式等等
ID3
介绍:
ID3算法是一种分类决策树算法,通过一系列规则将数据分类成决策树的形式。决策树中,每次分类都从根节点开始,每一个叶子节点代表一种可能的分类结果。
分类标准
$$
Gain(S,A) = Entropy(S) - \sum_{v\epsilon V(A)}\frac{|S_v|}{|S|}Entropy(S_v)
$$
其中,V(A)是属性A的值域,S是样本集合,$S_v$ 是$S$中在属性A上值等于v的样本集合分类方法:在每个节点选取尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到决策树能完美分类训练样例。
Tags
监督学习算法
交叉熵
实现:java
例子:
西瓜分为好瓜和坏瓜,
性质 敲击声音 清脆a1 浑浊a2 颜色 深绿b1 浅b2 a1 b1 1
a1 b1 1
a2 b1 1
a2 b2 0
a1 b2 0
$$
Entropy(start) =- \frac{3}{5}log(\frac{3}{5}) - \frac{2}{5}log(\frac{2}{5}) = 0.835\
Entropy(敲击声音) = \frac{3}{5}(- \frac{1}{3}log(\frac{1}{3}) + - \frac{2}{3}log(\frac{2}{3})) + \frac{2}{5}(- \frac{1}{2}log(\frac{1}{2}) + - \frac{1}{2}log(\frac{1}{2})) = 0.817\
Entropy(颜色) = \frac{3}{5}(- \frac{3}{3}log(\frac{3}{3}) ) + \frac{2}{5}(- \frac{2}{2}log(\frac{1}{2})) = 0
$$
在上例中,显然颜色是更好的分类标准,因为其信息增益更大一些
C4.5
介绍:
C4.5和ID3核心的算法是一样的,但是采取的方法不同,C4.5采用了信息增益率作为划分的依据,克服了ID3算法中采用信息增益偏向选择属性取值比较多的属性的缺点(属性取向多往往结果比较纯,信息增益比较大)。
分类标准:
$$
GainRatio(S,A) = \frac{Gain(S,A)}{SplitInformation(S,A)}
$$
分母的位置是分裂因子,计算公式为:
$$
SplitInformation(S,A) = -\sum_{i=1}^{c}\frac{|S_i|}{|S|}log_2\frac{|S_i|}{|S|}
$$
c为在原样本中加入属性A分得的种类数算法实现:python
Tags
监督学习算法
熵
信息增益率
构造过程中树剪枝
CART算法
介绍:
是一种决策树分类算法,最后形成的树是一个二叉树,所以在选定的属性中要划分出最佳的属性划分值,能够二分每个特征
分类标准:基尼指数
$$
Gini(A) = 1 - \sum_{k=1}^{C}p_k^2
$$
$p_k$是分别为正负实例的概率, 基尼指数越小说明分类纯度越高。和熵的效果相似。例如对于(是否有房,婚姻状况,年收入)-> 是否拖欠贷款问题,婚姻状况有(单身,已婚,离异)等取值,在选择用婚姻状况划分时,要分别选择一个属性值为一类,剩下的为另一类,计算三个基尼指数,得出基尼指数增益最高的一个划分规则,继续下面的步骤。
而对于取值范围连续的属性值,要分别从小到大选择两个属性的中间值进行二分类,计算基尼指数,得到最优划分规则。
训练结束条件:样本集的基尼指数小于预定阈值(样本基本属于同一类)
算法实现: python
Tags
基尼指数
阈值停止法
监督学习算法
节点二分类
AdaBoost装袋提升算法
装袋算法介绍:装袋算法就是通过多个判别器对同一个事物进行投票,最终分类的结果就是票数最多的分类。
介绍:对于每一个判别器加上一个权重,这样判别结果会更加合理。例子如下:
比如你生病了,去n个医院看了n个医生,每个医生给你开了药方,最后的结果中,哪个药方的出现的次数多,那就说明这个药方就越有可能性是最优解,这个很好理解。而装袋算法就是这个思想。 而AdaBoost算法的核心思想还是基于装袋算法,但是他有一点点的改进,上面的每个医生的投票结果都是一样的,说明地位平等,如果在这里加上一个权重,大城市的医生权重高点,小县城的医生权重低,这样通过最终计算权重和的方式,会更加的合理,这就是AdaBoost算法。AdaBoost算法是一种迭代算法,只有最终分类误差率小于阈值算法才能停止,针对同一训练集数据训练不同的分类器,我们称弱分类器,最后按照权重和的形式组合起来,构成一个组合分类器,就是一个强分类器了。
训练过程:
a. 对于训练集$D_t$训练一个弱分类器$C_t$
b. 通过$C_i$对数据进行分类,计算误差率,$Pr$代表错误点的权值,刚开始给所有点赋初始权值
$$
\epsilon t = Pr{i \sim D_t}[h_t(x_i)\neq y_i]
$$$$
choose;; \alpha_t = \frac{1}{2}ln(\frac{1-\epsilon _t}{\epsilon _t})
$$c. 将分错的数据权重提高,分对的权重降低,凸显分错的数据。$Z_t$是一个正态因素,这样$D_{t+1}$就会服从某种分布
$$
update ;; D_{t+1}(i) = \frac{D_t(i)}{Z_t}*{e^{-\alpha_t},if;h_t(x_i) =y_i, \else;e^{\alpha_t}
$$d. 最终分类误差率小于某个阈值时,训练就可以停止
e. 输出最终的预测函数:
$$
H(x) = sign(\sum_{t=1}^{T}\alpha _ t h_t(x))
$$
sign为符号函数,如果值为正,分为+1类,否则为-1类提高错误点的权值原因:当下一次分类器再次分错了这些点之后,会提高整体的错误率,这样就导致 a 变的很小,最终导致这个分类器在整个混合分类器的权值变低。也就是说,这个算法让优秀的分类器占整体的权值更高,而挫的分类器权值更低。
代码实现:java
Tags
监督学习算法
多分类器综合
多次迭代统一训练集
Apriori算法
算法的用处是挖掘频繁项集,即找出经常出现的组合,然后根据这些组合最终推出我们的关联规则。比如:
泡面 -> 火腿[support = 2%][confidence = 70%],就是关联规则的表示方法,其中支持度和置信度是两个衡量规则是否有用的度量标准。 几个概念: - 支持度:所有的事务的2%显示同时购买了泡面和火腿。 - 置信度:所有买泡面的顾客,70%都买了火腿 - 项集:项的集合,由项集可推出关联规则 - 支持度:包含项集的事务数 - 频繁项集: 大于支持度技术阈值的项集。 - 置信度: confidence(泡面->火腿) = P(火腿|泡面),已知频繁项集即可知置信度
算法原理
算法有两步:
找出所有的频繁项集
a. 扫描所有的事务得到候选项集C1
b. 与支持度阈值作比较,提出小于支持度阈值的项集,得频繁1项集L1
c. 第二次迭代,先是连接步,由$L1\Join L1$得出候选项集
d. 剪枝步,剪掉项集中包含不频繁项的项集,得出C2。
e. 将支持度小于阈值的全部剔除,得出L2
f. 第三次迭代,连接步得出候选项集
g. 剪枝步,减去含有L2中没有的元素的三项集得出C3
h. 计数、比较阈值得到最终的L3
i. 迭代知道$C_n$为空,所以算法到此结束,现在得出了所有的频繁项集
根据频繁项集产生强关联规则
根据$L_n$的非空子集,组合得到关联规则
算法评价
需要生成大量的候选项集,还要一直迭代重复的扫描事物数据来计算支持度,这会导致效率比较底下。
EM算法 链接
算法介绍
EM算法就是一种从不完全数据或者有数据丢失的数据集(存在隐含变量)中求解概率模型参数的最大似然统计方法。由于不能直接最大化$l(\theta)$,我们可以不断建立$l(\theta)$的下界(E步),然后最大化下界(M步)。
最大似然估计原理(似然——>已知参数倒推结果)
多数情况下,我们是根据已知条件来推算结果,而最大似然估计就是已经知道了结果,然后寻求使该结果出现的可能性最大的条件,以此作为估计值。也可以解释为:我们已知某个参数能使样本出现的概率最大,我们当然不会再去选择其他小概率的样本 ,所以干脆就把这个参数作为估计的真实值。
求最大似然函数的一般步骤:
写出似然函数
$$
L(\theta) = L(x_1,...,x_n;\theta) = \prod_{i=1}^np(x_i;\theta)
\
\hat{\theta} = arg;max;l(\theta)
$$对似然函数取对数,写成累加的形式
对$\theta$各维求偏导数,即梯度,n个未知的参数,就有n个方程,方程组的解就是似然函数的极值点,就得到n个参数了
EM算法求解原理
$Q_i(z^{(i)})$是对每一个样例i,隐含变量z的分布,$\sum_{z^{(i)}}Q_i(z^{(i)})=1$ ,由(1)到(2), 就是分子分母同乘一个相等的函数。
$$
H(\theta) = lnL(\theta) = ln\prod_{i=1}^np(x_i;\theta) = \sum_{i=1}^nln;p(x^{(i)},z^{(i)};\theta) ;;;(1)\=\sum_ilog\sum_{z(i)}Q_i(z^{(i)})\frac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})} ;;;(2)\\geq \sum_i\sum_{z^{(i)}}Q_i(z^{(i)})log\frac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})} ;;(3);;from ;jensen
$$
从(2)到(3)证明如下:设Y是随机变量X的函数,Y = g(x), g是连续函数,则:
$$
若X是离散型变量,分布率为P(X=x_k)= p_k, 则\
若\sum_{k=1}^\inf g(x_k)p(k)绝对收敛 \
有E(Y) = E[g(x)]=\sum_{k=1}^\inf g(x_k)p_k
$$
对于上述问题,Y是$[p(x^{(i)},z^{(i)};\theta)]$, X是$z^{(i)}$,$Q_i(z^{(i)})$是$p_k$,g是$z^{(i)}$到$\frac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})} $的映射。再加上Jensen不等式:
$$
E[f(x)]\leq f(EX) \这里f(x)是凸函数,这里暂定为log(x)是凸函数,凸函数的定义是任意两点连线都在y(x)下方。
$$Jensen不等式成立的条件是随机变量为常数值,得:
$$
\frac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})} = C
\
由于\sum_{z^{(i)}}Q_i(z^{(i)})=1
\
也就是\sum_zp(x^{(i)},z;\theta) = C
\就能推出:
Q_i(z^{(i)}) = \frac{p(x^{(i)},z^{(i)};\theta)}{\sum_zp(x^{(i)},z;\theta)}
\ = \frac{p(x^{(i)},z^{(i)};\theta)}{\sum_zp(x^{(i)};\theta)}
\=p(z^{(i)}|x^{(i)};\theta)
$$EM算法流程
$$
\sum_ilog ;p(x^{(i)};\theta) = \sum_ilog\sum_{z(i)}p(x)
$$E(Expectation)步骤
$$
Q_i(z^{(i)}):=p(z^{(i)}|x(i);\theta)
$$
即根据参数初始值或上一次迭代的模型参数计算出隐性变量的后验概率,其实就是隐性变量的期望,作为隐藏变量的估计值。M(Maximization)步骤, 将似然函数最大化以获取新的参数值
$$
\theta:=arg;max_\theta \sum_i\sum_{z^{(i)}}Q_i(z^{(i)})log\frac{p(x^{(i)},z^{(i)};\theta)}{Q_i(z^{(i)})}
$$
参考知识:
二阶导数为正,为凹函数,或者说是向下凸的。