#coding:utf-8

 import numpy as np
import operator def classify(intX,dataSet,labels,k):
'''
KNN算法
'''
dataSetSize =dataSet.shape[0]
##numpy 中shape[0]返回数组的行数,shape[1]返回列数
##构建计算矩阵
##intX横向重复dataSetSize次,纵向重复1次
##例如intX=([1,2])--->([[1,2],[1,2],[1,2],[1,2]])便于后面计算
diffMat=np.tile(intX,(dataSetSize,1))-dataSet
##将待分类样品复制dataSetSize份并与dataSet每个测试样一一对应
##计算待分类样品与已知样品的对应特征差值的平方
sqdiffMat=diffMat**2
##计算待分类样品与每个已知样品的欧式距离
seqDistance=sqdiffMat.sum(axis=1) ##axis=1代表横轴(第1轴),0代表竖轴(第0轴)
distance=seqDistance**0.5
print "distance:",distance
##返回distance中元素从小到达排序后的索引
sortDistance=distance.argsort()
print "SortDistance:",sortDistance
classCount={}
for i in range(k):
voteLabel=labels[sortDistance[i]]
#print "第 %d 个 voteLabel = %s" %(i,voteLabel)
classCount[voteLabel]=classCount.get(voteLabel,0)+1
##dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值
##计算类别次数
##key = operator.itemgetter(1)根据字典的值进行排序
##key = operator.itemgetter(0)根据字典的键进行排序
##reverse 降序排序字典
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
##sortClassCount={[“动作片”,2],("爱情片",1])
print "sortedClassCount:",sortedClassCount
return sortedClassCount[0][0] def File2Matrix(filename):
fr=open(filename,'r')
FileLines=fr.readlines()
##获取数据的行数
NumOfFLines=len(FileLines)
##建立数据返回矩阵
returnMat=np.zeros([NumOfFLines,3])
##返回分类标签
classLabelVector=[]
##行索引
index=0
for line in FileLines[1:]:
line=line.strip()##删除收尾空白字符
listFromLine =line.split("\t")
##每行数据是\t划分的,将每行数据按照\t进行切片划分
returnMat[index,:]=listFromLine[1:4]
##根据文本划分为1,2,3类
if listFromLine[-1]=="I. setosa":
classLabelVector.append(1)
elif listFromLine[-1]=="I. versicolor":
classLabelVector.append(2)
else:
classLabelVector.append(3)
index+=1
fr.close()
return returnMat,classLabelVector if __name__ =="__main__":
datas,labels=File2Matrix("iris_data.txt")
print datas[0:4]
print labels[0:4]
test = [5.9,3.0,5.1]
test_class = myKNN.classify(test,datas,labels,5)
if test_class=="":
print "I. setosa"
elif test_class=="":
print "I. virginica"
else:
print "I. versicolor"

'''本文件实现KNN
KNN算法的本质上使用模板匹配的思想。
要确定一个样本的类别,可以计算它与所有训练样本的距离,
然后找出和该样品最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。
'''
'''
KNN算法是一种判别算法,即可支持分类,也可支持回归,是一种非线性模型。
它天然的支持多分类问题。KNN算法没有训练过程,是一种基于实例的算法。
KNN实现对Iris数据的分类。
'''
'''
KNN算法步骤
(1)计算距离
(2)选择距离最小的k个点
(3)排序
'''

机器学习简要笔记(三)-KNN算法的更多相关文章

  1. 机器学习实战笔记-k-近邻算法

    机器学习实战笔记-k-近邻算法 目录 1. k-近邻算法概述 2. 示例:使用k-近邻算法改进约会网站的配对效果 3. 示例:手写识别系统 4. 小结 本章介绍了<机器学习实战>这本书中的 ...

  2. 机器学习实战(笔记)------------KNN算法

    1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例:         假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...

  3. 机器学习实战笔记-2-kNN近邻算法

    # k-近邻算法(kNN) 本质是(提取样本集中特征最相似数据(最近邻)的k个分类标签). K-近邻算法的优缺点 例 优点:精度高,对异常值不敏感,无数据输入假定: 缺点:计算复杂度高,空间复杂度高: ...

  4. python机器学习(2:KNN算法)

    1.KNN 简介:knn算法是监督学习中分类方法的一种.它又被叫k近邻算法,是一个概念极其简单而分类效果又很优秀的分类算法. 核心思想:在训练集中选出离输入的数据最近的k个数据,根据这k个数据的类别判 ...

  5. 机器学习笔记(5) KNN算法

    这篇其实应该作为机器学习的第一篇笔记的,但是在刚开始学习的时候,我还没有用博客记录笔记的打算.所以也就想到哪写到哪了. 你在网上搜索机器学习系列文章的话,大部分都是以KNN(k nearest nei ...

  6. SVM(支持向量机)与统计机器学习 & 也说一下KNN算法

    因为SVM和统计机器学习内容很多,所以从 http://www.cnblogs.com/charlesblc/p/6188562.html 这篇文章里面分出来,单独写. 为什么说SVM和统计学关系很大 ...

  7. 机器学习实战笔记--k近邻算法

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  8. 机器学习:最近邻规则KNN算法

    这个算法就比较简单易懂了 就是把每个向量的特征值抽象成坐标,寻找最近的k个点,来进行划分 代码如下 #include <iostream> #include <cstdio> ...

  9. 机器学习实战笔记-7-AdaBoost元算法

    AdaBoost(Adaptive boosting)元算法 元算法:将不同分类器组合起来的结果,也叫集成方法. AdaBoost优点:泛化错误率,易编码,可应用在大部分分类器,无参数调整:缺点:对离 ...

随机推荐

  1. elasticsearch:shard 和 replica 机制

    shard 和 replica 机制: index包含多个shard 每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处理请求的能力 增减节点时,shard会自动在 ...

  2. TypeScript 之 三斜线指令

    https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Triple-Slash%20Directives.html 一个三 ...

  3. mysql 5.45 以后需要 需要 安全套接字问题

    错误异常:According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established ...

  4. Centos 7 Saltstack 集群

    一. Saltstack  双master master1 -------------------master2 | minion master1 1.yum -y install  salt-mas ...

  5. 利用js获取客户端ip的方法

    1. 通过script标签引入url 比如如下代码: <script type="text/javascript" src="http://pv.sohu.com/ ...

  6. Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(

    application.class要放在根目录下,否则会发生以下错误

  7. SQL中varchar和nvarchar有什么区别

    varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字节的实际长度,而不是 n 个字节. nvar ...

  8. SQL Server孤立账户解决办法

    选择你想要的数据库. 执行 exec sp_change_users_login 'UPDATE_ONE','用户名','登录名' 假如你的登录名是:sd exec sp_change_users_l ...

  9. Docker镜像构建上下文(Context)

    镜像构建上下文(Context) Dicker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为 ...

  10. Mysql 性能优化4 mysql参数配置

    mysql 参数的介绍 大概450项参数,大多保持默认就可以了 错误的参数 崩溃,错误,运行缓慢. 参数最好在生产环境前配置好.最好不要在生产环境 中 直接配置,有可能不会立即生效,或者之前的数据和配 ...