#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. MySQL 数据类型对比:char 与 varchar;varchar 与 text;datetime 与 timestamp;blob 与 text;

    char 与 varchar char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉.所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此. char(n) 固 ...

  2. 如果指针为空,返回ERROR

    if(!p) //是!p而不是p return ERROR;

  3. 编写第一个python selenium-webdriver程序(二)

    上节介绍了如何搭建selenium 系统环境,那么本节来讲一下如何开始编写第一个自动化测试脚本. Selenium2.x 将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里 ...

  4. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  5. NET设计模式 第三部分 结构型模式(7):适配器模式(Adapter Pattern)

    适配器模式(Adapter Pattern) ——.NET设计模式系列之八 Terrylee,2006年2月 概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但 ...

  6. Hive HiveServer2+beeline+jdbc客户端访问操作

    HiveServer 查看/home/hadoop/bigdatasoftware/apache-hive-0.13.1-bin/bin目录文件,其中有hiveserver2 启动hiveserver ...

  7. Spring Cloud Zuul 快速入门

    Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...

  8. EXCEL 将网络图片地址插入为锁定的图片单元格宏

    Sub InsertPic2(ByVal 图片链接 As String, ByVal 插入图片表名 As String, ByVal 插入图片单元格地址 As String) On Error Res ...

  9. excel技巧--文本拆分合并

    如果像上图那样将一单元格内拆分成同等大小的字词,可用如下步骤: 1.将该单元格的宽度缩至拆分词的大小: 2.选择同列的适当的单元格,用于填充拆分的字符: 3.点击“开始”-->填充-->两 ...

  10. Winfrom控件使用

    1.Lablelable添加图片,解决图片和字体重叠? Text属性添加足够空格即可,显示效果如下所示: 2.根据窗体名称获取窗体并显示到指定panel? Label item = sender as ...