1,準備資料:
從檔案中讀出檔案(資料來自海倫約會**例子);展示如圖
2 ,資料歸一化
主要公式:newvalue =(oldvalue-min)/(max-min)
3,分類knn演算法**>>> tmpmat,rangs,mins =knn.autonorm(mat)
>>> tmpmat
array([[ 0.44832535, 0.39805139, 0.56233353],
[ 0.15873259, 0.34195467, 0.98724416],
[ 0.28542943, 0.06892523, 0.47449629],
...,
[ 0.29115949, 0.50910294, 0.51079493],
[ 0.52711097, 0.43665451, 0.4290048 ],
[ 0.47940793, 0.3768091 , 0.78571804]])
4,測試def classify(testvecs,dataset,labels,k):
datasetsize =dataset.shape[0]
diffmat =tile(testvecs,(datasetsize,1)) -dataset
sqdiffmat= diffmat**2
sqdistance=sqdiffmat.sum(axis=1)
distance =sqdistance**0.5
sorteddiss=distance.argsort()
classcount = {}
for i in range(k):
votelabel =labels[sorteddiss[i]]
classcount[votelabel] = classcount.get(votelabel,0)+1.0
sortedclasscount =sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=true)
def datingtest(int_k):
horatio =0.1
datingdatamat ,labels =file2mat('d:\python-機器學習\datingtestset2.txt')
normmat,ranges,minvals =autonorm(datingdatamat)
m=normmat.shape[0]
numtestvecs =int (m*horatio)
errorcount = 0.0
for i in range (numtestvecs):
classifyresult =classify(normmat[i,:],normmat[numtestvecs:m,:],labels[numtestvecs:m],int_k)
if(classifyresult != labels[i]):
errorcount=errorcount+1.0
print "the toal error rate is :%f" %(errorcount/float(numtestvecs))
出錯的點在交集處>>> reload(knn)
>>> knn.datingtest(4)
the toal error rate is :0.030000

python KNN演算法運用練習之分類
問題描述 通過對細胞7個屬性的測量得分,蛋白質的定位位點,一共有8個定位點。模型選擇與評估 用cross val score實現,返回打分結果,分數越高,效能越好。引數cv,表示幾折交叉 引數scroing,常用 neg mean absolute error mae相反數 neg mean squ...
python kNN基礎演算法 分類和推薦系統
1 k 近鄰演算法是分類資料最簡單最有效的方法。2 在將資料輸入到分類器之前,必須將待處理資料的格式改變為分類器可以接受的格式。3 所有的推薦模型都可以使用這個演算法,只要將結果量化就行了,主要是要考慮權重的設計。coding utf 8 數字型聚類分析 from numpy import impo...
Python KNN 學習曲線
學習曲線的目的是選擇更好的模型引數。以最近鄰演算法為例,選取最近的多少個資料點,才能達到最優。可以控制訓練集不動,調整最近的點的個數,繪製學習曲線。import matplotlib.pyplot as plt score krange range 1,21 k值取值範圍 for i in kran...