最邻近规则分类(K-Nearest Neighbor)KNN算法


自写代码:
# Author Chenglong Qian from numpy import * #科学计算模块
import operator #运算符模块 def createDaraSet():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#创建4行2列的数组
labels=['A',"A",'B','B']#标签列表
return group,labels group,labels=createDaraSet() '''k—近邻算法'''
def classify0(inX,dataSet,labels,k): #inX:需要分类的向量,dataSet:训练样本,labels:标签,k:临近数目
'''求距离'''
dataSetSize=dataSet.shape[0] #样本数据行数,即样本的数量
diffMat=tile(inX,(dataSetSize,1))-dataSet #(来自numpy)tile:重复数组;将inX重复dataSetSize行,1列次;获得每组数据的差值(Xi-X,Yi-Y)
sqDiffMat=diffMat**2 #求平方
sqDistances=sqDiffMat.sum(axis=1) #sum(axis=1)矩阵每一行相加,sum(axis=0)每一列相加
distances=sqDistances**0.5 #开根号
sortedDistIndicies=distances.argsort() #argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y。
classCount={}
'''排序'''
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]] #sortedDistIndicies[i]第i+1小元素的索引
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #classCount.get(voteIlabel,0)返回字典classCount中voteIlabel元素对应的值,若无,则将其设为0
#这里表示记录某一标签的数量
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)#sorted(需要排序的list,key=自定义排序方式,是否反转排序结果)
#items 将字典以列表形式返回 (python3.5中无 :iteritems将字典以迭代器形式返回)
#itemgetter函数用于获取对象的第几维的数据 operator.itemgetter(1)使用第二个元素进行排序
return sortedClassCount[0][0] '''把文本记录转换成矩阵Numpy的解析程序'''
def file2matrix(filename):
fr=open(filename)
arrayOLines=fr.readlines() #readlines():返回由文件中剩余的文本(行)组成的列表
numberOfLines=len(arrayOLines) #返回对象的长度
returnMat=zeros((numberOfLines,3))
classLabelVector=[]
index=0
for line in arrayOLines:
line=line.strip() #strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
listFromLine=line.split('\t') #split() 通过指定分隔符对字符串进行切片
returnMat[index,:]=listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))
index+=1
return returnMat,classLabelVector
库代码
from sklearn import neighbors
from sklearn import datasets knn = neighbors.KNeighborsClassifier() iris = datasets.load_iris() print iris knn.fit(iris.data, iris.target) predictedLabel = knn.predict([[0.1, 0.2, 0.3, 0.4]])
print "hello"
#print ("predictedLabel is :" + predictedLabel)
print predictedLabel
最邻近规则分类(K-Nearest Neighbor)KNN算法的更多相关文章
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- K Nearest Neighbor 算法
文章出处:http://coolshell.cn/articles/8052.html K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KN ...
- kNN(K-Nearest Neighbor)最邻近规则分类
KNN最邻近规则,主要应用领域是对未知事物的识别,即推断未知事物属于哪一类,推断思想是,基于欧几里得定理,推断未知事物的特征和哪一类已知事物的的特征最接近: K近期邻(k-Nearest Neighb ...
- kNN(K-Nearest Neighbor)最邻近规则分类(转)
KNN最邻近规则,主要应用领域是对未知事物的识别,即判断未知事物属于哪一类,判断思想是,基于欧几里得定理,判断未知事物的特征和哪一类已知事物的的特征最接近: K最近邻(k-Nearest Neighb ...
- 机器学习--最邻近规则分类KNN算法
理论学习: 3. 算法详述 3.1 步骤: 为了判断未知实例的类别,以所有已知类别的实例作为参照 选择参数K 计算未知实例与所有已知实例的距离 选 ...
- python_机器学习_最临近规则分类(K-Nearest Neighbor)KNN算法
1. 概念: https://scikit-learn.org/stable/modules/neighbors.html 1. Cover和Hart在1968年提出了最初的临近算法 2. 分类算法( ...
- 4.2 最邻近规则分类(K-Nearest Neighbor)KNN算法应用
1 数据集介绍: 虹膜 150个实例 萼片长度,萼片宽度,花瓣长度,花瓣宽度 (sepal length, sepal width, petal length and petal wi ...
- 最邻近规则分类KNN算法
例子: 求未知电影属于什么类型: 算法介绍: 步骤: 为了判断未知实例的类别,以所有已知类别的实例作为参照 选择参数K 计算未知实例与所有已知实例的距离 选择最近K个已 ...
- K nearest neighbor cs229
vectorized code 带来的好处. import numpy as np from sklearn.datasets import fetch_mldata import time impo ...
随机推荐
- 使用spring的JavaMail发送邮件
以前我们使用JavaMail发送邮件,步骤挺多的.现在的项目跟Spring整合的比较多.所以这里主要谈谈SpringMail发送. 导入jar包. 配置applicationContext-email ...
- Linux安装mysql教程
安装之前需要先卸载mysql 1.1.下载压缩包 [root@guohaien package]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7 ...
- HDU4417(SummerTrainingDay08-N 主席树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- macbook 外接显示器黑屏,不显示
我的mac本有点老了,11年底的那款 整了个显示器,刚开始连上没问题,后来开机状态拔了雷电线,再插 或者关机后莫名的原因再启动,显示器黑屏 网上好多方法都不行,自己总结了一个方法 拔掉连接线,关闭m ...
- JS 提升 p4
提示不多说,记住几个要点: 1.变量和函数都会提升,如下 a = 2; var a ; console.log(a); fn(); function fn(){ console.log(1); } 2 ...
- 学习ES6的全部特性
ES6 简介 ECMAScript 6 简称 ES6,是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程 ...
- Nginx控制客户端请求的速率
使用ngx_http_limit_req_module模块的两个参数 ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率 1.limit_req_zon ...
- cordova app强制横屏
非常简单,只需要在config.xml里加上这行: <preference name="Orientation" value="landscape" /& ...
- windows 10安装jdk8
1.下载jdk,选择jdk软件版本和对应windows 32/64位版本 jdk下载链接:https://www.oracle.com/technetwork/java/javase/download ...
- Python+Selenium笔记(十四)鼠标与键盘事件
(一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...