A Review on Multi-Label Learning Algorithms - KNN

原创 2016年08月29日 20:52:04

在多标签分类中,有一种方法就是按照KNN的类似算法去求出每一个维度的结果。也是看周志华老师的review突然就想实现以下,然后实现了一个相当简单的。

首先我们需要进行计算的是在近邻数目为k的情况下的贝叶斯分布的可能。

也就是,首先对于每一个样本求其近邻,然后按照近邻在这一维度上的分类进行朴素贝叶斯的统计,遇到一个新样本,首先按照最近邻来计算近邻的集合,然后在每一个维度上根据其朴素贝叶斯的统计来进行计算。

下面是一个玩具版的代码实现,首先根据样本来计算贝叶斯分布的结果,同时计算近邻的集合。
有了一个实例样本之后,可以计算近邻集合并且根据近邻集合计算样本结果。

import numpy as np

def NB(X,Y,k,NN):
    NBdis = [];
    for i in range(0,Y.shape[1]):
        NBdis.append( (np.sum(Y[:,i])+1) /float(Y.shape[0]+2));

    NBtable = [];
    for i in range(0,Y.shape[1]):
        dis = np.zeros((k+1,2));
        for j in range(0,X.shape[0]):
            neighbours = NN[j];
            tmpX = np.sum(Y[neighbours,i]);
            if Y[j,i] == 0:
                dis[tmpX,1] += 1;
            else:
                dis[tmpX,0] += 1;
        smooth = 1;
        dis = dis+1 / np.sum(dis+1,axis = 1,keepdims = True);
        NBtable.append(dis);

    return (NBdis,NBtable);

def findKNN(X,k):
    NN = [];
    for x in X:
        tmpX = X.copy();
        tmpX -= x;
        tmpX = tmpX * tmpX;
        distance = np.sum(tmpX,axis = 1);
        NN.append(np.argsort(distance)[1:k+1]);
    return(NN);

def predictFindNN(X,x,k):
    tmpX = X.copy();
    tmpX -= x;
    tmpX = tmpX * tmpX;
    distance = np.sum(tmpX,axis = 1);
    return(np.argsort(distance)[0:k]);

def predictLabel(nn,NBdis,NBtable,Y):
    tmpY = Y[nn];
    tmpY = np.sum(tmpY,axis = 0);
    labels = np.zeros((1,Y.shape[1]));
    for i in range(labels.shape[1]):
        if NBdis[i]*NBtable[i][tmpY[i],0] > (1-NBdis[i])*NBtable[i][tmpY[i],1]:
            labels[0][i] = 1;
        else:
            labels[0][i] = 0;
    return labels;


X = np.array([[1,0,1,1,0],[0,1,1,1,0],[1,0,1,0,1]])
Y = np.array([[1,0,1,1],[1,0,1,0],[1,0,0,0]]);
k = 2;
NN = findKNN(X,k);
print(NN);
print('\n');
(NBdis,NBtable) = NB(X,Y,k,NN);


print('\nNaive Bayes probs');
print(NBdis);


print('\nNaive Bayes table:');
for table in NBtable:
    print(table);
    print('\n');
x = ([0,1,1,1,0]);
nn = predictFindNN(X,x,k);


print('\nNearest neighbours');
print(nn);
label = predictLabel(nn,NBdis,NBtable,Y);


print('\nLabel predict');
print(label);

ML-kNN 多标签k近邻算法

学习张敏灵老师的《ML-kNN: a lazy learning approach to multi-label learning》的学习笔记。 传统kNN   k近邻算法(k-N...
  • xiaopihaierletian
  • xiaopihaierletian
  • 2016年12月05日 16:28
  • 1011

LSH以及ANN和NN问题

NN问题描述:             现代科技已经使得每天产生的数据(图像、视频)成为了一个天文数字,那我们怎么去对待这些数据,怎么找到他们之间的相关性,更准确的来讲就是如何提取usefu...
  • joyce19920920
  • joyce19920920
  • 2015年07月26日 09:19
  • 869

KNN(五)--层次Kmean

原文: http://blog.csdn.net/qq_16365849/article/details/50646679 一、层次聚类 1、层次聚类的原理及分类 1)层次法(Hierarch...
  • App_12062011
  • App_12062011
  • 2016年07月22日 16:29
  • 1019

机器学习算法笔记2_1:生成学习算法(Generative Learning algorithms)

我们之前学习的算法都是基于p(y|x;θ)p(y|x;\theta), 他的思想是找出找出一个决策边界来将两类分开,而生成算法是先对两个类别分别建模,为了将样本分开,将样本代入两个模型,看样本与哪个类...
  • BUPT_WX
  • BUPT_WX
  • 2016年04月21日 14:01
  • 4613

论文笔记:A clockwork RNN

A clockwork RNN(CW-RNN) 本文主要提出了一个新型的RNN模型,跟原始RNN不一样的地方就在于,因此隐层单元的不同,同时计算是有方向周期的,降低了参数量。 为什么有关rn...
  • baidu_17806763
  • baidu_17806763
  • 2017年03月10日 17:25
  • 878

哈希学习(2)—— Hashing图像检索资源

哈希方法 公布代码的: CSDSH: Column Sampling based Discrete Supervised Hashing SGH :Scalable Graph Hashing ...
  • flowerboya
  • flowerboya
  • 2016年07月11日 00:25
  • 3127

Deep Learning论文笔记之(八)Deep Learning最新综述

Deep Learning论文笔记之(八)Deep Learning最新综述zouxy09@qq.comhttp://blog.csdn.net/zouxy09        自己平时看了一些论文,但...
  • zouxy09
  • zouxy09
  • 2013年08月19日 16:44
  • 41028

【self-taught learning】学习论文以及代用代码

【self-taught learning】快速稀疏编码算法   Self-taught learning是Honglak Lee等开发的一个matlab框架,能够实现他们在论文Self-taug...
  • pirage
  • pirage
  • 2013年12月26日 16:40
  • 5793

Deep Learning及NLP(自然语言处理)杂谈--第二部分

NLP自然语言处理方面的Deep learning模型 这一部分主要讲了四个对NLP方面效果比较好的模型:1.GRUs(Gated Feedback Recurrent Neural Networks...
  • NeighborhoodGuo
  • NeighborhoodGuo
  • 2015年08月23日 20:43
  • 2949

【CUDA并行编程之六】KNN算法的并行实现

之前写了两篇文章一个是KNN算法的C++串行实现,另一个是CUDA计算向量的欧氏距离。那么这篇文章就可以说是前两篇文章的一个简单的整合。在看这篇文章之前可以先阅读前两篇文章。 一、生成数据集 现在...
  • lavorange
  • lavorange
  • 2014年12月26日 16:25
  • 3030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:A Review on Multi-Label Learning Algorithms - KNN
举报原因:
原因补充:

(最多只允许输入30个字)