k-近邻分类的Python实现
参见《机器学习实战》
- # -*- coding:cp936 -*-
- #===============================================================================
- # 设计KNN最近邻分类器:
- # 找出每个元素在数据集中的最近邻的K个数据,统计这K个数据所属的类,所属类最多的那个类就是该元素所属的类
- #===============================================================================
- import numpy as np
- def loadHaiLunData(f_name):
- with open(f_name) as fHandle:
- fLines = fHandle.readlines()
- dataLines = len(fLines)
- label = []
- dataSetMat = np.zeros((dataLines,3))
- for i in range(dataLines):
- lineList = fLines[i].strip().split('\t')
- dataSetMat[i,:] = lineList[0:3]
- label.append(int(lineList[-1]))
- return dataSetMat,label
- def dataNorm(dataSet):
- numOfEle = dataSet.shape[0]
- minEle = dataSet.min(0)
- maxEle = dataSet.max(0)
- normedData = (dataSet-np.tile(minEle,(numOfEle,1)))/np.tile(maxEle-minEle,(numOfEle,1))
- return normedData
- def classifyKnn(inX, dataSet, label, k):
- #===========================================================================
- # inX:输入向量
- # dataSet:保存数据特征的数组,每一行为若干个特征的参数,与label对应
- # label:表明当前这个数据集中的每一个元素属于哪一类
- # k:设定最近邻的个数
- #===========================================================================
- #首先对数据集进行归一化
- # dataSet = dataNorm(dataSet)
- numOfEle = dataSet.shape[0]
- index = 0
- diffDistance = dataSet - np.tile(inX, (numOfEle,1))
- diffDistance = diffDistance**2
- squareDistance = diffDistance.sum(1)
- # squareDistance = squareDistance**0.5
- knnIndex = squareDistance.argsort()
- #统计最近的k个近邻的label,看哪个label类别最多就可将该训练元素判为对应类
- staticDict = {}
- for i in range(k):
- staticDict[label[knnIndex[i]]]=staticDict.get(label[knnIndex[i]],0)+1
- itemList = staticDict.items()
- argmax = np.argmax(itemList, axis = 0)
- return itemList[argmax[1]][0]
- def testHaiLunClassify(k = 3, hRatio = 0.5):
- dataSet,label = loadHaiLunData('datingTestSet2.txt')
- # hRatio = 0.5
- totalNum = dataSet.shape[0]
- testNum = int(totalNum*hRatio)
- dataNormed = dataNorm(dataSet)
- errorClass = 0
- for i in range(testNum):
- classRes = classifyKnn(dataNormed[i,:], dataNormed[testNum:,:], label[testNum:], k)
- if classRes != label[i]:
- errorClass += 1
- # print "classify error, No. %d should be label %d but got %d"%(i, label[i],classRes)
- errorRate = errorClass/float(testNum)
- # print "Error rate: %f"%(errorRate)
- return errorRate
- if __name__ == '__main__':
- errorList = []
- kRange = range(1,50,1)
- for k in kRange:
- errorList.append(testHaiLunClassify(k))
- print errorList
- import matplotlib.pyplot as plt
- fig = plt.figure(1)
- # ax = fig.add_subplot(111)
- plt.plot(kRange, errorList,'rs-')
- plt.show()
k-近邻分类的Python实现的更多相关文章
- K近邻分类算法实现 in Python
K近邻(KNN):分类算法 * KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning. * KNN不适用于高维数据(c ...
- 每日一个机器学习算法——k近邻分类
K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...
- 查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响
代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 09:36:49 2018 @author: zhen &qu ...
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
- Python机器学习基础教程-第2章-监督学习之K近邻
前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...
- 机器学习PR:k近邻法分类
k近邻法是一种基本分类与回归方法.本章只讨论k近邻分类,回归方法将在随后专题中进行. 它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过 ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- (数据挖掘-入门-6)十折交叉验证和K近邻
主要内容: 1.十折交叉验证 2.混淆矩阵 3.K近邻 4.python实现 一.十折交叉验证 前面提到了数据集分为训练集和测试集,训练集用来训练模型,而测试集用来测试模型的好坏,那么单一的测试是否就 ...
- 数据挖掘算法(一)--K近邻算法 (KNN)
数据挖掘算法学习笔记汇总 数据挖掘算法(一)–K近邻算法 (KNN) 数据挖掘算法(二)–决策树 数据挖掘算法(三)–logistic回归 算法简介 KNN算法的训练样本是多维特征空间向量,其中每个训 ...
- 机器学习--K近邻 (KNN)算法的原理及优缺点
一.KNN算法原理 K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法. 它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对 ...
随机推荐
- WEB开发者必备的7个JavaScript函数
防止高频调用的debounce函数 这个 debounce 函数对于那些执行事件驱动的任务来说是必不可少的提高性能的函数.如果你在使用scroll, resize, key*等事件触发执行任务时不使用 ...
- Redis hash数据类型操作
Redis hash是一个string类型的field和value的映射表.一个key可对应多个field,一个field对应一个value.将一个对象存储 为hash类型,较于每个字段都存储成str ...
- http://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html
http://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html
- WPF之外观模式
名词解释: 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义一个高层接口,这个接口使得这一子系统更加容易使用. 必要元素: 一个外观类和多个子系统类(外观类中注入各个子系统类). 上例子: ...
- CVE爬虫抓取漏洞URL
String url1="http://www.cnnvd.org.cn/vulnerability/index/vulcode2/tomcat/vulcode/tomcat/cnnvdid ...
- 图模型的统计推断 inference in graphical models(马尔科夫链的推断)
有关因子图(factor graphs)以及其在sum product 算法,max-algorithm中的应用,将在一下篇博客中分享. 谢谢您的关注,欢迎提出意见问题.
- The document has been modified outside of Code Composer. Would you like to reload the file
2013-06-20 10:03:32 烧写过程是合众达给出的文档 problem: I'm new to using Code Composer Studio 3.3 and am having a ...
- unite
列出某个集合里的项目,比如file,buffer等 :United file——列出文件 :United buffer——列出buffer :United file_rec——递归列出文件 进入Uni ...
- [原]Unity3D深入浅出 - 认识开发环境中的RenderSettings面板
点击菜单栏的Edit项里的RenderSettings即可打开该面板. Fog:在Scene中开启雾效果 Fog Color:雾的颜色 Fog Mode:雾效果的模式,Linear(线性雾效果) Ex ...
- asp.net(vs2005) + Sql2000 缓存依赖
1.开启数据库缓存依赖支持 开始,运行,cmd 输入 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql -S localhost ...