机器学习- ML-KNN算法实现多标签问题的聚类

ML_KNN

需要的数学定义:

  • m为样本总个数;
  • K为最邻近的个数;
  • Y为所有标签的集合,总个数为 n;
  • l 为具体的一个标签,默认为标签 1;
  • X 为一个实例;
  • Y x 为实例 X所对应的标签集合;
    Y x 是实例x 的标签向量,是1*n的one-hot行向量,元素所对应的标签若为1,则该实例有标签;
    N(x) 为实例x的k个最邻近的个体。
    然后可以得到输入的实例的所对应的K个邻居的标签信息:
    C x ( l ) = Y X n   X n ϵ N ( x )
    其中 C x ( l ) 是一个 1*n 的向量,每一元素指对于该标签,X实例的K个邻居中有多少个拥有这个标签。

具体操作

对于一个实例X,首先得到它的K个邻居的集合 N(x),定义 H 1 l 为对于一个实例有便签l, H 0 l 为实例没有标签l。则可以建立两个m*n 01矩阵,其中每一行为一个样本,每一行的元素为one-hot为每个标签的有无。

定义事件 E j l ( j ϵ ( 0 , 1... k ) ) 为对于标签 l,K个邻居中包换j个这个标签,则 E为一个 k*n 的矩阵,每一行为距离该实例的样本中每个标签的数量,则[C_{x}(l)]向量是E矩阵的最后一行,表示距离为K时的各个标签数量。

则我们需要的是在已知E矩阵的前提下求得每个标签是否存在的最大概率

y x = a r g m a x P ( H b l | E C x ( l ) l ) ( b ϵ ( 0 , 1 ) )

通过贝叶斯公式可以得到 y x = a r g m a x   P ( E C x ( l ) l | H b l ) P ( H b l ) ( b ϵ ( 0 , 1 ) )

其中 [P(H_b^l)] 代表实例是否具有标签l 的先验概率,可以用标签l 在整体数据上的出现次数得到:

P ( H 1 l ) = i = 1 m Y x i m
用标签l存在的数量除以总数量。

后验概率:

P ( E C t l l | H B l ) = c [ j ] p = 0 k c [ p ]

其中从c[j]中的 C t l ,即实例的距离为K时有标签的数量。

c[]的意思时: 若[x_n] 的K’邻居内有 α 个标签[l],那么c[ α ] +1 ( x n 为全部个体)

表示为计算总体样本内对于每一个个体都进行一边计算,对于一个标签是一个1*K的向量,每一个元素是整体数据中 如果对于这个个体自己本身有这个标签并且在距离为[{K}’]内有 α 个个体有这个标签,那么就在这个向量的第[{K}’]个元素加1,[{K}’]从0到K

c[j]表示的就是所有向量中,K邻居内有j个元素并且自己有该标签。(后验概率的后验就在这个J,因为对于每个标签c[]向量时和整体有关)

p = 0 k c [ p ] 为对于该标签 距离从0到K所有的带标签并且自己有标签的数量总和,那么我们要求的是距离为K时有 α 个的情况。从后验概率的方面考虑,我们认为对于一个个体的一个标签,对他造成影响的时距离为K以为的K个个体,那么我们已经知道了在不同距离上有标签的数量对于个体标签的影响(如果距离越近有标签的数量越多那么可以认为距离对标签时正相关),c[p]为K以内的对于个体标签有影响的所有情况,我们要的时K时所占的比例。
计算出后验概率以后,我们只需看b={0,1}中哪种情况使得这个乘积值最大,若B=1时最大则有标签,反之则没有。

猜你喜欢

转载自blog.csdn.net/qq_22235017/article/details/80513534