热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AReviewonMulti-LabelLearningAlgorithms-KNN

在多标签分类中,有一种方法就是按照KNN的类似算法去求出每一个维度的结果。也是看周志华老师的review突然就想实现以下,然后实现了一个相当简单的。首先我们需要进行计算的是在近邻数目为k的

在多标签分类中,有一种方法就是按照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);

推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • JComponentJLabel的setBorder前言用例2205262241前言setBorder(Border边框)实现自JComponentjava.awt.Insets ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
  • 通过使用 `pandas` 库中的 `scatter_matrix` 函数,可以有效地绘制出多个特征之间的两两关系。该函数不仅能够生成散点图矩阵,还能通过参数如 `frame`、`alpha`、`c`、`figsize` 和 `ax` 等进行自定义设置,以满足不同的可视化需求。此外,`diagonal` 参数允许用户选择对角线上的图表类型,例如直方图或密度图,从而提供更多的数据洞察。 ... [详细]
  • 针对图像分类任务的训练方案进行了优化设计。通过引入PyTorch等深度学习框架,利用其丰富的工具包和模块,如 `torch.nn` 和 `torch.nn.functional`,提升了模型的训练效率和分类准确性。优化方案包括数据预处理、模型架构选择和损失函数的设计等方面,旨在提高图像分类任务的整体性能。 ... [详细]
  • 支持向量机(SVM)在机器学习中的应用与学习心得
    支持向量机(SVM)是一种高效的二分类模型,其核心目标是通过寻找最优超平面来区分不同类别的数据点。在实际应用中,SVM能够有效地处理高维数据,并通过核技巧扩展到非线性分类问题。当新的数据点输入时,SVM会根据其相对于超平面的位置来判定其所属类别。训练过程中,SVM通过最大化间隔来确定最优超平面,从而提高模型的泛化能力。本文总结了SVM在机器学习中的应用及其学习心得,探讨了其在实际问题中的优势和局限性。 ... [详细]
author-avatar
手机用户2502934505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有