Python 에서 실 현 된 knn 알고리즘 예시

이 글 의 실례 는 Python 이 실현 한 knn 알고리즘 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
코드 참조 기계 학습 실전 그 책:
머 신 러 닝 실전(Peter Harrington 저)중국어 버 전
기계 학습 실전(Peter Harrington 저)영어 원판[소스 코드 첨부]
관심 있 으 면 알 아 보 세 요.
구체 적 인 코드:

# -*- 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("
the total number of errors is :%d"%errorCount) print("
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 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기