机器学习 --KNN的介绍与实现
来源:互联网 发布:淘宝怎么做品牌分销 编辑:程序博客网 时间:2024/06/05 23:10
具体思路为:
1.初始化学习样本,即向量集合
2.指定每个向量集合所属的分类,例如a,b,c
3.对于新来的向量v,指定邻居数K,找到距离v最近的K个邻居,设为集合s
4.对于s中的每个向量,找出分类数最大的那个(例如K=5,3向量分在了a,1个在b,1个在c),则v的分类为a。
图例
实现(c#)
1.安装 accord framework 的nuget
2.实例代码
运行结果
1.初始化学习样本,即向量集合
2.指定每个向量集合所属的分类,例如a,b,c
3.对于新来的向量v,指定邻居数K,找到距离v最近的K个邻居,设为集合s
4.对于s中的每个向量,找出分类数最大的那个(例如K=5,3向量分在了a,1个在b,1个在c),则v的分类为a。
图例
实现(c#)
1.安装 accord framework 的nuget
2.实例代码
public class Vector { public double[] Features { get; set; } public Vector(double[] features) { Features = features; } public override string ToString() { return "(" + string.Join(",", Features) + ")"; } } public class KNNDemo { private static double[][] Inputs; private static int[] Outputs; private static void Training() { Inputs = new[] { // The first two are from class 0 new double[] { -5, -2, -1 }, new double[] { -5, -5, -6 }, // The next four are from class 1 new double[] { 2, 1, 1 }, new double[] { 1, 1, 2 }, new double[] { 1, 2, 2 }, new double[] { 3, 1, 2 }, // The last three are from class 2 new double[] { 11, 5, 4 }, new double[] { 15, 5, 6 }, new double[] { 10, 5, 6 }, }; Outputs = new[] { 0, 0, // First two from class 0 1, 1, 1, 1, // Next four from class 1 2, 2, 2 // Last three from class 2 }; } private const int K = 3; private const int TotalClasses = 3; public static void SortDistancesThenShow(Vector v) { var results = new List<dynamic>(); for (int i = 0; i < Inputs.Length; i++) { var dist = DistanceBetween(Inputs[i], v.Features); results.Add(new { InputStr = Stringify(Inputs[i]), Dist = dist, Class =Outputs[i] }); } results = results.OrderBy(x=>x.Dist).ToList(); foreach (var result in results) { dynamic r = result; Console.WriteLine("input : {0}, class : {1} , distance : {2}", r.InputStr, r.Class, r.Dist); } } private static string Stringify(double[] values) { return "(" + string.Join(",", values) + ")"; } private static double DistanceBetween(double[] v1, double[] v2) { if (v1.Length != v2.Length) { throw new ArgumentException("vectors should be in same dimension."); } var distance = 0.0; for (int i = 0; i < v1.Length; i++) { distance += Math.Pow(v1[i] - v2[i], 2); } return Math.Sqrt(distance); } public static int Execute(Vector v) { Training(); var knn = new KNearestNeighbors(K, TotalClasses, Inputs, Outputs); return knn.Compute(v.Features); } }class Program { static void Main(string[] args) { var v = new Vector(new double[] {11, 5, 4}); var result = KNNDemo.Execute(v); Console.WriteLine("Classification for input '{0}' result is '{1}'", v, result); KNNDemo.SortDistancesThenShow(v); Console.ReadLine(); } }
运行结果
从运行的打印结果中可以看出(已按距离排序),预测的分类为2,以及新向量到每个测试数据的距离是多少。
1 0
- 机器学习 --KNN的介绍与实现
- [机器学习]KNN算法的理解与具体实现
- 机器学习实战KNN的java实现
- 机器学习之knn实现
- 机器学习之-knn-具体怎么实现与应用
- 机器学习与数据挖掘系列算法之--knn的python实现
- 机器学习算法的R语言实现(一):KNN
- 【机器学习算法】之KNN算法的实现
- 机器学习-kNN实现简单的手写数字识别系统
- 机器学习---opencv实现简单的KNN算法
- KNN演算法--通俗易懂的机器学习理论介绍
- 机器学习:KNN算法(MATLAB实现)
- Python机器学习(二)--kNN算法实现
- 机器学习之PYTHON实现KNN算法
- 机器学习2 KNN原理和实现
- 机器学习KNN算法原理及实现
- 【机器学习】使用python实现kNN算法
- 机器学习KNN python算法实现
- JSON对象序列化与反序列化
- nginx服务器安装及配置文件详解(转载)
- 在Intel_Edison开发版的编译软件中配置pbc库(如何在eclipse中添加头文件和库文件)
- hdu 2018 母牛的故事(动态规划)
- <s:iterator>与<s:if>嵌套使用
- 机器学习 --KNN的介绍与实现
- 2016-5-19-2
- 设置fedora23的网络配置
- iOS下载数据-断点续传
- java异常throw和throws区别
- CSS浮动属性Float详解
- Search in Rotated Sorted Array II
- JS打开新窗口的2种方式
- Mysql学习——触发器