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);
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

KNN for Multi-label learning

ML-kNN is adjusted for the multi-label learning tasks by introducing the maximum post probability to...

A Novel Multi-label Classification Based on PCA and ML-KNN

ICIC Express Letters                            ICIC International ⓒ20...

Multi-Label Ensemble Learning

  • 2016-02-29 23:20
  • 365KB
  • 下载

Multi-label learning 第一周

Multi-Label Learning 第一周Multi-Label Learning 第一周 Multi-Label Learning的含义 传统机器学习 多标签学习 Multi-Label Le...
  • Kodoo
  • Kodoo
  • 2015-11-09 10:09
  • 1408

Multi-label learning for BP

# -*- coding: utf-8 -*- """ Created on 2017/4/5 9:52 2017 @author: Randolph.Lee """ from __future__...

A Review on Deep Learning Techniques Applied to Semantic Segmentation(译)-(1)

摘要   图像语义分割越来越受到计算机视觉和机器学习的研究人员的热爱。越来越多新兴的应用领域需要精确地和高效的分割机制:自动驾驶,室内导航,甚至虚拟或增强现实系统等。这种需求几乎与计算机视觉等相关领...

A Review on Deep Learning Techniques Applied to Semantic Segmentation 阅读笔记

深度学习技术在语义分割中的应用综述 摘要 这篇文章主要是对各种应用场景下,使用深度学习进行语义分割的方法的综述。论文中介绍的主要方面包括: 1)该领域的术语和必要的背景知识 2)主要数据集和竞赛的介绍...

【笔记】Discovering and Exploiting Deterministic Label Relationships in Multi-Label Learning

从多标签数据中学习知识,已成为近些年机器学习和数据挖掘方向的关注点。由于多标签数据的实际运用越来越多,关于这方面的研究也遇到一些挑战,例如运用标签的依赖性进行学习。正是如此,关注这些确定性的关系的自动...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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