机器学习算法——KNN分类算法介绍以及Java实现

本文详细介绍了KNN(K近邻)分类算法,包括其原理、优缺点及一个简单的实例。通过Java实现了KNN算法,并展示了在基建数据行业分类上的应用,正确率约为80%。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KNN分类算法介绍

一、什么是分类

分类是指通过对大量的训练样本进行提取和分析,训练出用来分类的规则,即分类器或者分类模型,最终判断未知样本的类别。常见的分类算法有:决策树(ID3和C4.5),朴素贝叶斯,人工神经网络 (Artificial Neural Networks,ANN),k-近邻(kNN),支持向量机(SVM),基于关联规则的分类,Adaboosting方法等等。这篇文章主要介绍KNN算法。

二、KNN算法原理

1 原理

KNN算法又称为K近邻算法,根据训练样本和样本类别,计算与待分类样本相似度最大的K个训练点,然后对这K个训练点进行投票并排序,选择投票数最高的样本类别作为待分类数据的类别。这里的相似性度量可采用欧氏距离、马氏距离,余弦相似度等等。K为人为设定,一般选择奇数。

2 算法优点

1、算法简单、有效,通常用于文本分类。
2、重新训练的代价较低(类别体系的变化和训练集的变化,在Web环境和电子商务应用中是很常见的)。
3、该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

3 算法缺点

1、K值得选择对算法精度影响较大。
2、依赖于相似性度量的优劣。
3、当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个 邻居中大容量类的样本占多数。
4、计算量较大。

4 KNN算法实例

下图中有两种类型的样本数据,一类是蓝色的正方形,另一类是红色的三角形,中间那个绿色的圆形是待分类数据;

如果K=3,那么离绿色点最近的有2个红色的三角形和1个蓝色的正方形,这三个点进行投票,于是绿色的待分类点就属于红色的三角形。

如果K=5,那么离绿色点最近的有2个红色的三角形和3个蓝色的正方形,这五个点进行投票,于是绿色的待分类点就属于蓝色的正方形。

三、KNN算法描述

KNN算法的步骤可以描述为:

1、计算出样本数据和待分类数据的距离;

2、为待分类数据选择K个与其距离最小的样本;

3、统计出K个样本中大多数样本所属的分类;

4、这个分类就是待分类数据所属的分类。

四、KNN算法Java实现

// TODO Auto-generated method stub  
//首先读取训练样本和测试样本,用map<String,map<word,TF>>保存测试集和训练集,注意训练样本的类目信息也得保存,  
//然后遍历测试样本,对于每一个测试样本去计算它与所有训练样本的相似度,相似度保存入map<String,double>有  
//序map中去,然后取前K个样本,针对这k个样本来给它们所属的类目计算权重得分,对属于同一个类目的权重求和进而得到  
//最大得分的类目,就可以判断测试样例属于该类目下,K值可以反复测试,找到分类准确率最高的那个值  
//!注意要以"类目_文件名"作为每个文件的key,才能避免同名不同内容的文件出现  
//!注意设置JM参数,否则会出现JAVA heap溢出错误  
//!本程序用向量夹角余弦计算相似度  
public static double doProcess(String trainFiles, String testFiles, String kNNResultFile) throws IOException {
        System.out.println("开始训练模型:");
        File trainSamples = new File(trainFiles);
        BufferedReader trainSamplesBR = new BufferedReader(new FileReader(trainSamples));
        String line;
        String[] lineSplitBlock;
        Map<String, TreeMap<String, Double>> trainFileNameWordTFMap = new TreeMap<String, TreeMap<String, Double>>();
        TreeMap<String, Double> trainWordTFMap = new TreeMap<String, Double>();
        int index1 = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值