机器学习与数据挖掘(下)——期末复习

机器学习与数据挖掘(下)——期末复习

机器学习与数据挖掘(上)——期末复习

无监督学习

主成分分析(PCA)

降维

就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

降维具有如下一些优点:

  • 使得数据集更易使用。
  • 降低算法的计算开销。
  • 去除噪声。
  • 使得结果容易理解。

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。方差越大,则样本在该特征上的差异就越大,因此该特征就越重要。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

问题:如何得到这些包含最大差异性的主成分方向?
通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

基于特征值分解协方差矩阵实现PCA算法

输入:数据集 X = { x 1 , x 2 , … , x n } X=\{x_1,x_2,\ldots,x_n\} X={x1,x2,,xn},需要降到K维。

  1. 去平均值(即去中心化),即每一位特征减去各自的平均值。

  2. 计算协方差矩阵 1 n X X T \frac1nXX^T n1XXT,这里除或不除样本数量 n n n n − 1 n-1 n1,其实对求出的特征向量没有影响。

  3. 用特征值分解方法求协方差矩阵 1 n X X T \frac1nXX^T n1XXT的特征值与特征向量

  4. 对特征值从大到小排序,选择其中最大的 k k k个。然后将其对应的 k k k个特征向量分别作为行向量组成特征向量矩阵P。

  5. 将数据转换到k个特征向量构建的新空间中,即 Y = P X Y=PX Y=PX

基于SVD分解协方差矩阵实现PCA算法

输入:数据集 X = { x 1 , x 2 , … , x n } X=\{x_1,x_2,\ldots,x_n\} X={x1,x2,,xn},需要降到K维。

  1. 去平均值(即去中心化),即每一位特征减去各自的平均值。

  2. 计算协方差矩阵 1 n X X T \frac1nXX^T n1XXT,这里除或不除样本数量 n n n n − 1 n-1 n1,其实对求出的特征向量没有影响。

  3. 通过 S V D SVD SVD计算协方差矩阵的特征值与特征向量。

  4. 对特征值从大到小排序,选择其中最大的 k k k个。然后将其对应的 k k k个特征向量分别作为行向量组成特征向量矩阵P。

  5. 将数据转换到k个特征向量构建的新空间中,即 Y = P X Y=PX Y=PX

推导

假设 m m m n n n维数据 ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ) (x^{(1)},x^{(2)},...,x^{(m)}) (x(1),x(2),...,x(m))都已经进行了中心化,即 ∑ i = 1 m x ( i ) = 0 \sum_{i=1}^mx^{(i)}=0 i=1mx(i)=0。经过投影变换后得到的新坐标系为 { w 1 , w 2 , . . . , w n } \{w_1,w_2,...,w_n\} {w1,w2,...,wn},其中 w w w是标准正交基,即 ∥ w ∥ 2 = 1 , w i T w j = 0 \Vert w\Vert_2=1,w_i^Tw_j=0 w2=1,wiTwj=0

如果我们将数据从 n n n维降到 n ′ n' n维,即丢弃新坐标系中的部分坐标,则新的坐标系为 w 1 , w 2 , . . . , w n ′ {w_1,w_2,...,w_{n′}} w1,w2,...,wn,样本点 x ( i ) x^{(i)} x(i) n ′ n' n维坐标系中的投影为: z ( i ) = ( z 1 ( i ) , z 2 ( i ) , . . . , z n ′ ( i ) ) T z{^{(i)}}=(z^{(i)}_1,z^{(i)}_2,...,z^{(i)}_{n′})T z(i)=(z1(i),z2(i),...,zn(i))T.其中, z j ( i ) = w j T x ( i ) z^{(i)}_j=w^T_jx^{(i)} zj(i)=wjTx(i) x ( i ) x^{(i)} x(i)在低维坐标系里第 j j j维的坐标。

基于最小投影距离

即样本点到超平面的距离足够近。

如果我们用 z ( i ) z^{(i)} z(i)来恢复原始数据 x ( i ) x^{(i)} x(i),则得到的恢复数据 x ˉ ( i ) = ∑ j = 1 n ′ z j ( i ) w j = W z ( i ) \bar{x}^{(i)}=\sum_{j=1}^{n'}z^{(i)}_jw_j=Wz^{(i)} xˉ(i)=j=1nzj(i)wj=Wz(i),其中, W W W为标准正交基组成的矩阵。

现在我们考虑整个样本集,我们希望所有的样本到这个超平面的距离足够近,即最小化下式:
∑ i = 1 m ∥ x ˉ ( i ) − x ( i ) ∥ 2 2 \sum^m_{i=1}\Vert \bar{x}^{(i)}-x^{(i)}\Vert ^2_2 i=1mxˉ(i)x(i)22
对该式整理,可以得到:
∑ i = 1 m ∥ x ˉ ( i ) − x ( i ) ∥ 2 2 = ∑ i = 1 m ∥ W z ( i ) − x ( i ) ∥ 2 2 = ∑ i = 1 m ( W z ( i ) ) T ( W z ( i ) ) − 2 ∑ i = 1 m ( W z ( i ) ) T x ( i ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) − 2 ∑ i = 1 m ( z ( i ) ) T W T x ( i ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) − 2 ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = − ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = − t r ( W T ( ∑ i = 1 m ( x ( i ) ) ( x ( i ) ) ) T W ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = − t r ( W T X X T W ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) \begin{aligned} \sum^m_{i=1}\Vert \bar{x}^{(i)}-x^{(i)}\Vert ^2_2&=\sum^m_{i=1}\Vert Wz^{(i)}-x^{(i)}\Vert ^2_2\\ &= \sum^m_{i=1}(Wz^{(i)})^T(Wz^{(i)})-2\sum^m_{i=1}(Wz^{(i)})^Tx^{(i)}+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= \sum^m_{i=1}(z^{(i)})^T(z^{(i)})-2\sum^m_{i=1}(z^{(i)})^TW^Tx^{(i)}+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= \sum^m_{i=1}(z^{(i)})^T(z^{(i)})-2\sum^m_{i=1}(z^{(i)})^T(z^{(i)})+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= -\sum^m_{i=1}(z^{(i)})^T(z^{(i)})+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= -tr\left(W^T\left(\sum^m_{i=1}(x^{(i)})(x^{(i)})\right)^TW\right)+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= -tr\left(W^TXX^TW\right)+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ \end{aligned} i=1mxˉ(i)x(i)22=i=1mWz(i)x(i)22=i=1m(Wz(i))T(Wz(i))2i=1m(Wz(i))Tx(i)+i=1m(x(i))T(x(i))=i=1m(z(i))T(z(i))2i=1m(z(i))TWTx(i)+i=1m(x(i))T(x(i))=i=1m(z(i))T(z(i))2i=1m(z(i))T(z(i))+i=1m(x(i))T(x(i))=i=1m(z(i))T(z(i))+i=1m(x(i))T(x(i))=trWT(i=1m(x(i))(x(i)))TW+i=1m(x(i))T(x(i))=tr(WTXXTW)+i=1m(x(i))T(x(i))

其中第 ( 1 ) (1) (1)行用到了 x ˉ ( i ) = W z ( i ) \bar{x}^{(i)}=Wz^{(i)} xˉ(i)=Wz(i),第 ( 2 ) (2) (2)行用到了平方和展开,第 ( 3 ) (3) (3)行用到了矩阵转置公式 ( A B ) T = B T A T (AB)^T=B^TAT (AB)T=BTAT W T W = I W^TW=I WTW=I,第 ( 4 ) (4) (4)行用到了 z ( i ) = W T x ( i ) z^{(i)}=W^Tx^{(i)} z(i)=WTx(i),第 ( 5 ) (5) (5)行合并同类项,第 ( 6 ) (6) (6)行用到了 z ( i ) = W T x ( i ) z^{(i)}=W^Tx^{(i)} z(i)=WTx(i)和矩阵的迹,第 ( 7 ) (7) (7)行将代数和表达为矩阵形式。

注意到 ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) \sum^m_{i=1}(x^{(i)})^T(x^{(i)}) i=1m(x(i))T(x(i))是数据集的协方差矩阵,为常量,最小化上式等价于:
arg ⁡ min ⁡ W − t r ( W T X X T W ) s . t . W T W = I \underset{W}{\arg \min} -tr(W^TXX^TW) \qquad s.t.W^TW=I Wargmintr(WTXXTW)s.t.WTW=I
利用拉格朗日函数得到:
J ( W ) = − t r ( W T X X T W + λ ( W T W − I ) ) J(W)=-tr(W^TXX^TW+\lambda(W^TW-I)) J(W)=tr(WTXXTW+λ(WTWI))
W W W求导有 − X X T W + λ W = 0 -XX^TW+\lambda W=0 XXTW+λW=0,即
X X T W = λ W XX^TW=\lambda W XXTW=λW
这样可以更清楚的看出, W W W X X T XX^T XXT n ′ n' n个特征向量组成的矩阵,而 λ \lambda λ X X T XX^T XXT的若干特征值组成的矩阵,特征值在主对角线上,其余位置为0。当我们将数据集从 n n n维降到 n ′ n' n维时,需要找到最大的 n ′ n' n个特征值对应的特征向量。这 n ′ n' n个特征向量组成的矩阵 W W W即为我们需要的矩阵。对于原始数据集,我们只需要用 z ( i ) = W T x ( i ) z(i)=W^Tx^{(i)} z(i)=WTx(i),就可以把原始数据集降维到最小投影距离的 n ′ n' n维数据集。

基于最大投影方差

对于任意一个样本 x ( i ) x^{(i)} x(i),在新的坐标系中的投影为 W T x ( i ) W^Tx^{(i)} WTx(i),在新坐标系中的投影方差为 ( x ( i ) ) T W W T x ( i ) (x^{(i)})^TWW^Tx^{(i)} (x(i))TWWTx(i),要使所有的样本的投影方差和最大,也就是最大化 ∑ i = 1 m W T x ( i ) ( x ( i ) ) T W \sum_{i=1}^mW^Tx^{(i)}(x^{(i)})^TW i=1mWTx(i)(x(i))TW的迹,即:
arg ⁡ min ⁡ W t r ( W T X X T W ) s . t . W T W = I \underset{W}{\arg \min} tr(W^TXX^TW) \qquad s.t.W^TW=I Wargmintr(WTXXTW)s.t.WTW=I
观察基于最小投影距离的优化目标,可以发现完全一样,只是一个是加负号的最小化,一个是最大化。利用拉格朗日函数得到:
J ( W ) = t r ( W T X X T W + λ ( W T W − I ) ) J(W)=tr(W^TXX^TW+\lambda(W^TW-I)) J(W)=tr(WTXXTW+λ(WTWI))
W W W求导有 X X T W + λ W = 0 XX^TW+\lambda W=0 XXTW+λW=0,即
X X T W = ( − λ ) W XX^TW=(-\lambda) W XXTW=(λ)W
W W W X X T XX^T XXT n ′ n' n个特征向量组成的矩阵,而 − λ -\lambda λ X X T XX^T XXT的若干特征值组成的矩阵,特征值在主对角线上,其余位置为0。当我们将数据集从 n n n维降到 n ′ n' n维时,需要找到最大的 n ′ n' n个特征值对应的特征向量。这 n ′ n' n个特征向量组成的矩阵 W W W即为我们需要的矩阵。对于原始数据集,我们只需要用 z ( i ) = W T x ( i ) z(i)=W^Tx^{(i)} z(i)=WTx(i),就可以把原始数据集降维到最小投影距离的 n ′ n' n维数据集。

基于奇异值分解
奇异值分解公式中 A = U Σ V T A=U\Sigma V^T A=UΣVT V T V^T VT正是我们想要的所有主成分,每个主成分轴对数据集方差的贡献度是依次减少的,对应特征值对角矩阵 Σ \Sigma Σ也是从左上到右下依次减少的。奇异值转换的目的,正是将这些绝大部分信息由靠前的i个主成分轴提供,而越往后所提供的信息越少,从而方便降维。

如欲降维,只需保留前 d d d列主成分,而将后 ( n − d ) (n-d) (nd)列删去即可,还可以保证大部分信息不被删去,这是奇异值转换之前不能达到的。

K-Means聚类

概述

KMEANS算法又被成为K均值算法,是一种常用的聚类算法,由于不需要根据给定的训练集训练模型因此是一种无监督学习算法。其本质是根据选定的参数K将数据分类成K类,在聚类过程中从单一样本开始通过不断计算聚类数据的均值来作为整个类的中心进而再将距离此类别中心最近的数据纳入同一类。

通常用作探索性数据分析工具,在一维中,将重估变量量化为k个非均匀桶的好方法,用于语音理解中的声学数据,将波形转换为k类中的一种(称为矢量量化),还用于在老式图形显示设备上选择调色板。

算法原理

1、首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。

2、从数据集中随机选择k个数据点作为质心。

3、对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。

4、把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。

5、如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。

6、如果新质心和原质心距离变化很大,需要迭代3~5步骤。

优化目标
min ⁡ ∑ i = 1 K ∑ x ∈ C i ( C i − x ) 2 \min\sum^K_{i=1}\sum_{x\in C_i}(C_i-x)^2 mini=1KxCi(Cix)2

注:K是中心点,即簇数目; C i C_i Ci表示每个簇内的中心点, x x x属于每个簇内的样本点;我们的目的是优化每个簇的点使得它到样本中心点的距离是最短的。

求上式的偏导数,使其为0:
C i = 1 ∣ O w n e d B y ( C i ) ∣ C_i=\frac1{\vert OwnedBy(C_i)\vert} Ci=OwnedBy(Ci)1
也即每个中心是它所拥有的点的质心。

算法性能评估指标
轮廓系数:
S C i = b i − a i max ⁡ ( b i , a i ) SC_i=\frac{b_i-a_i}{\max(b_i,a_i)} SCi=max(bi,ai)biai

对于每个点 i i i为已聚类数据中的样本, b i b_i bi i i i到其他簇群的所有样本的距离最小值, a i a_i ai i i i到本身簇的距离平均值,最终计算出所有的样本点的轮廓系数平均值。

S C i SC_i SCi越接近1,说明样本 i i i聚类合理, S C i SC_i SCi接近-1,则说明样本 i i i更应该分类到另外的簇,若接近0,则说明样本 i i i在两个簇的边界上。

优缺点

  • 优点
    1、原理简单(靠近中心点) ,实现容易,收敛速度快

    2、聚类效果中上(依赖K的选择)

    3、空间复杂度 o ( N ) o(N) o(N)时间复杂度 o ( I K N ) o(IKN) o(IKN),N为样本点个数,K为中心点个数,I为迭代次数)

  • 缺点

    1、对离群点, 噪声敏感 (中心点易偏移)

    2、很难发现大小差别很大的簇及进行增量计算

    3、结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)

    4、K值需要预先给定,很多情况下K值的估计是非常困难的。

    5、对初始选取的质心点是敏感的

K值的选择

肘部法则适用于 K 值相对较小的情况,当选择的k值小于真正的时,k每增加1,cost值就会大幅的减小;当选择的k值大于真正的K时, k每增加1,cost值的变化就不会那么明显。这样,正确的k值就会在这个转折点。

KNN与K-means区别

KNN K-Means
1. KNN是分类算法
2. 属于监督学习
3. 训练数据集是带label的数据
1. K-Means是聚类算法
2. 属于无监督学习
3. 训练数据集是无label数据,杂乱的,经过聚类之后变有序
没有明显的前期训练过程,属于memory based learning 有明显的前期训练过程
K的含义:一个样本x,对它进行分类,就从训练数据中,在x附近找到离它最近的K个数据点,这K个数据点中类别c占的个数最多,就把x的label设为c。 K的含义:K是人工固定好的数字,假设数据集合可以分为K个簇,那么就利用训练数据这K个分类。

层次聚类方法

聚类方法 两类之间的距离定义
单联动 一个类中的点和另一个类中的点的最小距离
全联动 一个类中的点和另一个类中的点的最大距离
平均联动 一个类中的点和另一个类中的点的平均距离
质心 两类中质心之间的距离,对于单个观测值来说,质心就是变量的值
Ward法 两个类之间所有变量的方差分析的平方和
  • 单联动聚类方法倾向于发现细长的、雪茄型的类。它也通常展示一种链式的现象,即不相似的观测值分到一类中,因为它们和它们的中间值很相像。
  • 全联动聚类倾向于发现大致相等的直径紧凑类。它对异常值很敏感。
  • 平均联动提供了以上两种方法的折中。相对来说,它不像链式,而且对异常值没有那么敏感。它倾向于把方差小的类聚合。
  • 质心法是一种很受欢迎的方法,因为其中类距离的定义比较简单、易于理解。相比其他方法,它对异常值不是很敏感。但是它可能不如平均联动法或Ward方法表现得好。
  • Ward法倾向于把有少量观测值的类聚合到一起,并且倾向于产生与观测值个数大致相等的类。它对异常值也是敏感的。

EM算法

EM 算法,全称 Expectation Maximization Algorithm。期望最大算法是一种迭代算法,用于含有隐变量(Hidden Variable)的概率参数模型的最大似然估计或极大后验概率估计。

EM 算法的核心思想非常简单,分为两步:Expection-Step 和 Maximization-Step。E-Step 主要通过观察数据和现有模型来估计参数,然后用这个估计的参数值来计算似然函数的期望值;而 M-Step 是寻找似然函数最大化时对应的参数。由于算法会保证在每次迭代之后似然函数都会增加,所以函数最终会收敛。

Jensen不等式

如果 f f f是凸函数, X X X是随机变量,那么: E ( f ( X ) ) ≥ f ( E ( X ) ) E(f(X))\ge f(E(X)) E(f(X))f(E(X)) 。当且仅当 X X X是常量时,该式取等号。其中, E ( X ) E(X) E(X)表示 X X X的数学期望。

推导流程

对于n个样本观察数据 x = ( x 1 , x 2 , … , x n ) x=(x_1,x_2,\ldots,x_n) x=(x1,x2,,xn),找出样本的参数 θ \theta θ,极大化模型分布的对数似然如下:
θ ^ = arg max ⁡ ∑ i = 1 n log ⁡ p ( x i ; θ ) \hat{\theta}=\argmax \sum^n_{i=1}\log p(x_i;\theta) θ^=argmaxi=1nlogp(xi;θ)
如果我们得到的观察数据有未观察到的隐含数据 z = ( z 1 , z 2 , … , z n ) z=(z_1,z_2,\ldots,z_n) z=(z1,z2,,zn),即上文中每个样本属于哪个分布是未知的,此时我们极大化模型分布的对数似然函数如下:
θ ^ = arg max ⁡ ∑ i = 1 n log ⁡ p ( x i ; θ ) = arg max ⁡ ∑ i = 1 n log ⁡ ∑ z i p ( x i , z i ; θ ) \hat{\theta}=\argmax \sum^n_{i=1}\log p(x_i;\theta)=\argmax \sum^n_{i=1}\log \sum_{z_i} p(x_i,z_i;\theta) θ^=argmaxi=1nlogp(xi;θ)=argmaxi=1nlogzip(xi,zi;θ)
上面这个式子是根据 x i x_i xi的边缘概率计算得来,没有办法直接求出 θ \theta θ。因此需要一些特殊的技巧,使用Jensen不等式对这个式子进行缩放如下:
∑ i = 1 n log ⁡ ∑ z i p ( x i , z i ; θ ) = ∑ i = 1 n log ⁡ ∑ z i Q i ( z i ) p ( x i , z i ; θ ) Q i ( z i ) ≥ ∑ i = 1 n ∑ z i Q i ( z i ) log ⁡ p ( x i , z i ; θ ) Q i ( z i ) \begin{aligned} \sum^n_{i=1}\log \sum_{z_i} p(x_i,z_i;\theta)&=\sum^n_{i=1}\log \sum_{z_i} Q_i(z_i)\frac{p(x_i,z_i;\theta)}{Q_i(z_i)}\\&\ge \sum^n_{i=1}\sum_{z_i} Q_i(z_i)\log \frac{p(x_i,z_i;\theta)}{Q_i(z_i)} \end{aligned} i=1nlogzip(xi,zi;θ)=i=1nlogziQi(zi)Qi(zi)p(xi,zi;θ)i=1nziQi(zi)logQi(zi)p(xi,zi;θ)
如果要满足Jensen不等式的等号,则有:
p ( x i , z i ; θ ) Q i ( z i ) = c c 为 常 数 \frac{p(x_i,z_i;\theta)}{Q_i(z_i)}=c\qquad c为常数 Qi(zi)p(xi,zi;θ)=cc
由于 Q i ( z i ) Q_i(z_i) Qi(zi)是一个分布,所以满足 ∑ z Q i ( z i ) = 1 \sum_{z}Q_i(z_i)=1 zQi(zi)=1,则 ∑ z p ( x i , z i ; θ ) = c \sum_zp(x_i,z_i;\theta)=c zp(xi,zi;θ)=c
Q i ( z i ) = p ( x i , z i ; θ ) ∑ z p ( x i , z i ; θ ) = p ( x i , z i ; θ ) p ( x i , θ ) = p ( z i ∣ x i ; θ ) Q_i(z_i)=\frac{p(x_i,z_i;\theta)}{\sum_zp(x_i,z_i;\theta)}=\frac{p(x_i,z_i;\theta)}{p(x_i,\theta)}=p(z_i|x_i;\theta) Qi(zi)=zp(xi,zi;θ)p(xi,zi;θ)=p(xi,θ)p(xi,zi;θ)=p(zixi;θ)
至此,我们推出了在固定其他参数 θ \theta θ后, Q i ( z i ) Q_i(z_i) Qi(zi)的计算公式就是后验概率,解决了 Q i ( z i ) Q_i(z_i) Qi(zi)的问题。

如果 Q i ( z i ) = p ( z i ∣ x i ; θ ) Q_i(z_i)=p(z_i|x_i;\theta) Qi(zi)=p(zixi;θ),则使用Jensen得到的公式是我们包含隐藏数据的对数似然函数的一个下界。如果我们能该式这个下界,则也是在极大化我们的对数似然函数。即我们需要最大化下式:
arg max ⁡ ∑ i = 1 n ∑ z i Q i ( z i ) log ⁡ p ( x i , z i ; θ ) Q i ( z i ) \argmax \sum^n_{i=1}\sum_{z_i} Q_i(z_i)\log \frac{p(x_i,z_i;\theta)}{Q_i(z_i)} argmaxi=1nziQi(zi)logQi(zi)p(xi,zi;θ)
上式也就是我们的EM算法的 M M M步,解决了 Q i ( z i ) Q_i(z_i) Qi(zi)如何选择的问题,这一步就是 E E E

算法

输入:观测变量数据 Y Y Y,隐变量数据 Z Z Z,联合分布 P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Zθ),条件分布 P ( Z ∣ Y , θ ) P(Z|Y,\theta) P(ZY,θ)

输出:模型参数 θ \theta θ

  1. 选择参数的初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;

  2. E E E步:记 θ ( j ) \theta^{(j)} θ(j)维第 i i i次迭代参数 θ \theta θ的估计值,在第 j + 1 j+1 j+1次迭代的 E E E步,计算
    Q i ( z i ) = p ( z i ∣ x i , θ ( j ) ) ℓ ( θ , θ ( j ) ) = ∑ i = 1 n ∑ z i Q i ( z i ) log ⁡ p ( x i , z i ; θ ) Q i ( z i ) \begin{aligned} Q_i(z_i)&=p(z_i|x_i,\theta^{(j)})\\ \ell(\theta,\theta^{(j)})&=\sum^n_{i=1}\sum_{z_i} Q_i(z_i)\log \frac{p(x_i,z_i;\theta)}{Q_i(z_i)} \end{aligned} Qi(zi)(θ,θ(j))=p(zixi,θ(j))=i=1nziQi(zi)logQi(zi)p(xi,zi;θ)

  3. M M M步:求使 ℓ ( θ , θ ( j ) ) \ell(\theta,\theta^{(j)}) (θ,θ(j))极大化的 θ \theta θ , 确定第 j + 1 j+1 j+1次迭代的参数的估计值 θ ( j + 1 ) \theta^{(j+1)} θ(j+1)
    θ ( j + 1 ) = arg max ⁡ θ ℓ ( θ , θ ( j ) ) \theta^{(j+1)}=\underset{\theta}{\argmax} \quad \ell(\theta,\theta^{(j)}) θ(j+1)=θargmax(θ,θ(j))

  4. 重复第 (2) 步和第 (3) 步,直到收敛。

传统EM算法对初始值敏感,聚类结果随不同的初始值而波动较大。总的来说,EM算法收敛的优劣很大程度上取决于其初始参数。

EM算法可以保证收敛到一个稳定点,即EM算法是一定收敛的。但是却不能保证收敛到全局的极大值点,因此它是局部最优的算法,当然,如果我们的优化目标 ℓ ( θ , θ ( l ) ) \ell(\theta,\theta^{(l)}) (θ,θ(l))是凸的,则EM算法可以保证收敛到全局最大值,这点和梯度下降法这样的迭代算法相同。

高斯混合聚类

高斯混合模型是一种概率式的聚类方法,它假定所有的数据样本 x x x k k k个混合多元高斯分布组成的混合分布生成。
p ( x ) = ∑ i = 1 k α i × p ( x ∣ μ i , Σ i ) p(x)=\sum^k_{i=1}\alpha_i\times p(x|\mu_i,\Sigma_i) p(x)=i=1kαi×p(xμi,Σi)
其中 p ( x ∣ μ i , Σ i ) p(x|\mu_i,\Sigma_i) p(xμi,Σi)为服从高斯分布的 n n n维随机向量 x x x的概率密度函数:
p ( x ∣ μ i , Σ i ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ i ) T Σ i − 1 ( x − μ i ) p(x|\mu_i,\Sigma_i)=\frac{1}{(2\pi)^\frac{n}{2}\vert\Sigma|^\frac12}e^{-\frac12(x-\mu_i)^T\Sigma^{-1}_i(x-\mu_i)} p(xμi,Σi)=(2π)2nΣ211e21(xμi)TΣi1(xμi)
其中 μ \mu μ n n n维均值向量, Σ \Sigma Σ n × n n\times n n×n的协方差矩阵, α i > 0 \alpha_i>0 αi>0为相应的混合系数, ∑ i = 1 k α i = 1 \sum^k_{i=1}\alpha_i=1 i=1kαi=1

利用GMM进行聚类的过程是利用GMM生成数据样本的“逆过程”:

给定聚类簇数 k k k,通过给定的数据集,以某一种参数估计的方法,推导出每一个混合成分的参数:均值向量 μ \mu μ,协方差矩阵 Σ \Sigma Σ,和混合系数 α \alpha α。每一个多元高斯分布成分即对应于聚类后的一个簇。

高斯混合模型在训练时使用了极大似然估计法,最大化以下对数似然函数:
L = log ⁡ ∏ j = 1 m p ( x ) = ∑ j = 1 m log ⁡ ∑ i = 1 k α i × p ( x ∣ μ i , Σ i ) L=\log \prod_{j=1}^{m}p(x)=\sum^m_{j=1}\log \sum^k_{i=1}\alpha_i\times p(x|\mu_i,\Sigma_i) L=logj=1mp(x)=j=1mlogi=1kαi×p(xμi,Σi)
若参数 { ( α i , μ i , Σ i ) ∣ ( 1 ≤ i ≤ k ) } \{(\alpha_i,\mu_i,\Sigma_i)|(1\le i\le k)\} {(αi,μi,Σi)(1ik)}能使对数似然函数最大化,则由 ∂ L ∂ μ i = 0 \frac{\partial L}{\partial \mu_i}=0 μiL=0
∑ j = 1 m α i ⋅ p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ i ) ( x j − μ i ) = 0 \sum^m_{j=1}\frac{\alpha_i\cdot p(x_j|\mu_i,\Sigma_i)}{\sum^k_{l=1}\alpha_l\cdot p(x_j|\mu_l,\Sigma_i)}(x_j-\mu_i)=0 j=1ml=1kαlp(xjμl,Σi)αip(xjμi,Σi)(xjμi)=0

γ j i = α i ⋅ p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ i ) \gamma_{ji}=\frac{\alpha_i\cdot p(x_j|\mu_i,\Sigma_i)}{\sum^k_{l=1}\alpha_l\cdot p(x_j|\mu_l,\Sigma_i)} γji=l=1kαlp(xjμl,Σi)αip(xjμi,Σi)
表示样本 x j x_j xj和由第 i i i个混合成分生成的后验概率。则
μ i = ∑ j = 1 m ( γ j i ⋅ x j ) ∑ j = 1 m γ j i \mu_i=\frac{\sum^m_{j=1}(\gamma_{ji\cdot x_j})}{\sum^m_{j=1}\gamma_{ji}} μi=j=1mγjij=1m(γjixj)
即各混合成分的均值可通过样本加权平均来估计,样本权重是每个样本属于该成分的后验概率。

类似的,由 ∂ L ∂ Σ i = 0 \frac{\partial L}{\partial \Sigma_i}=0 ΣiL=0
Σ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i \Sigma_i=\frac{\sum^m_{j=1}\gamma_{ji}(x_j-\mu_i)(x_j-\mu_i)^T}{\sum^m_{j=1}\gamma_{ji}} Σi=j=1mγjij=1mγji(xjμi)(xjμi)T
对于混合系数 α i \alpha_i αi除了要最大化对数似然函数,还需满足 α i ≥ 0 , ∑ i = 1 k α i = 1 \alpha_i\ge0,\sum^k_{i=1}\alpha_i=1 αi0,i=1kαi=1,考虑 L L L的拉格朗日形式
L + λ ( ∑ i = 1 k α i − 1 ) L+\lambda(\sum^k_{i=1}\alpha_i-1) L+λ(i=1kαi1)
其中 λ \lambda λ为拉格朗日乘子,令上式对 α i \alpha_i αi的导数为0,有
∑ j = 1 m p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ l ) + λ = 0 \sum^m_{j=1}\frac{p(x_j|\mu_i,\Sigma_i)}{\sum^k_{l=1}\alpha_l\cdot p(x_j|\mu_l,\Sigma_l)}+\lambda=0 j=1ml=1kαlp(xjμl,Σl)p(xjμi,Σi)+λ=0
两边同时乘以 α i \alpha_i αi,对所有样本求和可知 λ = − m \lambda=-m λ=m,有
α i = 1 m ∑ j = 1 m γ j i \alpha_i=\frac1m\sum^m_{j=1}\gamma_{ji} αi=m1j=1mγji
优缺点

  • 优点
    投影后样本点不是得到一个确定的分类标记,而是得到每个类的概率
    不仅可以用在聚类上,也可以用在概率密度估计上

  • 缺点

    当每个混合模型没有足够多的点时,估算协方差变得困难起来,同时算法会发散并且找具有无穷大似然函数值的解,除非人为地对协方差进行正则化。
    GMM每一步迭代的计算量比较大,大于k-means
    GMM的求解办法基于EM算法,因此有可能陷入局部极值,这和初始值的选取十分相关

推荐系统

推荐系统是一种帮助用户发现感兴趣的信息的方式,在推荐系统出现之前,传统的通过直接展现信息、搜索、分类来发现信息的方式都有一定的短板和局限。

推荐系统主要有两个局限,第一是需要信息量过载,如果信息量很少直接展现信息就可以了,就不需要推荐系统了;第二是需要用户没有明确目的,因为用户如果有明确目的直接通过搜索或分类来找到信息就可以了,也不需要推荐系统。

协同过滤

  • 基于用户的协同过滤
    基于用户的协同过滤推荐算法先使用统计技术寻找与目标用户有相同喜好的“邻居”,然后根据目标用户的邻居的行为,向目标用户进行推荐。基本原理就是利用用户访问行为的相似性来互相推荐用户可能感兴趣的资源。在一般应用中采用计算“k近邻”,然后基于这K个邻居的历史偏好信息,为当前用户进行推荐。
    实现的时候一般还是将问题分解为三步:计算用户之间的相似度;根据用户的相似度和用户的历史行为填补User-Item评分矩阵;根据评分矩阵进行推荐(选高分)。

  • 基于物品的协同过滤
    给用户推荐那些和他们之前喜欢的物品相似的物品。
    实现的时候主要分为三步:计算物品之间的相似度;根据物品的相似度和用户的历史行为填补User-Item评分矩阵;根据评分矩阵进行推荐(选高分)。

  • 基于模型的协同过滤

    ItemCF和UserCF可以被归为基于记忆的模型,即依赖简单的相似性度量(比如余弦相似性、皮尔森相关系数等)来把相似的用户或物品匹配起来。如果有一个矩阵,那么其中每一行是一个用户,每一列代表一个物品,那么基于记忆的方法就是对这一矩阵的行或列使用相似性度量来获得一个相似度值,进而推荐。

    们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

    对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型等来解决。

    基于记忆的CF利用简单的相似性度量,以及线性加权组合进行填补。而基于模型的CF则利用各种更复杂的模型或方法,对UI矩阵进行填补,比如矩阵分解、隐向量的思想(隐语义模型)、SVD、SVD++等。

基于内容的推荐

它根据用户过去喜欢的产品(本文统称为 item),为用户推荐和他过去喜欢的产品相似的产品。例如,一个推荐饭店的系统可以依据某个用户之前喜欢很多的烤肉店而为他推荐烤肉店。 CB最早主要是应用在信息检索系统当中,所以很多信息检索及信息过滤里的方法都能用于CB中。

CB的过程一般包括以下三步:

  • 项目表示:为每个item抽取出一些特征(也就是item的content了)来表示此item;

  • 特征学习:利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);

  • 推荐生产:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item。

  • 利用TF-IDF将文本信息转化为特征向量

    • TF-IDF是一种统计方法,用来评估某个字词对于一个文件集或一个语料库中的其中的一份文件的重要程度。如果某个字词在文件中出现的次数越多,该词的重要性越大。
    • 主要思想:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此单词具有很好的类别区分能力,适合用来分类
    • **词频(TF)**表示词条(关键字)在文本中出现的频率。通常要被归一化,以防止偏向长的文件。即: T F w = n i , j ∑ k n k , j TF_w=\frac{n_{i,j}}{\sum_k{n_{k,j}}} TFw=knk,jni,j(其中 n i , j n_{i,j} ni,j是该词在该文件 d j d_j dj出现的次数,分母则是文件 d j dj dj中所有词汇出现的次数总和)
    • 逆向文件频率 (IDF) 可以由总文件数除以包含该词语的文件总数,再将得到的商取对数得到。即: i d f i = log ⁡ ∣ D ∣ ∣ { j : t i ∈ d i } ∣ idf_i = \log\frac{|D|}{|\{j:t_i\in d_i\}|} idfi=log{j:tidi}D。其中 ∣ D ∣ |D| D是语料库中的文件总数, ∣ { j : t i ∈ d i } ∣ |\{j:t_i\in d_i\}| {j:tidi}包含词语 t i t_i ti的文件数目。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1 + ∣ j : t i ∈ d j ∣ 1+|{j:t_i \in d_j}| 1+j:tidj,也就是 i d f i = log ⁡ ∣ D ∣ 1 + ∣ { j : t i ∈ d i } ∣ idf_i = \log\frac{|D|}{1+|\{j:t_i\in d_i\}|} idfi=log1+{j:tidi}D
    • TF-IDF实际上就是TF*IDF,某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。

基于知识的推荐

如果说CB和CF像通用搜索引擎的话,KB好比某个领域的垂直搜索引擎,可以提供该领域的特殊需求,包括专业性的优质特征,帮助提高搜索引擎在特定领域的服务。

基于知识的推荐,也更容易满足主观个性化需求。
利用物品的参数特征等属性形成约束知识,再将用户对物品的特定刻画为约束条件,然后经过对物品集合的约束满足问题的求解,就可以得到用户所期望的物品

基于矩阵分解的推荐系统

矩阵因子分解的基本形式是通过从项目评分推断出的因子向量来表征项目和用户。对项目因子和用户因子的高相关性促成了推荐。这些方法结合了良好的可扩展性和预测精度,为建模各种现实情况提供了很大的灵活性。

矩阵因子分解的一个优点是它允许合并额外的信息。在没有显式反馈的情况下,推荐系统可以通过隐式反馈推断用户的偏好,通过观察用户的购买历史、浏览历史、搜索模式甚至鼠标移动等行为,间接反映用户的意见。隐式反馈通常表示事件的存在或不存在,因此通常用密集填充的矩阵表示。
M k = U k Σ V k T M_k=U_k\Sigma V_k^T Mk=UkΣVkT
机器学习与数据挖掘(下)——期末复习_第1张图片

混合推荐系统

混合推荐算法就是利用两种或者两种以上推荐算法来配合,克服单个算法存在的问题,期望更好地提升推荐的效果。

  • 单体的(Monolithic)混合范式
    单体的混合范式整合多种推荐算法到同一个算法体系中,由这个整合的推荐算法统一提供推荐服务。

机器学习与数据挖掘(下)——期末复习_第2张图片

  • 特征组合(Feature Combination)混合
    特征组合利用多个推荐算法的特征数据来作为原始输入,利用其中一个算法作为主算法最终生成推荐结果。

  • 特征增强(Feature Augmentation)混合
    特征增强会利用更加复杂的处理和变换,第一个算法可能事先预处理第二个算法依赖的数据,生成中间可用的特征或者数据(中间态),再供第二个算法使用最终生成推荐结果。

  • 并行的(Parallelized)混合范式
    并行的混合范式利用多个独立的推荐算法,每个推荐算法产生各自的推荐结果,在混合阶段将这些推荐结果融合起来,生成最终的推荐结果
    机器学习与数据挖掘(下)——期末复习_第3张图片

    并行混合范式利用多个推荐算法密切配合,利用特殊的混合机制聚合各个算法的结果,根据混合方案的不同主要有如下3中具体的实现方式。

    • 掺杂(Mixed)混合
      掺杂方法将多个推荐算法的结果混合起来,最终推荐给某个用户,见下面公式,其中,k是第k个推荐算法。
      r e c m i x e d ( u ) = ∪ i = 1 n r e c k ( u ) rec_{mixed}(u)=\overset{n}{\underset{i=1}{\cup}}rec_{k}(u) recmixed(u)=i=1nreck(u)
      上面公式只是给出了为用户推荐的标的物列表,不同的算法可能会推荐一样的,需要去重,另外这些标的物需要先排序再最终展示给用户,一般不同算法的排序逻辑不一样,直接按照不同算法的得分进行粗暴排序往往存在问题。可以将不同的算法预测的得分统一到可比较的范围(比如可以先将每个算法的得分归一化到0-1之间),再根据归一化后的得分大小来排序。还可以通过另外一个算法来单独进行排序。

    • 加权(Weighted)混合
      加权方法利用多个推荐算法的推荐结果,通过加权来获得每个推荐候选标的物的加权得分,最终来排序。这里同样要保证不同的推荐算法输出的得分要在同一个范围,否则加权是没有意义的。

    • 分支(Switching)混合
      分支混合根据某个判别规则来决定在某种情况发生时,利用某个推荐算法的推荐结果。分支条件可以是与用户状态相关的,也可以是跟上下文相关的。

评测指标

评测指标是用来评价一个系统性能好坏的函数,可以分为对于算法复杂度的度量以及算法准确性的度量。算法复杂度主要考虑算法实现的空间以及时间复杂度,当然算法复杂度同样重要,但这里主要讨论算法的准确性度量指标。

推荐系统根据推荐任务的不同通常分为两类:评分预测Top-N列表推荐。在这里主要根据这两者来分别讨论评测指标。

  • 评分预测任务
    预测特定用户对于没有产生过行为的物品能够打多少分。评分预测一般通过均方根误差(RMSE)和平均绝对误差(MAE)来计算。对于测试集中的用户 u u u和项目 i i i r u i r_{ui} rui是用户 u u u对项目 i i i的真实评分, r ^ u i \hat{r}_{ui} r^ui是推荐算法预测出的评分,那么RMSE:
    R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ RMSE=\frac{\sqrt{\sum_{u,i\in T}(r_{ui}-\hat{r}_{ui})^2}}{\vert T\vert} RMSE=Tu,iT(ruir^ui)2
    MAE为:
    M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ MAE=\frac{\sum_{u,i\in T}\vert r_{ui}-\hat{r}_{ui}\vert}{\vert T\vert} MAE=Tu,iTruir^ui

  • Top-N列表推荐
    评分预测只能适用于小部分的场景,比如对于电影,书籍的评分,其实Top-N推荐更加符合现在的需求,给用户提供一个推荐的列表让其进行选择。Top-N推荐一般通过准确率与召回率来进行衡量。其中令 R ( u ) R(u) R(u)是根据用户在训练集上的行为给用户作出的推荐列表(指的是预测的推荐列表),而 T ( u ) T(u) T(u)是用户在测试集上的行为列表(指的是真实的列表GroundTruth)。

    准确率的意义在于所预测的推荐列表中有多少是用户真是感兴趣的,即预测列表的准确率,那么准确率的定义为:
    P r e c i s i o n = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ R ( u ) ∣ Precision=\frac{\sum_{u\in U}\vert R(u)\cap T(u)\vert}{\sum_{u\in U}\vert R(u)\vert} Precision=uUR(u)uUR(u)T(u)
    召回率的意义在于真正用户感兴趣的列表中有多少是被推荐算法准确预测出来的,即真实列表的召回率,那么召回率的定义为:
    R e c a l l = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ T ( u ) ∣ Recall=\frac{\sum_{u\in U}\vert R(u)\cap T(u)\vert}{\sum_{u\in U}\vert T(u)\vert} Recall=uUT(u)uUR(u)T(u)
    两个评测指标从不同的方面来衡量推荐系统的好坏,两者呈现一个负相关的状态,即准确率高的情况下召回率往往会比较低,反之亦然。所以人们又提出了一个结合了准确率与召回率的评测指标F1值,可以更加方便的观察推荐系统的好坏,公式如下:
    F 1 = 2 P R P + R F_1=\frac{2PR}{P+R} F1=P+R2PR
    混淆矩阵

    预测为正 预测为反
    真实为正 TP(预测正确的正例) FN(预测错误的反例)
    真实为反 FP(预测错误的正例) TN(预测正确的反例)

    冷启动问题
    对于一个新用户,或者一个新物品,因为没有相关的喜好数据,无法作出推荐。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统。

    解决办法

    • 提供非个性化的推荐
    • 利用用户注册信息
      用户注册时提供包括用户的年龄、性别、职业、民族、学历和居住地等数据,做粗粒度的个性化。有一些网站还会让用户用文字描述他们的兴趣。
    • 利用社交网络信息
      引导用户通过社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品。
    • 利用用户反馈信息
      要求用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品。
    • 利用物品的信息内容
      将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户,解决了如何将新加入的物品推荐给对它感兴趣的用户的问题。不过当新物品加入时,内存中的物品相关表中不会存在这个物品,从而无法推荐新的物品。解决这一问题的办法是频繁更新物品相似度表。

数据稀疏问题
用户平均浏览的商品数量比较小,商品类别特别多,会使U_I矩阵中只有少部分是有值的,而绝大部分为空。

【参考博文】

主成分分析(PCA)原理详解

机器学习算法—KMEANS算法原理

K-means聚类算法

聚类算法,k-means,高斯混合模型(GMM)

EM算法详解

[聚类四原型聚类]之高斯混合模型聚类

推荐系统原理

推荐系统:协同过滤CF和基于内容的推荐CB

推荐系统从入门到接着入门

混合推荐系统介绍

主成分分析(PCA)原理总结 - 刘建平Pinard - 博客园 (cnblogs.com)

机器学习(六):K-means聚类原理及案例分析 - 简书 (jianshu.com)

无监督机器学习-聚类分析 - 知乎 (zhihu.com)

你可能感兴趣的:(数据挖掘,机器学习,人工智能)