本文实例讲述了Python实现的knn算法。分享给大家供大家参考,具体如下:

代码参考机器学习实战那本书:

有兴趣你们可以去了解下

具体代码:

# -*- coding:utf-8 -*-

#! python2

'''''

@author:zhoumeixu

createdate:2015年8月27日

'''

#np.zeros((4,2))

#np.zeros(8).reshape(4,2)

#x=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) np.zeros_like(x)

# 最值和排序:最值有np.max(),np.min() 他们都有axis和out(输出)参数,

# 而通过np.argmax(), np.argmin()可以得到取得最大或最小值时的 下标。

# 排序通过np.sort(), 而np.argsort()得到的是排序后的数据原来位置的下标

# 简单实现knn算法的基本思路

import numpy as np

import operator #运算符操作包

from _ctypes import Array

from statsmodels.sandbox.regression.kernridgeregress_class import plt_closeall

def createDataSet():

group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

labels=['A','A','B','B']

return group ,labels

group,labels=createDataSet()

def classify0(inx,dataSet,labels,k):

dataSetSize=dataSet.shape[0]

diffMat=np.tile(inx,(dataSetSize,1))-dataSet

sqDiffMat=diffMat**2

sqDistances=sqDiffMat.sum(axis=1)

distances=sqDistances**0.5 #计算距离 python中会自动广播的形式

sortedDistIndicies=distances.argsort() #排序,得到原来数据的在原来所在的下标

classCount={}

for i in range(k):

voteIlabel=labels[sortedDistIndicies[i]] # 计算距离最近的值所在label标签

classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 # 计算距离最近的值所在label标签,对前k哥最近数据进行累加

sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True) #排序得到距离k个最近的数所在的标签

return sortedClassCount[0][0]

if __name__=='__main__':

print(classify0([0,0],group,labels,4))

# 利用knn算法改进约会网站的配对效果

def file2matrix(filename):

fr=open(filename)

arrayOLines=fr.readlines()

numberOfLines=len(arrayOLines)

returnMat=np.zeros((numberOfLines,3))

classLabelVector=[]

index=0

for line in arrayOLines:

line=line.strip()

listFromLine=line.split('\t')

returnMat[index,:]=listFromLine[0:3]

classLabelVector.append(int(listFromLine[-1]))

index+=1

return returnMat ,classLabelVector #生成训练数据的array和目标array

path=u'D:\\Users\\zhoumeixu204\\Desktop\\python语言机器学习\\机器学习实战代码 python\\机器学习实战代码\\machinelearninginaction\\Ch02\\'

datingDataMat,datingLabels=file2matrix(path+'datingTestSet2.txt')

import matplotlib

import matplotlib.pyplot as plt

fig=plt.figure()

ax=fig.add_subplot(111)

ax.scatter(datingDataMat[:,1],datingDataMat[:,2])

plt.show()

ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*np.array(datingLabels),15*np.array(datingDataMat[:,2]))

plt.show() #生成训练数据的array和目标array

def autoNorm(dataset):

minVals=dataset.min(0)

maxVals=dataset.max(0)

ranges=maxVals-minVals

normeDataSet=np.zeros(np.shape(dataset))

m=dataset.shape[0]

normDataSet=dataset-np.tile(minVals,(m,1))

normDataSet=normDataSet/np.tile(ranges,(m,1))

return normDataSet ,ranges,minVals

normMat,ranges,minVals=autoNorm(datingDataMat)

def datingClassTest():

hoRatio=0.1

datingDataMat,datingLabels=file2matrix(path+'datingTestSet2.txt')

normMat,ranges,minVals=autoNorm(datingDataMat)

m=normMat.shape[0]

numTestVecs=int(m*hoRatio)

errorCount=0.0

for i in range(numTestVecs):

classifierResult=classify0(normMat[i,:], normMat[numTestVecs:m,:], datingLabels[numTestVecs:m],3)

print "the classifier came back with :%d,the real answer is :%d"\

%(classifierResult,datingLabels[i])

if classifierResult!=datingLabels[i]:

errorCount+=1.0

print "the total error rare is :%f"%(errorCount/float(numTestVecs)) #利用knn算法测试错误率

if __name__=='__main__':

datingClassTest()

#利用构建好的模型进行预测

def classifyPerson():

resultList=['not at all','in same doses','in large d oses']

percentTats=float(raw_input("percentage if time spent playin cideo games:"))

ffMiles=float(raw_input("frequnet fliter miles earned per year:"))

iceCream=float(raw_input("liters of ice cream consumed per year:"))

datingDataMat,datingLabels=file2matrix(path+'datingTestSet2.txt')

normMat,ranges,minVals=autoNorm(datingDataMat)

inArr=np.array([ffMiles,percentTats,iceCream])

classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3)

print("you will probably like the person:",resultList[classifierResult-1])

if __name__!='__main__':

classifyPerson()

#利用knn算法进行手写识别系统验证

path=u'D:\\Users\\zhoumeixu204\\Desktop\\python语言机器学习\\机器学习实战代码 python\\机器学习实战代码\\machinelearninginaction\\Ch02\\'

def img2vector(filename):

returnVect=np.zeros((1,1024))

fr=open(filename)

for i in range(32):

lineStr=fr.readline()

for j in range(32):

returnVect[0,32*i+j]=int(lineStr[j])

return returnVect

testVector=img2vector(path+'testDigits\\0_13.txt')

print(testVector[0,0:31])

import os

def handwritingClassTest():

hwLabels=[]

trainingFileList=os.listdir(path+'trainingDigits')

m=len(trainingFileList)

trainingMat=np.zeros((m,1024))

for i in range(m):

fileNameStr=trainingFileList[i]

fileStr=fileNameStr.split('.')[0]

classNumStr=int(fileStr.split('_')[0])

hwLabels.append(classNumStr)

trainingMat[i,:]=img2vector(path+'trainingDigits\\'+fileNameStr)

testFileList=os.listdir(path+'testDigits')

errorCount=0.0

mTest=len(testFileList)

for j in range(mTest):

fileNameStr=testFileList[j]

fileStr=fileNameStr.split('.')[0]

classNumStr=int(fileNameStr.split('_')[0])

classNumStr=int(fileStr.split('_')[0])

vectorUnderTest=img2vector(path+'testDigits\\'+fileNameStr)

classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3)

print("the classifier canme back with:%d,the real answer is :%d"%(classifierResult,classNumStr))

if classifierResult!=classNumStr:

errorCount+=1.0

print("\nthe total number of errors is :%d"%errorCount)

print("\n the total error rate is :%f"%(errorCount/float(mTest)))

if __name__=='__main__':

handwritingClassTest()

运行结果如下图:

注:这里使用到了statsmodels模块,可以点击此处本站下载statsmodels安装模块,再进入statsmodels模块所在目录位置,使用:

pip install statsmodels-0.9.0-cp27-none-win32.whl

进行statsmodels模块的安装

同理,出现ImportError: No module named pandas错误提示时,点击此处本站下载pandas模块,再使用

pip install pandas-0.23.1-cp27-none-win32.whl

进行pandas模块的安装

希望本文所述对大家Python程序设计有所帮助。

knn算法实例python_Python实现的knn算法示例相关推荐

  1. 人工神经网络算法实例代码,人工神经网络算法步骤

    神经网络算法实例说明有哪些? 在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能.构作专家系统.制成机器人.复杂系统控制等等. 纵观当代新兴科学技 ...

  2. 神经网络算法实例说明,简单神经网络算法原理

    神经网络算法实例说明有哪些? 在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能.构作专家系统.制成机器人.复杂系统控制等等. 纵观当代新兴科学技 ...

  3. java实现lz77算法实例_数据压缩算法---LZ77算法 的分析与实现

    LZ77简介 Ziv和Lempel于1977年发表题为"顺序数据压缩的一个通用算法(A Universal Algorithm for Sequential Data Compression ...

  4. cart算法实例matlab,matlab 决策树cart算法源代码

    matlab源码 决策树 c4.5 cart function D = CART(train_features, train_targets, params, region) % Classify u ...

  5. linux加密框架 crypto 算法管理 - 创建哈希算法实例

    crypto_alloc_ahash函数 加密框架中的哈希算法可以是同步方式实现的也可以是异步方式实现的,但是算法应用不关注哈希算法的实现方式,关注的是哈希算法提供的算法接口.为实现统一管理,加密框架 ...

  6. knn算法实例python_kNN算法及其Python实例

    2017 September 10 kNN kNN算法及其Python实例 在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on ...

  7. KNN算法(二) sklearn KNN实践

    上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法. 一.Skelarn KNN参数概述 要使用sklearnKNN算法进行分类,我们需要先了解sklearn ...

  8. 机器学习-有监督学习-分类算法:k-近邻(KNN)算法【多分类】

    一.K-近邻算法简介 1.K-近邻算法(KNN)概念 k-近邻算法:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 相似的样本,同一 ...

  9. KNN(K-最近邻分类)分类算法

    惰性学习法(或近邻分类) 前面提高的所有分类方法--决策树分类,贝叶斯分类,基于规则的分类,贝叶斯网络分类,神经网络分类,支持向量机分类和使用频繁模式的分类都是急切学习法的例子. 何为急切学习法呢? ...

最新文章

  1. 弹出显示多条的message对话框
  2. SpringBoot运行时提示:Error starting ApplicationContexxt,To display the uto-configration report re-run you
  3. 计算机进阶操作,新手进阶Win7系统操作使用手册
  4. cron4j的Jfinal plugin
  5. 20220129CTF刷题-- WEB方向
  6. 各种模板(数学数论字符串)
  7. jq ajax traditional,jQuery ajax - param() 方法
  8. spark源码分析之Executor启动与任务提交篇
  9. 2.Eclipse上mysql插件配置及远程连接云数据库测试
  10. 【华为云技术分享】网络场景AI模型训练效率实践
  11. html编辑器 开发原理,在线所见即所得HTML编辑器的实现原理浅析
  12. 如何解决“呈现控件时出错”的问题(转)
  13. 若非疯子怎会选择创业
  14. 【毕业设计】基于大数据的抖音短视频数据分析与可视化 - python 大数据 可视化
  15. 2020年你还不会做绿幕特效?这4步基础技巧要点了解一下!
  16. 免费支持顺丰、四通一达、EMS等快递物流单号查询的开放接口?
  17. javasprit基础用法
  18. 纯音乐 -《抒情中国系列-烟雨江南》
  19. 其他:鼠标滚轴坏了如何修?
  20. 很抱歉,EXCEL遇到错误,使其无法正常工作,因此需要关闭EXCEL。是否希望我们立即修复?...

热门文章

  1. Javascript 汉字拼音排序
  2. Kafka学习之二 Kafka安装和使用
  3. 当array_filter函数的callback留空时 他会过滤掉所有键值为false的键
  4. Palindrome Degree(hash的思想题)
  5. Dataguard后台进程解析
  6. python 安装 setuptools Compression requires the (missing) zlib module 的解决方案
  7. Spring AOP AspectJ 代码实例
  8. 简析GeoServer服务的内部文件组织以及GeoServer自动化服务发布工具的开发思路
  9. hdu 2602 Bone Collector 解题报告
  10. Nginx的反向代理的配置