k-近邻算法

概述:k-近邻算法採用測量不同特征值之间的距离方法进行分类

长处:精度高、对于异常值不敏感。无数据输入假定

缺点:计算复杂度高,空间复杂度高,而且它没有办法各处基础数据的一些内部信息数据。

算法描写叙述:存在一个准确的数据集合样本。称作训练样本集,样本集合中每一个item都附带自己所属分类标签。当须要推断新数据的分类是,仅仅须要计算特征数据和样本数据中最类似的分类标签,选择k个最类似的标签,k个标签中占比最多的即为目标标签。

详细分类算法

    #-*- coding=utf-8 -*-
from numpy import *
import operator ##简单的kNN算法实现
#dataSet是训练数据集合。每行代表每一个训练数据的每一个特征值
#labels 相应dataSet每一个训练数据的class标签
#inX 表示待分类的特征数据
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] # 获取測试集合大小
#求每一个输入特征值和每一个測试集合总的特征值的超时
#首先须要使用tile将特征值扩展为和測试集合相等大小的矩阵
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
#取平方
sqlDiffMat = diffMat ** 2
sumMat = sqlDiffMat.sum(axis=1)
distances = sumMat ** 0.5
#获取排序信息
#比如:array([9,1,3,0]) -> array([3,1,2,0]) 升序标签
sortIndicies = distances.argsort() classCount = {}
#取距离最小的前k个相应的标签统计信息
for i in range(k):
label = labels[sortIndicies[i]]
classCount[label] = classCount.get(label,0) + 1 #取最大的 sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]

关于特征数据

不同的特征,详细的数据值波动区间是不同的,比如特征A取值范围在[1000,10000],可是特征B取值范围在[0,10],假设直接使用这种特征数据进行KNN算法运算。会出现的一个问题,高区间的特征对结果的影响远远大于低区间的特征值,因此我们须要对我们的特征数据做归一化处理,即将全部特征值处理到同样的区间范围中。

详细算法:((特征值-min)/(max - min)) -> [0,1]区间范围

    from numpy import *
import operator
#用于将一个不同范围域的特征值归一化到统一的[0,1]之间
def normData(dataSet):
#获取每一个特征的最大值
maxValue = dataSet.max(0)
#获取每一个特征的最小值
minValue = dataSet.min(0)
ranges=maxValue-minValue
#将数据归一到同一个范围
normalDataSet = zeros(shape(dataSet))
m = dataSet.shape[0]
normalDataSet = dataSet - tile(ranges,(m,1))
#除于最大值
normalDataSet = normalDataSet/tile(maxValue,(m,1)) return normalDataSet, ranges, minValues

关于可视化特征数据

怎样判别我们取得的特征数据集合适合使用knn进行分类训练?

在做数据观察时我们往往须要通过可视化方式去观察我们的特征数据和label的分布,这个时候就须要用到Python的一个图形工具matplotlib。

特征和分类数据:testSet.txt

3.542485 1.977398 -1

3.018896 2.556416 -1

7.551510 -1.580030 1

2.114999 -0.004466 -1

8.127113 1.274372 1

7.108772 -0.986906 1

8.610639 2.046708 1

2.326297 0.265213 -1

3.634009 1.730537 -1

0.341367 -0.894998 -1

3.125951 0.293251 -1

2.123252 -0.783563 -1

0.887835 -2.797792 -1

7.139979 -2.329896 1

1.696414 -1.212496 -1

8.117032 0.623493 1

8.497162 -0.266649 1

4.658191 3.507396 -1

8.197181 1.545132 1

1.208047 0.213100 -1

1.928486 -0.321870 -1

2.175808 -0.014527 -1

7.886608 0.461755 1

3.223038 -0.552392 -1

3.628502 2.190585 -1

7.407860 -0.121961 1

7.286357 0.251077 1

可视化脚本:


from numpy import *
import matplotlib
import matplotlib.pyplot as plt ##read file
fr = open('testSet.txt')
lines = fr.readlines()
dataSet = zeros((len(lines),1))
labels = []
index = 0
for line in lines:
items = line.strip().split('\t')
dataSet[index:] = items[0:2]
labels.append(items[-1])
#matplot
fx = plt.figure()
ax = fx.add_subplot(111)
#将数组转换为矩阵
dataSet = matrix(dataSet)
colora = tile(50, len(lines))
#这里的colora是为了通过颜色区分不同的labels, cmap代表颜色map,默认是yard, s是每一个点的大小,alpha是每一个点的透明度
ax.scatter(dataSet[:,0], dataSet[:,1], c=colora * labels, cmap='autum', s=50, alpha=0.3) plt.show()

机器学习01-kNN邻近算法的更多相关文章

  1. [机器学习实战] k邻近算法

    1. k邻近算法原理: 存在一个样本数据集,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对 ...

  2. 机器学习入门KNN近邻算法(一)

    1 机器学习处理流程: 2 机器学习分类: 有监督学习 主要用于决策支持,它利用有标识的历史数据进行训练,以实现对新数据的表示的预测 1 分类 分类计数预测的数据对象是离散的.如短信是否为垃圾短信,用 ...

  3. [机器学习] ——KNN K-最邻近算法

    KNN分类算法,是理论上比较成熟的方法,也是最简单的机器学习算法之一. 该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...

  4. 【机器学习】机器学习入门01 - kNN算法

    0. 写在前面 近日加入了一个机器学习的学习小组,每周按照学习计划学习一个机器学习的小专题.笔者恰好近来计划深入学习Python,刚刚熟悉了其基本的语法知识(主要是与C系语言的差别),决定以此作为对P ...

  5. <机器学习实战>读书笔记--k邻近算法KNN

    k邻近算法的伪代码: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离: (2)按照距离递增次序排列 (3)选取与当前点距离最小的k个点 (4)确定 ...

  6. 最邻近算法(KNN)识别数字验证码

    应用场景   对于简单的数字型验证码的自动识别.前期已经完成的工作是通过切割将验证码图片切割成一个一个的单个数字的图片,并按照对应的数字表征类别进行分类(即哪些图片表示数字7,哪些表示8),将各种数字 ...

  7. k最邻近算法——使用kNN进行手写识别

    上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...

  8. 机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法

    K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法, ...

  9. 机器学习:K-近邻算法(KNN)

    机器学习:K-近邻算法(KNN) 一.KNN算法概述 KNN作为一种有监督分类算法,是最简单的机器学习算法之一,顾名思义,其算法主体思想就是根据距离相近的邻居类别,来判定自己的所属类别.算法的前提是需 ...

  10. 机器学习算法及代码实现–K邻近算法

    机器学习算法及代码实现–K邻近算法 1.K邻近算法 将标注好类别的训练样本映射到X(选取的特征数)维的坐标系之中,同样将测试样本映射到X维的坐标系之中,选取距离该测试样本欧氏距离(两点间距离公式)最近 ...

随机推荐

  1. widget-移除底部小部件内容

    今天有一个要求,就是在调出手机窗口小部件的时候,让其中的某些小部件不显示.折腾了好久,虽然不知道原理,最终还是实现了屏蔽其中个别小部件的方法.记录下来 要想屏蔽底部小部件的显示,只需要把相关的类跟广播 ...

  2. Property-属性动画

    今天第一次接触到属性动画.参考着 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 的博客,自己学习下. 它的区别跟 ...

  3. eclipse- DDMS截图功能使用

    如何使用eclipse的截图功能呢 1.打开eclipse 2.连接手机 3.打开eclipse的DDMS插件. 4.选中手机 5.点击上面的摄像机图标,就可以截图了 如果你打开了DDMS以后,没有发 ...

  4. Ajax用法

    1.什么是 Ajax? Ajax,英文名 Asynchronous JavaScript and XML,也就是异步的 JavaScript 和 XML.它不是一门新的语言,而是一种使用现有标准的新方 ...

  5. Vue简介以及基本使用

    Vue 是一套构建用户界面的渐进式 框架 框架和库? 框架(基于自身的特点向用户提供一套完整的解决方案,控制权在框架本身,需要使用者按照框架所规定的某种规范进行开发) Vue Angular Reac ...

  6. spring基础内容

      关注和收藏在这里   深入理解Spring框架的作用 纵览Spring , 读者会发现Spring 可以做非常多的事情. 但归根结底, 支撑Spring的仅仅是少许的基本理念, 所有的理念都可以追 ...

  7. 使用PyCharm安装第三方库

    使用PyCharm安装第三方库是一种十分简单的做法,接下来我来演示一下在PyCharm上安装第三方库requess的操作流程. 首先,先看一下当第三方库未安装时的提示内容,在pycharm中新建pyt ...

  8. progerssbar-style 属性分析

    先看如下代码 <ProgressBar android:id="@+id/stateProgressBar" android:orientation="horizo ...

  9. Android学习笔记之Bitmap位图的缩放

    位图的缩放也可以借助Matrix或者Canvas来实现. 通过postScale(0.5f, 0.3f)方法设置旋转角度,然后用createBitmap方法创建一个经过缩放处理的Bitmap对象,最后 ...

  10. matlab 局部特征检测与提取(问题与特征)

    物体识别:SIFT 特征: 人脸识别:LBP 特征: 行人检测:HOG 特征: 0. 常见手工设计的低级别特征 manually designed low-level features 语音:高斯混合 ...