机器学习简要笔记(三)-KNN算法
#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算法的更多相关文章
- 机器学习实战笔记-k-近邻算法
机器学习实战笔记-k-近邻算法 目录 1. k-近邻算法概述 2. 示例:使用k-近邻算法改进约会网站的配对效果 3. 示例:手写识别系统 4. 小结 本章介绍了<机器学习实战>这本书中的 ...
- 机器学习实战(笔记)------------KNN算法
1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例: 假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...
- 机器学习实战笔记-2-kNN近邻算法
# k-近邻算法(kNN) 本质是(提取样本集中特征最相似数据(最近邻)的k个分类标签). K-近邻算法的优缺点 例 优点:精度高,对异常值不敏感,无数据输入假定: 缺点:计算复杂度高,空间复杂度高: ...
- python机器学习(2:KNN算法)
1.KNN 简介:knn算法是监督学习中分类方法的一种.它又被叫k近邻算法,是一个概念极其简单而分类效果又很优秀的分类算法. 核心思想:在训练集中选出离输入的数据最近的k个数据,根据这k个数据的类别判 ...
- 机器学习笔记(5) KNN算法
这篇其实应该作为机器学习的第一篇笔记的,但是在刚开始学习的时候,我还没有用博客记录笔记的打算.所以也就想到哪写到哪了. 你在网上搜索机器学习系列文章的话,大部分都是以KNN(k nearest nei ...
- SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
因为SVM和统计机器学习内容很多,所以从 http://www.cnblogs.com/charlesblc/p/6188562.html 这篇文章里面分出来,单独写. 为什么说SVM和统计学关系很大 ...
- 机器学习实战笔记--k近邻算法
#encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...
- 机器学习:最近邻规则KNN算法
这个算法就比较简单易懂了 就是把每个向量的特征值抽象成坐标,寻找最近的k个点,来进行划分 代码如下 #include <iostream> #include <cstdio> ...
- 机器学习实战笔记-7-AdaBoost元算法
AdaBoost(Adaptive boosting)元算法 元算法:将不同分类器组合起来的结果,也叫集成方法. AdaBoost优点:泛化错误率,易编码,可应用在大部分分类器,无参数调整:缺点:对离 ...
随机推荐
- MySQL 数据类型对比:char 与 varchar;varchar 与 text;datetime 与 timestamp;blob 与 text;
char 与 varchar char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉.所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此. char(n) 固 ...
- 如果指针为空,返回ERROR
if(!p) //是!p而不是p return ERROR;
- 编写第一个python selenium-webdriver程序(二)
上节介绍了如何搭建selenium 系统环境,那么本节来讲一下如何开始编写第一个自动化测试脚本. Selenium2.x 将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里 ...
- ASP.NET AJAX入门系列(1):概述
经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...
- NET设计模式 第三部分 结构型模式(7):适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern) ——.NET设计模式系列之八 Terrylee,2006年2月 概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但 ...
- Hive HiveServer2+beeline+jdbc客户端访问操作
HiveServer 查看/home/hadoop/bigdatasoftware/apache-hive-0.13.1-bin/bin目录文件,其中有hiveserver2 启动hiveserver ...
- Spring Cloud Zuul 快速入门
Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了 ...
- EXCEL 将网络图片地址插入为锁定的图片单元格宏
Sub InsertPic2(ByVal 图片链接 As String, ByVal 插入图片表名 As String, ByVal 插入图片单元格地址 As String) On Error Res ...
- excel技巧--文本拆分合并
如果像上图那样将一单元格内拆分成同等大小的字词,可用如下步骤: 1.将该单元格的宽度缩至拆分词的大小: 2.选择同列的适当的单元格,用于填充拆分的字符: 3.点击“开始”-->填充-->两 ...
- Winfrom控件使用
1.Lablelable添加图片,解决图片和字体重叠? Text属性添加足够空格即可,显示效果如下所示: 2.根据窗体名称获取窗体并显示到指定panel? Label item = sender as ...