`
NicholasBugs
  • 浏览: 51861 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

KNN算法的ruby实现

 
阅读更多

原文链接:nicholasren.github.com/2013/02/17/knn.html

背景

KNN,全称K-nearest-neighbour,是机器学习中最简单的一个分类算法,它的原理是通过对样本数据的学习,对于给定的新的数据,找出与其距离最近的K个样本数据,根据这K个最近样本数据的类别,来确定这个给定数据的类别。

Coolshell上有对这个算法的讲解,我的同事邱俊涛也写了一篇关于KNN算法python实现的文章。本文讲解一个KNN算法的ruby实现。

输入

程序输入格式如下:

x0,x1,x2,…xn|v0
y0,y1,y2,…yn|v1
z0,z1,z2,…zn|v2

每行为一个数据样本,以第一行为例,x0,x1...xn为一个向量,v0为该数据的类别。

学习

从给定文件加载样本数据:

def train file_path
  @samples = from_file(file_path)
end

@sample的格式如下:

[
    {:vector => [x0, x1, x2, …xn], :value => v0},
    {:vector => [y0, y1, y2, …yn], :value => v1},
    …
    {:vector => [z0, z1, z2, …zn], :value => vn},
]

分类

对于给定的数据,要判断其属于样本数据中的哪一类,需解决如下几个问题:

  1. 计算给定数据和样本数据之间的距离
  2. 找出与给定数据距离最小的K个样本数据
  3. 从这K个样本数据中找出样本多的那个分类,即为给定数据的分类。
1. 计算距离

给定两个向量[x0, x1,…xn][y0, y1,...yn]计算两个向量之间的距离如下:

(x0 - y0)^2 + (x1 - y1)^2 + … + (xn - yn)^2

因此,对于给定的两个向量a,b,其距离计算逻辑如下:

#a and b are two vectors
def distance_between a, b
  a.zip(b).map {|x| x[0] - x[1]}.inject(0){|sum, x| sum += x*x}
end
2. 找出与给定数据距离最小的K个样本数据

可以采用计算给定数据与所有样本数据的距离,然后采用最大堆来找出top k个样本数据。

def nearest_neighbours candidate, k
  heap = MaxHeap.new
  @samples.each do |sample|
    distance = distance_between(sample[:vector], candidate)
    heap.insert Node.new(distance, sample)
  end
  heap.take_top(k).compact.map(&:sample)
end
3. 从这K个样本数据中找出样本多的那个分类,即为给定数据的分类。

对得到的样本根据其类别进行分组,组内元素多的那个类别,即为该给定数据的分类

def value_with_max_vote xs
  value_with_votes = xs.group_by{|x| x[:value]}.map{|value, group| {:value => value, :votes => group.length}}
  value_with_votes.max_by{|x| x[:votes] }[:value]
end

综合上面的几个小任务,我们得到KNN分类算法的实现:

def categorize candidate, k
  neighbours = nearest_neighbours_for candidate, k
  value_with_max_vote neighbours
end

代码的完整版本可以在这里找到。

分享到:
评论

相关推荐

    利用knn算法python实现的股市预测源码.zip

    利用knn算法python实现的股市预测,使用了pandas,tushare,numpy,scipy,fastdtw,operator,math 在配置所需的库之后,运行脚本 在交互式命令行中输入 main(‘股票代号’,k) main函数最后有一个默认参数 如果想...

    Java实现kNN算法

    Java实现k近邻(kNN)算法是机器学习领域中一种基础且重要的算法,主要用于分类和回归问题。kNN算法基于实例的学习,它不预先建立任何模型,而是将新数据分类或预测为与其最近的k个训练样本中最常见的类别。在这个讨论...

    KNN算法的matlab实现

    本篇将详细介绍KNN算法的原理及其在Matlab环境中的实现。 ### KNN算法基本原理 1. **定义**: KNN算法基于“物以类聚”的思想,通过寻找训练集中与未知类别样本最近的K个邻居,根据这些邻居的类别进行投票,决定...

    KNN算法实现鸢尾花数据集分类 C语言实现.zip

    KNN算法实现鸢尾花数据集分类 C语言实现 KNN算法实现鸢尾花数据集分类 C语言实现 KNN算法实现鸢尾花数据集分类 C语言实现 KNN算法实现鸢尾花数据集分类 C语言实现 KNN算法实现鸢尾花数据集分类 C语言实现 KNN...

    c语言的KNN算法实现

    在C语言环境下实现KNN算法,首先要理解以下几个关键步骤: 1. **数据预处理**:C语言中的数据结构,如数组、链表或结构体,可以用来存储数据集。数据集通常包含特征和对应的标签。在`data`文件中,数据集被导入并...

    KNN算法Python实现

    在这个压缩包文件中,我们可以期待找到一些关于KNN算法的Python实现,以及可能的实验指导和解释文档,这对于学习和理解KNN算法非常有帮助。 1. **KNN算法的基本原理**: KNN算法基于“近朱者赤,近墨者黑”的原则...

    KNN算法 C#程序

    在C#编程环境中实现KNN算法,你需要掌握以下几个关键知识点: 1. 数据预处理:KNN算法对数据的质量有较高要求,因此在实际应用前,你需要对数据进行清洗,处理缺失值、异常值,以及可能存在的类别不平衡问题。此外...

    KNN算法实验报告.pdf

    KNN 算法实验报告 KNN(K-Nearest Neighbor)算法是机器学习领域中的一种常用算法,属于监督学习算法的一种。...KNN 算法是一种简单、易于实现的机器学习算法,但需要注意其缺点和改进方法,以提高算法的性能和效率。

    python可视化实现KNN算法

    这里通过python的绘图工具Matplotlib包可视化实现机器学习中的KNN算法。 需要提前安装python的Numpy和Matplotlib包。 KNN–最近邻分类算法,算法逻辑比较简单,思路如下: 1.设一待分类数据iData,先计算其到已...

    机器学习-KNN算法实现

    在这个"机器学习-KNN算法实现"项目中,你可能使用了PyCharm作为开发环境,这是一个强大的Python IDE,提供了代码编辑、调试、集成测试等众多功能,使得开发过程更为高效。 首先,我们需要了解KNN的基本步骤: 1. *...

    knn.rar_KNN java_KNN算法 java_knn算法_knn算法java实现

    在给定的压缩包文件"KNN.rar"中,可能包含了一个Java实现的KNN算法示例,文件名"KNN"可能是指该算法的主类或者核心代码文件。这个实现可能涵盖了以上提到的所有步骤,通过阅读和理解这段代码,你可以更深入地了解KNN...

    课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip

    课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip课程作业-基于KNN算法实现红酒分类实验源码+详细注释+数据集.zip课程作业-基于KNN算法...

    Iris数据集的KNN算法实现

    本算法是Iris数据集使用KNN算法的代码,KNN算法的实现是比较简单的,我使用的是最简单的KNN算法,可以作为借鉴。

    knn.zip_knn_knn算法_实现KNN算法java

    《KNN算法的Java实现详解》 KNN(K-Nearest Neighbors)算法,即K近邻算法,是机器学习领域中最基础且重要的算法之一。它基于实例的学习,通过寻找训练集中与新样本最接近的K个邻居,依据邻居的类别进行投票,从而...

    机器学习之knn算法及代码

    `knn.ppt`可能是关于KNN算法的演示文稿,可能包含了算法原理、实例解析以及如何在Python等编程语言中实现KNN的详细步骤。`93317479KNN.rar`可能是一个包含KNN算法相关代码、数据集或案例研究的压缩文件,用户可以...

    kNN算法Python实现

    利用Python语言实现kNN算法分类。

    C语言实现的KNN算法

    **C语言实现的KNN算法** KNN,全称为K-Nearest Neighbors,是一种基于实例的学习,也是监督学习中的非参数方法。该算法的基本思想是:对于一个新的未知类别数据点,通过查找其在训练集中最接近的K个已知类别的邻居...

    通过knn算法,实现WiFi室内定位在matlab环境下的仿真

    在本场景中,我们将在MATLAB环境下利用KNN算法实现WiFi室内定位的仿真。 KNN算法的基本思想是:对于给定的一个未知类别的数据样本,将其归为与其最近的K个已知类别样本中的多数类别,这里的“近”通常是基于某种...

    机器学习实战 - k近邻算法(KNN算法)总结

    机器学习实战 - k近邻算法(KNN算法)总结 适合机器学习实战入门新手 K-近邻算法,又称为 KNN 算法,是数据挖掘技术中原理最简单的算法。 KNN 的工作原理:给定一个已知类别标签的数据训练集,输入没有标签的新数据...

    matlab、python:基于KNN算法的电影分类与约会配对

    2. **模型构建**:Scikit-learn中的`KNeighborsClassifier`类提供了完整的KNN算法实现,包括训练模型、预测等步骤。 3. **数据划分与评估**:使用`train_test_split`划分训练集和测试集,然后使用`fit`训练模型,`...

Global site tag (gtag.js) - Google Analytics