数据挖掘算法总结,总结学习中遇到的数据挖掘算法,推导过程,实现方式等等

数据挖掘算法总结 θ    t e c h \theta\;tech θtech

总结学习中遇到的数据挖掘算法,推导过程,实现方式等等

1. ID3

  1. 介绍:

    ID3算法是一种分类决策树算法,通过一系列规则将数据分类成决策树的形式。决策树中,每次分类都从根节点开始,每一个叶子节点代表一种可能的分类结果。

  2. 分类标准
    G a i n ( S , A ) = E n t r o p y ( S ) − ∑ v ϵ V ( A ) ∣ S v ∣ ∣ S ∣ E n t r o p y ( S v ) Gain(S,A) = Entropy(S) - \sum_{v\epsilon V(A)}\frac{|S_v|}{|S|}Entropy(S_v) Gain(S,A)=Entropy(S)vϵV(A)SSvEntropy(Sv)
    其中,V(A)是属性A的值域,S是样本集合, S v S_v Sv S S S中在属性A上值等于v的样本集合

  3. 分类方法:在每个节点选取尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到决策树能完美分类训练样例。

  4. Tags监督学习算法 交叉熵

  5. 实现:java

  6. 例子:

    西瓜分为好瓜和坏瓜,

    性质
    敲击声音 清脆a1 浑浊a2
    颜色 深绿b1 浅b2
    1. a1 b1 1

    2. a1 b1 1

    3. a2 b1 1

    4. a2 b2 0

    5. a1 b2 0
      E n t r o p y ( s t a r t ) = − 3 5 l o g ( 3 5 ) − 2 5 l o g ( 2 5 ) = 0.835 E n t r o p y ( 敲 击 声 音 ) = 3 5 ( − 1 3 l o g ( 1 3 ) + − 2 3 l o g ( 2 3 ) ) + 2 5 ( − 1 2 l o g ( 1 2 ) + − 1 2 l o g ( 1 2 ) ) = 0.817 E n t r o p y ( 颜 色 ) = 3 5 ( − 3 3 l o g ( 3 3 ) ) + 2 5 ( − 2 2 l o g ( 1 2 ) ) = 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 Entropy(start)=53log(53)52log(52)=0.835Entropy()=53(31log(31)+32log(32))+52(21log(21)+21log(21))=0.817Entropy()=53(33log(33))+52(22log(21))=0
      在上例中,显然颜色是更好的分类标准,因为其信息增益更大一些

2. C4.5

  1. 介绍:

    C4.5和ID3核心的算法是一样的,但是采取的方法不同,C4.5采用了信息增益率作为划分的依据,克服了ID3算法中采用信息增益偏向选择属性取值比较多的属性的缺点(属性取向多往往结果比较纯,信息增益比较大)。

  2. 分类标准:
    G a i n R a t i o ( S , A ) = G a i n ( S , A ) S p l i t I n f o r m a t i o n ( S , A ) GainRatio(S,A) = \frac{Gain(S,A)}{SplitInformation(S,A)} GainRatio(S,A)=SplitInformation(S,A)Gain(S,A)
    分母的位置是分裂因子,计算公式为:
    S p l i t I n f o r m a t i o n ( S , A ) = − ∑ i = 1 c ∣ S i ∣ ∣ S ∣ l o g 2 ∣ S i ∣ ∣ S ∣ SplitInformation(S,A) = -\sum_{i=1}^{c}\frac{|S_i|}{|S|}log_2\frac{|S_i|}{|S|} SplitInformation(S,A)=i=1cSSilog2SSi
    c为在原样本中加入属性A分得的种类数

  3. 算法实现:python

  4. Tags监督学习算法 信息增益率 构造过程中树剪枝

3. CART算法*

  1. 介绍:

    是一种决策树分类算法,最后形成的树是一个二叉树,所以在选定的属性中要划分出最佳的属性划分值,能够二分每个特征

  2. 分类标准:基尼指数
    G i n i ( A ) = 1 − ∑ k = 1 C p k 2 Gini(A) = 1 - \sum_{k=1}^{C}p_k^2 Gini(A)=1k=1Cpk2
    p k p_k pk是分别为正负实例的概率, 基尼指数越小说明分类纯度越高。和熵的效果相似。

    例如对于(是否有房,婚姻状况,年收入)-> 是否拖欠贷款问题,婚姻状况有(单身,已婚,离异)等取值,在选择用婚姻状况划分时,要分别选择一个属性值为一类,剩下的为另一类,计算三个基尼指数,得出基尼指数增益最高的一个划分规则,继续下面的步骤。

    而对于取值范围连续的属性值,要分别从小到大选择两个属性的中间值进行二分类,计算基尼指数,得到最优划分规则。

  3. 训练结束条件:样本集的基尼指数小于预定阈值(样本基本属于同一类)

  4. 算法实现: python

  5. Tags 基尼指数 阈值停止法 监督学习算法 节点二分类

4. AdaBoost装袋提升算法*

  1. 装袋算法介绍:装袋算法就是通过多个判别器对同一个事物进行投票,最终分类的结果就是票数最多的分类。

  2. 介绍:对于每一个判别器加上一个权重,这样判别结果会更加合理。例子如下:

    比如你生病了,去n个医院看了n个医生,每个医生给你开了药方,最后的结果中,哪个药方的出现的次数多,那就说明这个药方就越有可能性是最优解,这个很好理解。而装袋算法就是这个思想。
    而AdaBoost算法的核心思想还是基于装袋算法,但是他有一点点的改进,上面的每个医生的投票结果都是一样的,说明地位平等,如果在这里加上一个权重,大城市的医生权重高点,小县城的医生权重低,这样通过最终计算权重和的方式,会更加的合理,这就是AdaBoost算法。AdaBoost算法是一种迭代算法,只有最终分类误差率小于阈值算法才能停止,针对同一训练集数据训练不同的分类器,我们称弱分类器,最后按照权重和的形式组合起来,构成一个组合分类器,就是一个强分类器了。
    
  3. 训练过程:

    a. 对于训练集 D t D_t Dt训练一个弱分类器 C C_{} C

    b. 通过 C i C_i Ci对数据进行分类,计算误差率, P r Pr Pr代表错误点的权值,刚开始给所有点赋初始权值
    ϵ t = P r i ∼ D t [ h t ( x i ) ≠ y i ] \epsilon _t = Pr_{i \sim D_t}[h_t(x_i)\neq y_i] ϵt=PriDt[ht(xi)=yi]

    c h o o s e      α t = 1 2 l n ( 1 − ϵ t ϵ t ) choose\;\; \alpha_t = \frac{1}{2}ln(\frac{1-\epsilon _t}{\epsilon _t}) chooseαt=21ln(ϵt1ϵt)

    c. 将分错的数据权重提高,分对的权重降低,凸显分错的数据。 Z t Z_t Zt是一个正态因素,这样 D t + 1 D_{t+1} Dt+1就会服从某种分布

    u p d a t e      D t + 1 ( i ) = D t ( i ) Z t ∗ { e − α t , i f    h t ( x i ) = y i , e l s e    e α t 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} updateDt+1(i)=ZtDt(i){eαt,ifht(xi)=yi,elseeαt
    d. 最终分类误差率小于某个阈值时,训练就可以停止

    e. 输出最终的预测函数:
    H ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) H(x) = sign(\sum_{t=1}^{T}\alpha _ t h_t(x)) H(x)=sign(t=1Tαtht(x))
    sign为符号函数,如果值为正,分为+1类,否则为-1类

  4. 提高错误点的权值原因:当下一次分类器再次分错了这些点之后,会提高整体的错误率,这样就导致 a 变的很小,最终导致这个分类器在整个混合分类器的权值变低。也就是说,这个算法让优秀的分类器占整体的权值更高,而挫的分类器权值更低。

  5. 代码实现:java

  6. Tags监督学习算法 多分类器综合 多次迭代统一训练集

5. Apriori算法

  1. 算法的用处是挖掘频繁项集,即找出经常出现的组合,然后根据这些组合最终推出我们的关联规则。比如:

    泡面 -> 火腿[support = 2%][confidence = 70%],就是关联规则的表示方法,其中支持度和置信度是两个衡量规则是否有用的度量标准。
    几个概念:
    - 支持度:所有的事务的2%显示同时购买了泡面和火腿。
    - 置信度:所有买泡面的顾客,70%都买了火腿
    - 项集:项的集合,由项集可推出关联规则
    - 支持度:包含项集的事务数
    - 频繁项集: 大于支持度技术阈值的项集。
    - 置信度: confidence(泡面->火腿) = P(火腿|泡面),已知频繁项集即可知置信度
    
  2. 算法原理

    算法有两步:

    1. 找出所有的频繁项集

      a. 扫描所有的事务得到候选项集C1

      b. 与支持度阈值作比较,提出小于支持度阈值的项集,得频繁1项集L1

      c. 第二次迭代,先是连接步,由 L 1 ⋈ L 1 L1\Join L1 L1L1得出候选项集

      d. 剪枝步,剪掉项集中包含不频繁项的项集,得出C2。

      e. 将支持度小于阈值的全部剔除,得出L2

      f. 第三次迭代,连接步得出候选项集

      g. 剪枝步,减去含有L2中没有的元素的三项集得出C3

      h. 计数、比较阈值得到最终的L3

      i. 迭代知道 C n C_n Cn为空,所以算法到此结束,现在得出了所有的频繁项集

    2. 根据频繁项集产生强关联规则

      根据 L n L_n Ln的非空子集,组合得到关联规则

  3. 算法评价

    需要生成大量的候选项集,还要一直迭代重复的扫描事物数据来计算支持度,这会导致效率比较底下。

6. EM算法 链接

  1. 算法介绍

    EM算法就是一种从不完全数据或者有数据丢失的数据集(存在隐含变量)中求解概率模型参数的最大似然统计方法。由于不能直接最大化 l ( θ ) l(\theta) l(θ),我们可以不断建立 l ( θ ) l(\theta) l(θ)的下界(E步),然后最大化下界(M步)。

  2. 最大似然估计原理(似然——>已知参数倒推结果

    多数情况下,我们是根据已知条件来推算结果,而最大似然估计就是已经知道了结果,然后寻求使该结果出现的可能性最大的条件,以此作为估计值。也可以解释为:我们已知某个参数能使样本出现的概率最大,我们当然不会再去选择其他小概率的样本 ,所以干脆就把这个参数作为估计的真实值。

    求最大似然函数的一般步骤:

    • 写出似然函数
      L ( θ ) = L ( x 1 , . . . , x n ; θ ) = ∏ i = 1 n p ( x i ; θ ) θ ^ = a r g    m a x    l ( θ ) L(\theta) = L(x_1,...,x_n;\theta) = \prod_{i=1}^np(x_i;\theta) \\ \hat{\theta} = arg\;max\;l(\theta) L(θ)=L(x1,...,xn;θ)=i=1np(xi;θ)θ^=argmaxl(θ)

    • 对似然函数取对数,写成累加的形式

    • θ \theta θ各维求偏导数,即梯度,n个未知的参数,就有n个方程,方程组的解就是似然函数的极值点,就得到n个参数了

  3. EM算法求解原理

    Q i ( z ( i ) ) Q_i(z^{(i)}) Qi(z(i))是对每一个样例i,隐含变量z的分布, ∑ z ( i ) Q i ( z ( i ) ) = 1 \sum_{z^{(i)}}Q_i(z^{(i)})=1 z(i)Qi(z(i))=1 ,由(1)到(2), 就是分子分母同乘一个相等的函数。
    H ( θ ) = l n L ( θ ) = l n ∏ i = 1 n p ( x i ; θ ) = ∑ i = 1 n l n    p ( x ( i ) , z ( i ) ; θ )        ( 1 ) = ∑ i l o g ∑ z ( i ) Q i ( z ( i ) ) p ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) )        ( 2 ) ≥ ∑ i ∑ z ( i ) Q i ( z ( i ) ) l o g p ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) )      ( 3 )      f r o m    j e n s e n 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 H(θ)=lnL(θ)=lni=1np(xi;θ)=i=1nlnp(x(i),z(i);θ)(1)=ilogz(i)Qi(z(i))Qi(z(i))p(x(i),z(i);θ)(2)iz(i)Qi(z(i))logQi(z(i))p(x(i),z(i);θ)(3)fromjensen
    从(2)到(3)证明如下:

    设Y是随机变量X的函数,Y = g(x), g是连续函数,则:
    KaTeX parse error: Got function '\inf' with no arguments as superscript at position 96: …x)]=\sum_{k=1}^\̲i̲n̲f̲ ̲g(x_k)p_k
    对于上述问题,Y是 [ p ( x ( i ) , z ( i ) ; θ ) ] [p(x^{(i)},z^{(i)};\theta)] [p(x(i),z(i);θ)], X是 z ( i ) z^{(i)} z(i) Q i ( z ( i ) ) Q_i(z^{(i)}) Qi(z(i)) p k p_k pk,g是 z ( i ) z^{(i)} z(i)到$\frac{p(x{(i)},z{(i)};\theta)}{Q_i(z^{(i)})} $的映射。

    再加上Jensen不等式:
    E [ f ( x ) ] ≤ f ( E X ) 这 里 f ( x ) 是 凸 函 数 , 这 里 暂 定 为 l o g ( x ) 是 凸 函 数 , 凸 函 数 的 定 义 是 任 意 两 点 连 线 都 在 y ( x ) 下 方 。 E[f(x)]\leq f(EX) \\这里f(x)是凸函数,这里暂定为log(x)是凸函数,凸函数的定义是任意两点连线都在y(x)下方。 E[f(x)]f(EX)f(x)log(x)线y(x)

    Jensen不等式成立的条件是随机变量为常数值,得:
    p ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) ) = C 由 于 ∑ z ( i ) Q i ( z ( i ) ) = 1 也 就 是 ∑ z p ( x ( i ) , z ; θ ) = C 就 能 推 出 : Q i ( z ( i ) ) = p ( x ( i ) , z ( i ) ; θ ) ∑ z p ( x ( i ) , z ; θ ) = p ( x ( i ) , z ( i ) ; θ ) ∑ z p ( x ( i ) ; θ ) = p ( z ( i ) ∣ x ( i ) ; θ ) \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) Qi(z(i))p(x(i),z(i);θ)=Cz(i)Qi(z(i))=1zp(x(i),z;θ)=CQi(z(i))=zp(x(i),z;θ)p(x(i),z(i);θ)=zp(x(i);θ)p(x(i),z(i);θ)=p(z(i)x(i);θ)

  4. EM算法流程
    ∑ i l o g    p ( x ( i ) ; θ ) = ∑ i l o g ∑ z ( i ) p ( x ) \sum_ilog \;p(x^{(i)};\theta) = \sum_ilog\sum_{z(i)}p(x) ilogp(x(i);θ)=ilogz(i)p(x)

    • E(Expectation)步骤
      Q i ( z ( i ) ) : = p ( z ( i ) ∣ x ( i ) ; θ ) Q_i(z^{(i)}):=p(z^{(i)}|x(i);\theta) Qi(z(i)):=p(z(i)x(i);θ)
      即根据参数初始值或上一次迭代的模型参数计算出隐性变量的后验概率,其实就是隐性变量的期望,作为隐藏变量的估计值。

    • M(Maximization)步骤, 将似然函数最大化以获取新的参数值
      θ : = a r g    m a x θ ∑ i ∑ z ( i ) Q i ( z ( i ) ) l o g p ( x ( i ) , z ( i ) ; θ ) Q i ( z ( i ) ) \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)})} θ:=argmaxθiz(i)Qi(z(i))logQi(z(i))p(x(i),z(i);θ)

  5. 参考知识:

    二阶导数为正,为凹函数,或者说是向下凸的。

7. 支持向量机

  1. 函数形式(训练目标):

    线性向量机:
    f ( x ) = ∑ i w i x i + b = [ w b ] d o t [ x 1 ] f(x) = \sum_iw_ix_i + b = \begin{bmatrix} w \\ b \end{bmatrix}dot \begin{bmatrix} x \\ 1 \end{bmatrix} f(x)=iwixi+b=[wb]dot[x1]

  2. 损失函数:这里面的loss都是一个训练样例的loss, 累加之后才得到系统的所有loss
    h i n g e    l o s s : l ( f ( x n ) , y ^ n ) = m a x ( 0 , 1 − y ^ n ( f ( x n ) ∗ ( f ( x n ) ) ( 0 ) hinge\;loss :l(f(x^n),\hat{y}^n) = max(0,1-\hat{y}^n(f(x^n)*(f(x^n))(0) hingeloss:l(f(xn),y^n)=max(0,1y^n(f(xn)(f(xn))(0)

    S q u a r e    l o s s + S i g m o i d : l ( f ( x n ) , y ^ n ) = ( σ ( y ^ n f ( x ) ) − 1 ) 2    ( 1 ) Square\;loss + Sigmoid :l(f(x^n),\hat{y}^n)=(\sigma(\hat{y}^nf(x))-1)^2\;(1) Squareloss+Sigmoid:l(f(xn),y^n)=(σ(y^nf(x))1)2(1)

    S i g m o i d + c r o s s    e n t r o p y      l ( f ( x n ) , y ^ n ) = l n ( 1 + e x p ( − y ^ n f ( x ) ) )    ( 2 ) Sigmoid + cross\;entropy\;\;l(f(x^n),\hat{y}^n) = ln(1+exp(-\hat{y}^nf(x))) \; (2) Sigmoid+crossentropyl(f(xn),y^n)=ln(1+exp(y^nf(x)))(2)

    由(0)可推导出损失函数(cost_1为label为1的损失函数):
    { m a x ( 0 , − x + 1 ) ( y i = 1 ) m a x ( 0 , x − 1 ) ( y i = 0 ) \left\{\begin{matrix} max(0,-x+1) (y^{i}=1) \\ max(0,x-1) (y^{i}=0) \end{matrix}\right. {max(0,x+1)(yi=1)max(0,x1)(yi=0)

    J ( θ ) = C ∑ i = 1 m [ y ( i ) c o s t    t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) c o s t    t 0 ( θ T x ( i ) ) ] + 1 2 ∑ j = 1 n θ j 2 J(\theta) = C\sum_{i=1}^{m}[y^{(i)}cost \;t_1(\theta^Tx^{(i)})+(1-y^{(i)})cost\;t_0(\theta^Tx^{(i)})]+\frac{1}{2}\sum_{j=1}^{n}\theta_j^2 J(θ)=Ci=1m[y(i)costt1(θTx(i))+(1y(i))costt0(θTx(i))]+21j=1nθj2

    这里的 C = m λ C = \frac{m}{\lambda} C=λm, C越大,SVM的决策边界margin也越大

    当C越大时,margin也越大,我们的目标是最小化代价函数 J ( θ ) J(\theta) J(θ), 所以C的乘积项
    ∑ i = 1 m [ y ( i ) c o s t    t i ( θ T x ( i ) ) + ( 1 − y ( i ) ) c o s t    t 0 ( θ T x ( i ) ) ] \sum_{i=1}^{m}[y^{(i)}cost \;t_i(\theta^Tx^{(i)})+(1-y^{(i)})cost\;t_0(\theta^Tx^{(i)})] i=1m[y(i)costti(θTx(i))+(1y(i))costt0(θTx(i))]
    要很小。最终近似为:
    J ( θ ) = C ∗ 0 + 1 2 ∑ j = 1 n θ j 2 = 1 2 ( θ 1 2 + θ 2 2 ) J(\theta) = C*0+\frac{1}{2}\sum_{j=1}^{n}\theta_j^2 = \frac{1}{2}(\theta_1^2+\theta_2^2) J(θ)=C0+21j=1nθj2=21(θ12+θ22)
    我们的目标是求使代价最小的 θ \theta θ

  3. 几何论证:对于任意一个点,根据分类条件得出以下限制:
    { θ T x ( i ) ⩾ 1 ( y i = 1 ) θ T x ( i ) ⩽ − 1 ( y i = 0 ) \left\{\begin{matrix} \theta^Tx^{(i)}\geqslant1 (y^{i}=1) \\ \theta^Tx^{(i)}\leqslant-1 (y^{i}=0) \end{matrix}\right. {θTx(i)1(yi=1)θTx(i)1(yi=0)
    将上述看为x和各个系数的点积,化为几何概念,可以得到:
    { p ( i ) ∣ ∣ θ ∣ ∣ ⩾ 1 ( y i = 1 ) p ( i ) ∣ ∣ θ ∣ ∣ ⩽ − 1 ( y i = 0 ) \left\{\begin{matrix} p^{(i)}||\theta||\geqslant1 (y^{i}=1) \\ p^{(i)}||\theta||\leqslant-1 (y^{i}=0) \end{matrix}\right. {p(i)θ1(yi=1)p(i)θ1(yi=0)

    θ \theta θ上的投影为p,则 p ∣ ∣ θ ∣ ∣ > = 1 p||\theta||>=1 pθ>=1或者 p ∣ ∣ θ ∣ ∣ < = − 1 p||\theta||<=-1 pθ<=1, 如果因为要求 θ \theta θ很小,所以p要求很大,最终求得的就是点在 θ \theta θ方向投影最小,即在与 θ \theta θ 垂直的决策边界上投影最大。

  4. RBF Kernel核函数

    RBF核函数,即高斯核函数,公式为:
    f ( x ) = e − ∣ ∣ x − u ∣ ∣ 2 2 σ 2 f(x) =e^{-\frac{||x-u||^2}{2\sigma^2}} f(x)=e2σ2xu2

  5. Sigmoid Kernel核函数
    K ( x , z ) = t a n h ( x . d o t    z ) K(x,z) = tanh(x .dot \;z) K(x,z)=tanh(x.dotz)

7a. 支持向量机(解释二)(其实二者的区别在于label为0和1还是-1和1)

如果是后者,则可以把代价函数合并,如下:

  1. 函数形式(训练目标):
    f ( x ) = ∑ i w i x i + b = [ w b ] d o t [ x 1 ] f(x) = \sum_iw_ix_i + b = \begin{bmatrix} w \\ b \end{bmatrix}dot \begin{bmatrix} x \\ 1 \end{bmatrix} f(x)=iwixi+b=[wb]dot[x1]

  2. 损失函数(C的值为无穷大时,为硬间隔向量机,不允许有数据分类错误,否则成为软间隔向量机):
    L ( f ) = C ∑ n ϵ n + λ ∣ ∣ w ∣ ∣ 2 L(f) = C\sum_{n}\epsilon^n+\lambda||w||_2 L(f)=Cnϵn+λw2

    ϵ n = m a x ( 0 , 1 − y ^ n f ( x ) ) \epsilon^n = max(0,1-\hat{y}^nf(x)) ϵn=max(0,1y^nf(x))

    由上式
    ϵ n ≥ 0 ϵ n ≥ 1 − y ^ n f ( x ) → y ^ n f ( x ) ≥ 1 − ϵ n \epsilon^n \geq 0\\ \epsilon^n \geq1-\hat{y}^nf(x) \rightarrow\hat{y}^nf(x)\geq1-\epsilon^n ϵn0ϵn1y^nf(x)y^nf(x)1ϵn

  3. 优化方式:
    w ← w − η ∑ n c n ( w ) x n w \leftarrow w-\eta\sum_{n}c^n(w)x^n wwηncn(w)xn
    w初始化为0,解出的结果是w是x的线性组合, c n ( w ) c^n(w) cn(w)是f对loss function的偏微分
    w = ∑ n α n x n = X α w = \sum_{n}\alpha_nx^n = X\mathbf{\alpha} w=nαnxn=Xα
    w是nx1维, w T w^T wT是1xn维,x是nx1,X是n*N,所以
    f ( x ) = w T ∗ x → f ( x ) = α T X T x → ∑ n α n ( x n    d o t    x ) f(x) = w^T*x \rightarrow f(x) = \alpha^TX^Tx \rightarrow \sum_{n}\alpha_n(x^n\;dot\;x) f(x)=wTxf(x)=αTXTxnαn(xndotx)
    ( x n    d o t    x ) (x^n\;dot\;x) (xndotx)可以记为 K ( x n , x ) K(x^n,x) K(xn,x)

  4. 重写损失函数:
    L ( f ) = ∑ n l ( f ( x n ) , y ^ n ) = ∑ n l ( ∑ n ′ α n ′ K ( x n ′ , x n ) , y ^ n ) L(f) = \sum_{n}l(f(x^n),\hat{y}^n) = \sum_{n}l(\sum_{n'}\alpha_{n'}K(x^{n'},x^n),\hat{y}^n) L(f)=nl(f(xn),y^n)=nl(nαnK(xn,xn),y^n)

  5. 利用拉格朗日乘子法证明w是x的线性组合的合理性:

    对硬间隔向量机的损失函数进行转换:
    L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(w,b,\alpha) = \frac{1}{2}||w||^2+\sum_{i=1}^{m}\alpha_i(1-y_i(w^Tx_i+b)) L(w,b,α)=21w2+i=1mαi(1yi(wTxi+b))

    w = ∑ i = 1 m α i y i x i 0 = ∑ i = 1 m α i y i w = \sum_{i=1}^{m}\alpha_iy_ix_i \\ 0=\sum_{i=1}^{m}\alpha_iy_i w=i=1mαiyixi0=i=1mαiyi

  6. 核函数Tips

    1. 核函数其实就是用来描述相似度的(向量的点积)
    2. 通过mercer’s 定理来检测所定核函数能否拆分成点积
    3. kernel(x1,x2)函数代表x1、x2先做特征转换之后再做内积的结果,特征转换代表的是将低维提升到高维的转换

8. K-Means算法 链接

  1. 聚类算法介绍:

    是一种无监督学习算法,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质和规律,为进一步的数据分析提供基础。

  2. Kmeans算法执行过程:

    先从样本集中随机选取k个样本作为簇中心,计算所有样本与这k个“簇中心”的距离,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的簇中心。

    算法的要点

  3. k值的选择

  4. 距离的度量, 给定样本 x ( i ) x^{(i)} x(i) x ( j ) x^{(j)} x(j), 距离的度量方法主要分为以下几种。

    • 有序属性距离度量(离散属性或连续属性)

      • 闵可夫斯基距离
        d i s t m k ( x ( i ) , x ( j ) ) = ( ∑ u = 1 n ∣ x u ( i ) − x u ( j ) ∣ p ) 1 p distmk(x(i),x(j))=(∑_{u=1}^n|x^{(i)}_u−x^{(j)}_u|^p)^{\frac{1}{p}} distmk(x(i),x(j))=(u=1nxu(i)xu(j)p)p1
  • 欧氏距离
    d i s t e d ( x ( i ) , x ( j ) ) = ∣ ∣ x ( i ) − x ( j ) ∣ ∣ 2 = ∑ u = 1 n ∣ x u ( i ) − x u ( j ) ∣ 2 dist_{ed}(x^{(i)},x^{(j)})=||x^{(i)}-x^{(j)}||_2=\sqrt{\sum_{u=1}^n |x_u^{(i)}-x_u^{(j)}|^2} disted(x(i),x(j))=x(i)x(j)2=u=1nxu(i)xu(j)2

    • 曼哈顿距离

    d i s t m a n ( x ( i ) , x ( j ) ) = ∣ ∣ x ( i ) − x ( j ) ∣ ∣ 1 = ∑ u = 1 n ∣ x u ( i ) − x u ( j ) ∣ dist_{man}(x^{(i)},x^{(j)})=||x^{(i)}-x^{(j)}||_1=\sum_{u=1}^n |x_u^{(i)}-x_u^{(j)}| distman(x(i),x(j))=x(i)x(j)1=u=1nxu(i)xu(j)

    • 无序属性距离度量

      VDM:

    V D M p ( x u ( i ) , x u ( j ) ) = ∑ z = 1 k ∣ m u , x u ( i ) , z m u , x u ( i ) − m u , x u ( j ) , z m u , x u ( j ) ∣ p VDM_p(x_u^{(i)},x_u^{(j)}) = \sum_{z=1}^k \left|\frac{m_{u,x_u^{(i)},z}}{m_{u,x_u^{(i)}}} - \frac{m_{u,x_u^{(j)},z}}{m_{u,x_u^{(j)}}} \right|^p VDMp(xu(i),xu(j))=z=1kmu,xu(i)mu,xu(i),zmu,xu(j)mu,xu(j),zp

    其中, m u , x u ( i ) m_{u,x_u^{(i)}} mu,xu(i)表示在属性u上取值为 x u ( i ) x_u^{(i)} xu(i)的样本数, m u , x u ( i ) , z m_{u,x_u^{(i)},z} mu,xu(i),z表示在第z个样本簇中属性u上取值为 x u ( i ) x_u^{(i)} xu(i)的样本数。得到的结果是在属性u上两个离散值的VDM距离。

    • 混合属性距离度量,即为有序与无序的结合:

    M i n k o v D M p ( x ( i ) , x ( j ) ) = ( ∑ u = 1 n c ∣ x u ( i ) − x u ( j ) ∣ p + ∑ u = n c + 1 n V D M p ( x u ( i ) , x u ( j ) ) ) 1 p MinkovDM_p(x^{(i)},x^{(j)}) = \left( \sum_{u=1}^{n_c} | x_u^{(i)} - x_u^{(j)} | ^p + \sum_{u=n_c +1}^n VDM_p (x_u^{(i)},x_u^{(j)}) \right) ^{\frac{1}{p}} MinkovDMp(x(i),x(j))=(u=1ncxu(i)xu(j)p+u=nc+1nVDMp(xu(i),xu(j)))p1

    其中含有 n c n_c nc个有序属性,与 n − n c n-n_c nnc个无序属性。

  1. 更新簇中心

    二分k-means算法

  2. k-means算法分析

    k-means算法由于初始“簇中心”点是随机选取的,因此最终求得的簇的划分与随机选取的“簇中心”有关,也就是说,可能会造成多种 k 个簇的划分情况。这是因为k-means算法收敛到了局部最小值,而非全局最小值。

  3. 二分k-means算法介绍:

    使用一种用于度量聚类效果的指标SSE(Sum of Squared Error),即对于第 i 个簇,其SSE为各个样本点到“簇中心”点的距离的平方的和,SSE值越小表示数据点越接近于它们的“簇中心”点,聚类效果也就越好。以此作为划分簇的标准。

    算法思想是:先将整个样本集作为一个簇,该“簇中心”点向量为所有样本点的均值,计算此时的SSE。若此时簇个数小于 k ,对每一个簇进行k-means聚类(k=2) ,计算将每一个簇一分为二后的总误差SSE,选择SSE最小的那个簇进行划分操作。

9. PageRank算法*

  1. 算法原理:

    p i ( n + 1 ) p_i(n+1) pi(n+1)表示虚拟用户在第n次浏览时访问 W i W_i Wi的几率。显然上述假设可以表述为:
    p i ( n + 1 ) = ∑ j p j ( n ) p j → i / N j p_i(n+1) = \sum_jp_j(n)p_{j\to i}/N_j pi(n+1)=jpj(n)pji/Nj
    其中 p j → i p_{j\to i} pji是一个描述互联网链接结构的指标函数,如果 W j W_j Wj W i W_i Wi有链接指向,则取值为1。将用户第n次浏览时访问网页的几率合并为列向量 p n p_n pn,它的第i个分量为 p i ( n ) p_i(n) pi(n), 并且引入一个只与互联网结构有关的矩阵H,第i行j列的矩阵元为 H i j = p j → i / N j H_{ij} = p_{j\to i}/N_j Hij=pji/Nj, 则上述公式可以改写为:
    p n + 1 = H p n p_{n+1} = Hp_n pn+1=Hpn
    求解上述公式得:
    p n = H n p 0 p_n = H^np_0 pn=Hnp0
    其中, p 0 p_0 p0为虚拟读者初次浏览时访问各网页的几率分布。

  2. 悬挂网页的处理

    对于悬挂网页,用户会在整个互联网上随机选取一个网页进行访问,用数学语言就是 把 H 的列向量中所有的零向量都换成 e/N (其中 e 是所有分量都为 1 的列向量, N 为互联网上的网页总数)。引入描述悬挂网页的指标向量a, 第i个分量指示 W i W_i Wi是否为悬挂网页。如果是悬挂网页,取值为1,否则为0。修正原来的矩阵:
    S = H + e a T / N S= H+ea^T/N S=H+eaT/N
    显然,这样定义的S矩阵的每一列矩阵元之和都是1,是一个随机矩阵,这个修正因此被成为随机性修正。

  3. 用户访问性格的考量:

    他们假定, 虚拟用户虽然是虚拟的, 但多少也有一些 “性格”,他们假定虚拟用户在每一步都有一个小于 1 的几率 α 访问当前网页所提供的链接, 同时却也有一个几率 1-α 不受那些链接所限, 随机访问互联网上的任何一个网站。 用数学语言来说 (请读者自行证明), 这相当于是把上述 S 矩阵变成了一个新的矩阵 G
    G = α S + ( 1 − α ) e e T / N G = \alpha S + (1-\alpha)ee^T/N G=αS+(1α)eeT/N
    由于第二项的增加,这个矩阵的所有矩阵元都为正,这个矩阵就是所谓的素矩阵,这个修正就称为素性修正。因此网页排序更新为:
    p n = G n p 0 p_n = G^np_0 pn=Gnp0
    G称为谷歌矩阵。G是一个超大型矩阵, G n p 0 G^np_0 Gnp0收敛速度取决于 α \alpha α α \alpha α越小,收敛速度越快,但是 α \alpha α也不能太小,这样会导致以网页间的彼此链接为基础的排序思路被弱化(这部分的贡献正比于 α \alpha α),最终选择的值是0.85.

10.朴素贝叶斯法

  1. 目标:基于贝叶斯定理与特征条件独立假设的分类方法

  2. 推导过程:
    P ( Y = c k ∣ X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) P ( x ) P(Y=c_k|X=x) = \frac{P(X=x|Y=c_k)P(Y=c_k)}{P(x)} P(Y=ckX=x)=P(x)P(X=xY=ck)P(Y=ck)

    P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , X ( n ) = x ( n ) ∣ Y = c k ) P(X=x|Y=c_k) = P(X^{(1)}=x^{(1)},X^{(n)}=x^{(n)}|Y=c_k) P(X=xY=ck)=P(X(1)=x(1),X(n)=x(n)Y=ck)
    根据条件独立假设,
    P ( X = x ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_k) = \prod_{j=1}^nP(X^{(j)} =x^{(j)}|Y=c_k) P(X=xY=ck)=j=1nP(X(j)=x(j)Y=ck)

开源Java算法包总结( θ    t e c h \theta\;tech θtech)

JDMP

优点:

  • 一致的数据表示,使用矩阵来表示所有事务

缺点:

  • 开发尚未完成
  • 文档不完善

SPMF

优点:

  • 专注于Pattern Mining, 发现数据中隐含的特征。
  • SPMF can be used as a standalone program with a simple user interface or from the command line. 可以作为程序单独使用
  • 速度快、轻量级(不依赖其他库)

Weka3

优点:

  • 支持深度学习

  • 有相关的课程,不过需要才能看

  • 算法可以直接用于数据集,也可以在java代码中调用

  • 功能比较全面 data pre-processing, classification, regression, clustering, association rules, and visualization

ELKI

  • 重点是聚类分析和离群值检测( outlier detection )中的无监督方法
  • ELKI提供了诸如R * 树之类的数据索引结构,可以大大提高性能。
  • 可扩展性: ELKI具有非常模块化的设计。我们希望允许数据类型,距离函数,算法,输入格式,索引结构和评估方法的任意组合
  • **开发进度:**每个版本的ELKI都在变化。为了适应新功能并提高性能,API有可能虽坏。我们希望在1.0版本中获得稳定的API,但目前还没有达成。

MOA

  • MOA是用于数据流(data streams)挖掘的最流行的开源框架
  • 社区规模比较大,有相关书籍
  • 与WEKA项目相关

SAMOA

  • Apache SAMOA is a distributed streaming machine learning (ML) framework that contains a programing abstraction for distributed streaming ML algorithms. 分布式流机器学习框架,为分布式流机器学习算法提供了编程抽象。
  • Apache SAMOA支持开发新的ML算法,而无需直接处理底层分布式流处理引擎(DSPEe,例如Apache Storm,Apache Flink和Apache Samza)的复杂性。Apache SAMOA用户可以一次开发分布式流ML算法,然后在多个DSPE上执行它们。

MLlib

  • MLlib适用于Spark的API
  • 可以与 Python(自Spark 0.9起)和R库(自Spark 1.5起)中的NumPy互操作
  • 可以使用任何Hadoop数据源(例如HDFS,HBase或本地文件),从而轻松插入Hadoop工作流
  • 性能:高质量算法,比MapReduce快100倍。 Spark擅长于迭代计算,从而使MLlib快速运行。同时,我们关注算法性能:MLlib包含利用迭代的高质量算法,并且比有时在MapReduce上使用的单遍逼近(one-pass approximations)可以产生更好的结果。
  • 适用性: You can run Spark using its standalone cluster mode, on EC2, on Hadoop YARN, on Mesos, or on Kubernetes. Access data in HDFS, Apache Cassandra, Apache HBase, Apache Hive, and hundreds of other data sources. 可以和许多数据源、平台结合使用

H2O

  • 用于分布式,可扩展的机器学习的内存平台
  • 与Hadoop和Spark等大数据技术无缝协作
  • 提供了许多流行算法的实现,例如GBM,随机森林,深度神经网络,Word2Vec和集成学习(Ensemble_learning)。
  • 是可扩展的,开发人员可以添加自己选择的数据转换和自定义算法

RankLib

  • 排序算法库( learning to rank algorithms),实现了八种常见的算法
    • MART (Multiple Additive Regression Trees, a.k.a. Gradient boosted regression tree) [6]
    • RankNet
    • RankBoost
    • AdaRank
    • Coordinate Ascent
    • LambdaMART
    • ListNet
    • Random Forests [8]
  • 还实现了许多检索指标,并提供了许多评估方法

你可能感兴趣的:(数据挖掘,python,数据挖掘,算法)