K-近邻算法(KNN)
概念:采用测量不同的特征值之间的距离方法进行分类,找出最近的K个邻居
1.K-近邻算法的流程
收集数据
准备数据
分析数据
训练算法
测试算法
使用算法
2.实际使用
K值的选择,如果选择较小的K值,整体模型变得复杂,容易发生过拟合;且K值的增大就意味着整体的模型变得简单
下面使用java实现KNN
从文本中获取数据:
10,20-A
12,18-A
8,26-A
1,1-B
0,1-B
11,22-A
7,20-A
40,20-C
35,18-C
50,26-C
2,2-B
45,19-C
3,1-B
3,4-B
38,22-C
package com.sosop.knn; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Data { public static Map<String, List<int[]>> getData() { Map<String, List<int[]>> map = new HashMap<String, List<int[]>>(); try(BufferedReader reader = new BufferedReader(new InputStreamReader (new FileInputStream("/home/sosop/mytest/KNN-data")))) { String line; while((line = reader.readLine()) != null) { String[] data = line.split("-"); String[] strCoot = data[0].split(","); int[] coordinate = {Integer.valueOf(strCoot[0]), Integer.valueOf(strCoot[0])}; if(map.get(data[1]) == null) { List<int[]> list = new ArrayList<int[]>(); list.add(coordinate); map.put(data[1], list); } else { map.get(data[1]).add(coordinate); } } } catch (IOException e) { e.printStackTrace(); } return map; } }
package com.sosop.knn; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class KNN { // 计算距离并排序 public static Map<Double, List<String>> distanceSort(int[] point) { Map<Double, List<String>> sortMap = new TreeMap<Double, List<String>>(); for (Entry<String, List<int[]>> entry : Data.getData().entrySet()) { List<int[]> list = entry.getValue(); for (int[] data : list) { double d = Math.sqrt(Math.pow((data[0] - point[0]), 2) + Math.pow((data[1] - point[1]), 2)); if (sortMap.get(d) == null) { List<String> arrList = new ArrayList<String>(); arrList.add(entry.getKey()); sortMap.put(d, arrList); } else { sortMap.get(d).add(entry.getKey()); } } } return sortMap; } // 找出K个距离最近的点,分析类别最多的,最后分类 public static String classify(int k, int point[]) { String category = null; String[] labels = new String[k]; int index = 0; for (Entry<Double, List<String>> entry : distanceSort(point).entrySet()) { for (String label : entry.getValue()) { labels[index] = label; index++; if (index == k) break; } if (index == k) break; } Map<String, Integer> statistic = new HashMap<String, Integer>(); //int max = 0; // 找出类别 for (String label : labels) { if (statistic.get(label) == null) { statistic.put(label, 1); } else { statistic.put(label, statistic.get(label) + 1); } //if(max < statistic.get(label)) max = statistic.get(label); } Map<String, Integer> sorted = new TreeMap<String, Integer>( new ValueComparator<String, Integer>(statistic)); sorted.putAll(statistic); for (String label : sorted.keySet()) { category = label; break; } return category; } public static void main(String[] args) { int[] point = {33,20}; System.out.println(classify(3, point)); } } // 定义按值倒序排序 class ValueComparator<T, E extends Number> implements Comparator<T> { Map<T, E> map; public ValueComparator(Map<T, E> map) { this.map = map; } @Override public int compare(T o1, T o2) { if (map.get(o1).doubleValue() > map.get(o2).doubleValue()) { return 1; } else if (map.get(o1).doubleValue() < map.get(o2).doubleValue()) { return -1; } else { return 0; } } }
相关推荐
机器学习_最近邻_k-近邻算法_python实现
机器学习实战 - k近邻算法(KNN算法)总结 适合机器学习实战入门新手 K-近邻算法,又称为 KNN 算法,是数据挖掘技术中原理最简单的算法。 KNN 的工作原理:给定一个已知类别标签的数据训练集,输入没有标签的新数据...
### 机器学习中的K近邻算法(K-Nearest Neighbor, K-NN) #### 算法概述 K近邻算法(K-Nearest Neighbor, K-NN)是一种基础且直观的监督学习方法,由Cover T. 和 Hart P. 在1967年提出。它既适用于分类问题也适用于...
在本实践项目中,我们将深入探讨如何利用机器学习中的k-近邻算法(K-Nearest Neighbors,简称KNN)来改进约会网站的配对效果。KNN是一种非参数监督学习方法,常用于分类和回归任务。在这个案例中,我们将关注其在...
在机器学习领域,它是被广泛研究和应用的十大算法之一。kNN算法的原理简单直观,主要通过测量不同特征值之间的距离进行分类。该算法在执行过程中不需要事先训练模型,能够有效处理数值型和标称型数据。 k近邻法的...
**K-NN(K近邻算法)是一种简单而强大的非参数机器学习算法,主要用于分类和回归任务。在手写字符识别领域,K-NN被广泛应用于自动识别数字,如OCR(光学字符识别)系统。本项目是用C语言实现的K-NN算法,通过Visual ...
k-近邻算法是数据挖掘与机器学习领域中非常重要的分类技术之一。它是一种基于实例的学习方法,也就是我们所说的懒惰学习,即它在训练阶段不做任何操作,只是存储训练数据,而在预测阶段,通过计算待分类数据与训练...
### K近邻算法详解 ...综上所述,K近邻算法作为一种简单有效的机器学习方法,在多种应用场景下都有广泛的应用。通过合理的参数设置和技术优化,可以在一定程度上解决其存在的问题,使其更好地服务于实际需求。
0817_极智开发_解读机器学习算法之k-近邻算法及示例代码
机器学习 机器学习_基于KNN的K近邻算法
**K-近邻(KNN)算法**是机器学习领域中一种基础且直观的分类算法。它的核心思想是根据输入样本最接近的K个训练样本的类别来预测新样本的类别。KNN算法最早由Cover和Hart在1968年提出,是一种基于实例的学习方法,...
机器学习算法KNN(K近邻)应用—实现对是否患糖尿病的预测源码+PDF文档机器学习算法KNN(K近邻)应用—实现对是否患糖尿病的预测源码+PDF文档机器学习算法KNN(K近邻)应用—实现对是否患糖尿病的预测源码+PDF文档...
《机器学习之k-近邻算法》 k-近邻(K-Nearest Neighbors,简称KNN)算法是监督学习领域中一个基础且重要的算法,尤其在分类问题上表现突出。KNN属于懒惰学习(Lazy Learning)类型,因为它并不进行模型训练,而是将...
机器学习算法KNN(K近邻)应用实例—性别的二分类预测源码+使用说明机器学习算法KNN(K近邻)应用实例—性别的二分类预测源码+使用说明机器学习算法KNN(K近邻)应用实例—性别的二分类预测源码+使用说明机器学习...
K-近邻算法(K Nearest Neighbor,KNN)是一种基本分类与回归方法。在机器学习领域,KNN算法的核心思想是通过测量不同特征值之间的距离来进行分类。基于输入样本与样本集中已知类别的样本之间的距离,将其归类于最近...
**k近邻(K-Nearest Neighbors, KNN)算法是监督学习中的一种基础且简单的方法,尤其在分类问题中应用广泛。该算法的核心思想是:一个样本的类别由其最近邻的K个样本的类别决定,其中K通常取奇数以避免分类决策时的...
**k-近邻算法(K-Nearest Neighbors...总的来说,k-近邻算法作为一种基础的机器学习方法,虽然存在一些缺点,但在许多场景下仍能展现出良好的性能。通过与其他技术结合或优化,可以提高其在实际应用中的效率和准确性。
内容概要:本文介绍了K-近邻算法(KNN),包括其基本原理、Python实现以及各种应用场景,还详细解析了距离度量方法,K值选择策略和算法的局限性。适合机器学习入门学习者。 适用人群:具备基本计算机科学背景的学生和...
该资源为人工智能-机器学习相关算法详细讲解,包括K-近邻算法、线性回归、逻辑回归、决策树算法、集成学习、聚类算法以及拓展的理论和实践案例。
在"MLInActionCode-master"中,我们可以期待找到如决策树、随机森林、支持向量机、K近邻、朴素贝叶斯、神经网络、深度学习、聚类算法(如K-means)、降维方法(如主成分分析PCA)等经典算法的Python或其他编程语言...