机器学习简要笔记(三)-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优点:泛化错误率,易编码,可应用在大部分分类器,无参数调整:缺点:对离 ...
随机推荐
- php 数组排序 按照某字段
$arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=&g ...
- oracle-sql分析练习
http://blog.chinaunix.net/uid-13552913-id-3028644.html Oracle 修改字段顺序的两种方法 一 如果要修改字段顺序,一般情况可以使用以下步骤: ...
- Learn ft=rom WTL: CXXImpl<T>
// t9.cpp : Defines the entry point for the console application. // #include "stdafx.h" cl ...
- 代码风格统一工具:EditorConfig 和 静态代码检查工具:ESLint
EditorConfig 最常见的用途是:统一文件的编码字符集以及缩进风格 使用 Eslint 做代码 lint,那么为什么还要使用 .editorconfig 呢?细细想了下,应该有两个方面吧. E ...
- Springboot配置文件映射
添加类和配置文件的映射: 1.定义映射类 @Component @PropertySource("classpath:config/XX.properties") public c ...
- Linux Tomcat自启动
1. 修改/etc/rc.d/文件夹下的rc.lcoal 添加如下内容 export JAVA_HOME=/usr/java/jdk/jdk1.7.0_80 export JRE_HOME=$JAVA ...
- Fabric Engine2.0的自定义节点功能
Fabric Engine是一个多用途的引擎,针对maya等软件写节点写功能很方便.尤其是canvas节点编辑面板,提供了大量现有的功能供用户调用,当然这些节点功能都是可被用户编辑修改的,除此之外还提 ...
- kali 安装qq
使用的是longene TM2013 下载地址(百度云):http://pan.baidu.com/s/1dFx8azv 安装: 64位的需要安装32位依赖文件 用这条命令 apt-get insta ...
- Thinkphp 3.1. 3 ueditor 1.4.3 添加水印
1.引入Ueditor <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...
- 查看耗时长,CPU 100% 的SQL
[session_id], [request_id], [start_time] AS '开始时间', [status] AS '状态', [command] AS '命令', dest.[text] ...