knn演算法python
❶ python,knn演算法的筆跡識別,總有地方報錯,求大神幫忙
你想把這個參數的值列印出來,但參數並不存在,最簡單的方法,把這句列印的語句注釋掉
❷ python計算每兩個向量之間的距離並保持到矩陣中
在很多演算法中都會涉及到求向量歐式距離,例如機器學習中的KNN演算法,就需要對由訓練集A和測試集B中的向量組成的所有有序對(Ai,Bi),求出Ai和Bi的歐式距離。這樣的話就會帶來一個二重的嵌套循環,在向量集很大時效率不高。
這里介紹如何將這一過程用矩陣運算實現。
假設有兩個三維向量集,用矩陣表示:
A=[a11a12a21a22a31a32]
B=⎡⎣⎢⎢b11b12b13b21b22b23b31b32b33⎤⎦⎥⎥
要求A,B兩個集合中的元素兩兩間歐氏距離。
先求出ABT:
ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13ak1bk1∑k=13ak2bk1∑k=13ak1bk2∑k=13ak2bk2∑k=13ak1bk3∑k=13ak2bk3⎤⎦⎥⎥⎥⎥⎥
然後對A和BT分別求其中每個向量的模平方,並擴展為2*3矩陣:
Asq=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2⎤⎦⎥⎥⎥⎥⎥
Bsq=⎡⎣⎢⎢⎢⎢⎢∑k=13(bk1)2∑k=13(bk1)2∑k=13(bk2)2∑k=13(bk2)2∑k=13(bk3)2∑k=13(bk3)2⎤⎦⎥⎥⎥⎥⎥
然後:
Asq+Bsq−2ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1−bk1)2∑k=13(ak2−bk1)2∑k=13(ak1−bk2)2∑k=13(ak2−bk2)2∑k=13(ak1−bk3)2∑k=13(ak2−bk3)2⎤⎦⎥⎥⎥⎥⎥
將上面這個矩陣一開平方,就得到了A,B向量集兩兩間的歐式距離了。
下面是Python實現:
import numpy
def EuclideanDistances(A, B):
BT = B.transpose()
vecProd = A * BT
SqA = A.getA()**2
sumSqA = numpy.matrix(numpy.sum(SqA, axis=1))
sumSqAEx = numpy.tile(sumSqA.transpose(), (1, vecProd.shape[1]))
SqB = B.getA()**2
sumSqB = numpy.sum(SqB, axis=1)
sumSqBEx = numpy.tile(sumSqB, (vecProd.shape[0], 1))
SqED = sumSqBEx + sumSqAEx - 2*vecProd
ED = (SqED.getA())**0.5
return numpy.matrix(ED)
❸ 如何以Python代碼實例展示kNN演算法的實際運用
給樣本數據集T={2,4,10,12,3,20,22,21,11,24} t={18},K=4 1. N={2,4,10,12},d1=16,d2=14,d3=8,d4=6 2.d={3},比較,N={4,10,12,3},d1=14,d2=8,d3=6,d4=15 3.d={20},比較,N={4,10,12,20},d1=14,d2=8,d3=6,d4=2 4.d={22},比較,N={10,12,20,22},
❹ python 問題 實現KNN演算法
iteritems直接改成items就可以了,不需要其他操作
❺ 如何用python實現knn演算法
1. 數據分類:離散型標簽 2. 數據回歸:連續型標簽 近鄰演算法的准則是:尋找接近新數據點的訓練樣本的數目,根據訓練樣本的信息來預測新數據點的某些信息。
❻ knn用python 進行預測容易實現嗎
1. 數據分類:離散型標簽
2. 數據回歸:連續型標簽
近鄰演算法的准則是:尋找接近新數據點的訓練樣本的數目,根據訓練樣本的信息來預測新數據點的某些信息。
❼ python實現KD-tree優化KNN演算法的小bug
代碼140行修改為:專
iftype(i)<>list:#增加屬
continue#增加
voteLabel=i[2]
classCount[voteLabel]=classCount.get(voteLabel,0)+1
❽ knn演算法算是一種python模型嗎
「演算法」不能算是「模型」,更不能說是「python模型」,因為python能實現的,c++、java等通用語言也能實現。
❾ 新手學習PYTHON中KNN演算法的手寫識別出現問題 求助
參考了其他博主的代碼 想試著運行 然後去理解。結果一直報錯,希望大神幫幫忙。
import numpy as np
import os
import kNN
def img2vector(filename):
"""函數將以文本格式出現的32*32的0-1圖片,轉變成一維特徵數組,返回一維數組
Keyword argument:
filename -- 文本格式的圖片文件
"""
imgvect = np.zeros((1, 1024))
fr = open(filename)
for i in range(32):
linestr = fr.readline()
for j in range(32):
imgvect[0, 32*i + j] = int(linestr[j])
return imgvect
def handwriteClassfiy(testfile, trainfile, k):
"""函數將trainfile中的文本圖片轉換成樣本特徵集和樣本類型集,用testfile中的測試樣本測試,無返回值
Keyword argument:
testfile -- 測試圖片目錄
trainfile -- 樣本圖片目錄
"""
trainFileList = os.listdir(trainfile)
trainFileSize = len(trainFileList)
labels = []
trainDataSet = np.zeros((trainFileSize, 1024))
for i in range(trainFileSize):
filenameStr = trainFileList[i]
digitnameStr = filenameStr.split('.')[0]
digitLabels = digitnameStr.split('_')[0]
labels.append(digitLabels)
trainDataSet[i, :] = img2vector(trainfile + '/' + filenameStr)
testFileList = os.listdir(testfile)
testNumber = len(testFileList)
errorcount = 0.0
for testname in testFileList:
testdigit = img2vector(testfile + '/' + testname)
classifyresult = kNN.classfiy(testdigit, trainDataSet, labels, k)
testStr = testname.split('.')[0]
testDigitLabel = testStr.split('_')[0]
if classifyresult != testDigitLabel:
errorcount += 1.0
#print('this test real digit is:%s, and the result is: %s' % (testDigitLabel, classifyresult))
print('k = %d, errorRatio is: %f' % (k, errorcount/float(testNumber)))
return
if __name__ == '__main__':
filename = 'C:/Users/lx/Desktop/MachineLearning-master/kNN/use Python and NumPy/testDigits/0_1.txt'
traindir= 'C:/Users/lx/Desktop/MachineLearning-master/kNN/use Python and NumPy/trainingDigits'
testdir = 'C:/Users/lx/Desktop/MachineLearning-master/kNN/use Python and NumPy/testDigits'
handwriteClassfiy(testdir, traindir, 3)
錯誤提示Traceback (most recent call last):
File "kNN.py", line 56, in <mole>
handwriteClassfiy(testdir, traindir, 3)
File "kNN.py", line 43, in handwriteClassfiy
classifyresult = kNN.classfiy(testdigit, trainDataSet, labels, k)
AttributeError: mole 'kNN' has no attribute 'classfiy'
你這個文件是不是就叫 kNN.py ?如果是的話那你這個裡面根本就沒有 classfiy 這個屬性,當然會報錯。
另外,import kNN 是 import 自己?