




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄一、K-近鄰算法優(yōu)缺點二、K-近鄰算法工作原理及示例三、K-近鄰算法的一般流程四、準備:使用Python導入數(shù)據(jù)五、實施kNN分類算法六、示例1:改進約會網(wǎng)站的配對結果七、示例2:手寫識別系統(tǒng)八、小結第1頁/共52頁K-近鄰算法優(yōu)缺點 簡單地說,K-近鄰算法 (又稱KNN)采用測量不同特征值之間的距離方法進行分類。 其優(yōu)缺點及適用數(shù)據(jù)范圍如下: 優(yōu)點:精度高、對異常值不敏感、無數(shù)據(jù)輸入假定。缺點:計算復雜度高、空間復雜度高。適用數(shù)據(jù)范圍:數(shù)值型和標稱型。第2頁/共52頁K-近鄰算法工作原理1.工作原理:存在一個樣本數(shù)據(jù)集合(1)(也稱為訓練樣本集),并且樣本集中每個數(shù)據(jù)都存在標簽(即我們知
2、道樣本集中每一數(shù)據(jù)與所屬分類的對應關系(2)。輸入沒有標簽的新數(shù)據(jù)后,將新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應的特征進行比較,然后算法提供樣本集中特征最相似數(shù)據(jù)(最近鄰)的分類標簽(3)。一般來說,我們只選擇樣本數(shù)據(jù)集中前k 個最相似的數(shù)據(jù)(4),這便是算法中k的出處(通常k20)。最后,選擇k個最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類,作為新標簽的分類。第3頁/共52頁K-近鄰算法示例2.示例(1)問題描述:電影的分類可以按照題材來,然而題材本身是如何定義的?也就是說同一題材的電影具有哪些共同特征?這些都是電影分類時必須要考慮的因素?,F(xiàn)在有一種簡單的方法,例如在愛情片中會出現(xiàn)打斗場面,動作片亦會出現(xiàn)輕吻鏡
3、頭,但是很明顯兩者的頻率是不同的,因此接下來將講述K-近鄰算法關于此的簡單應用。第4頁/共52頁K-近鄰算法示例(2)下圖示例了六部電影的打斗和接吻鏡頭數(shù)。第5頁/共52頁K-近鄰算法示例(3)假如有一部未看過的電影,如何確定它是愛情片還是動作片呢?接下來將展示如何使用KNN來解決這個問題。 首先我們需要知道需分類電影的打斗鏡頭和接吻鏡頭數(shù)量,下圖給出了一個詳細示例:第6頁/共52頁K-近鄰算法示例即使不知道待分類電影屬于哪種類型,我們也可以通過某種方法計算方法。下圖展示的是待分類電影與樣本集中其他電影的距離計算結果: (此處暫時不關心如何計算得到的這些距離值,稍后會具體講解。)第7頁/共52
4、頁K-近鄰算法示例 現(xiàn)在我們得到了樣本集中所有電影與未知電影的距離,按照距離遞增排序,可以找到k個距離最近的電影。假定k=3,則三個最靠近的電影依次是Hes Not Really into Dudes、Beautiful Woman和California Man。 結果: K-近鄰算法按照距離最近的三部電影的類型,決 定待分類電影的類型,而這三部電影均為愛情片, 因此我們判定待分類電影為愛情片。第8頁/共52頁K-近鄰算法的一般流程接下來主要講解如何在實際中應用K-近鄰算法,同時涉及如何使用Python工具和相關的機器學習術語,以下為該算法的一般流程: (1)收集數(shù)據(jù):可以使用任何方法。 (2
5、)準備數(shù)據(jù):距離計算所需要的數(shù)值,最好是結構化的數(shù)據(jù)格式。 (3)分析數(shù)據(jù):可以使用任何方法。 (4)測試算法:計算錯誤率。 (5)使用算法:首先需要輸入樣本數(shù)據(jù)和結構化的輸出結果,然后運行k-近鄰算法判定輸入數(shù)據(jù)屬于哪個分類,最后應用對計算出的分類執(zhí)行后續(xù)的處理。第9頁/共52頁準備:使用Python導入數(shù)據(jù)1.創(chuàng)建名為kNN.py的Python模塊注:接下來所有的代碼均保存于這個文件夾中,讀者可以按照自己的習慣在自己創(chuàng)建的文件夾中編寫代碼,也可以去網(wǎng)上查找源代碼,但筆者建議讀者按照本PPT的順序去創(chuàng)建模塊并編寫代碼。(1)首先編寫一些基本的通用函數(shù),將下列代碼保存在創(chuàng)建好的kNN.py文件
6、中:from numpy import*import operatordef createDataSet(): group = array(1.0, 1.1, 1.0, 1.0, 0, 0, 0, 0.1) labels = A, A, B, B return group, labels第10頁/共52頁準備:使用Python導入數(shù)據(jù) 在上述代碼中,我們導入了兩個模塊:科學計算包Numpy以及運算符模塊,k-近鄰算法執(zhí)行排序操作時將使用這個模塊提供的參數(shù),后面我們將進一步介紹。 為了方便使用createDataSet()函數(shù),它創(chuàng)建數(shù)據(jù)集和標簽,我們需進入Python開發(fā)環(huán)境并輸入以下命令:
7、(1) import kNN 上述命令導入kNN模塊。第11頁/共52頁準備:使用Python導入數(shù)據(jù) (2)為了確保輸入相同的數(shù)據(jù)集,繼續(xù)輸入以下命令: group,labels = kNN.createDataSet() 該命令創(chuàng)建了變量group和labels。 (3)輸入變量的名字以檢驗是否正確的定義變量: group 第12頁/共52頁準備:使用Python導入數(shù)據(jù) labels 結果顯示,這里有四組數(shù)據(jù),每組數(shù)據(jù)有兩個我們已知的屬性或特征值。上面的group矩陣每行包含一個不同的數(shù)據(jù),我們可以將其想象成某個日志文件中不同的測量點或者入口。由于人類大腦的限制,我們通常只能可視化處理三
8、維以下的實務。因此為了簡單地實現(xiàn)數(shù)據(jù)可視化,對于每個數(shù)據(jù)點我們通常只使用兩個特征。 向量labels包含了每個數(shù)據(jù)點的標簽信息,labels包含的元素個數(shù)等于group矩陣行數(shù)。這里我們將數(shù)據(jù)點(1,1.1)定義為A類,數(shù)據(jù)點(0,0.1)定義為B類。為了方便說明,例子中的數(shù)值是任意選擇的,并沒有給出軸標簽。 第13頁/共52頁實施kNN分類算法現(xiàn)在我們已經(jīng)知道Python如何解析數(shù)據(jù),如何加載數(shù)據(jù),以及kNN算法的工作原理,接下來我們將使用這些方法完成分類任務。(1)以下為K-近鄰算法的偽代碼對未知類別屬性的數(shù)據(jù)集中的每個點依次執(zhí)行以下操作: 計算已知類別數(shù)據(jù)集中點與當前點之間的距離; 按照
9、距離遞增次序排序; 選取與當前點距離最小的k個點; 確定前k個點所在類別出現(xiàn)的頻率; 返回前k個點出現(xiàn)頻率最高的類別作為當前點的預測分類。第14頁/共52頁實施kNN分類算法(2)以下為kNN近鄰算法代碼,將其保存于kNN.py中def classify0(inX, dataSet, labels, k): dataSetSize = dataSet.shape0 diffMat = tile(inX, (dataSetSize,1) - dataSet sqDiffMat = diffMat*2 sqDistances = sqDiffMat.sum(axis = 1) distances
10、= sqDistances*0.5 sortedDistIndicies = distances.argsort() classCount = for i in range(k): voteIlabel = labelssortedDistIndiciesi classCountvoteIlabel = classCount.get(voteIlabel,0) + 1 sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1), reverse = True) return sortedClass
11、Count00第15頁/共52頁實施kNN分類算法 classify0()函數(shù)有四個參數(shù):用于分類的輸入向量inX,輸入的樣本訓練集為dataSet,標簽向量為labels,最后的參數(shù)k表示用于選擇最近鄰居的數(shù)目,其中標簽向量和矩陣dataSet的行數(shù)相同; 代碼中下劃線部分用于距離計算,使用的是歐式距離公式; 傾斜字體部分為對距離計算完畢后的數(shù)據(jù)按照從小到大的次序排序并確定前k個距離最小元素所在的主要分類(k總為正整數(shù));第16頁/共52頁實施kNN分類算法 傾斜+下劃線部分為使用運算符模塊的itemge-tter方法,按照第二個元素的次序對元組進行排序,此處的排序為逆序,最后返回發(fā)生頻率最
12、高的元素標簽。(3)為了預測數(shù)據(jù)所在分類,在Python提示符中輸入以下命令: kNN.classify0(0,0, group, labels, 3)第17頁/共52頁實施kNN分類算法顯然輸出結果為B,當然也可以輸入其他值例如0.5,0.5,結果如下:到目前為止,我們已經(jīng)構建了一個分類器,接下來我們將從實例出發(fā)進行講解:(4)關于分類器分類器并不會得到100%正確的結果,我們可以通過錯誤率來進行評估。第18頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果1.問題描述:我都朋友佩琪一直使用在線約會網(wǎng)站尋找適合自己的約會對象。盡管約會網(wǎng)站會推薦不同的人選,但是她并不是喜歡每一個人。經(jīng)過
13、一番總結,她發(fā)現(xiàn)曾交往過三種類型的人:p 不喜歡的人p 魅力一般的人p 極具魅力的人第19頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果盡管發(fā)現(xiàn)了上述規(guī)律,但佩琪依然無法將約會網(wǎng)站推薦的匹配對象歸入恰當?shù)念悇e。她覺得可以在周一至約會那些魅力一般的人,而周末則更喜歡與那些極具魅力的人為伴。佩琪希望我們的分類軟件可以更好的幫助她將匹配到的對象劃分到確切的分類中。此外,佩琪還收集了一些約會網(wǎng)站未曾記錄的數(shù)據(jù)信息并保存在了文本文件datingTestSet2.txt中。第20頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(2)佩琪保存的樣本具有以下3個特征:p 每年獲得的飛行常客里
14、程數(shù)p 玩視頻游戲所耗時間百分比p 每周消費的冰淇淋公升數(shù)在將上述特征數(shù)據(jù)輸入到分類器之前,必須將待處理數(shù)據(jù)的格式改變?yōu)榉诸惼骺梢越邮艿母袷?。在kNN.py文件中添加名為file2matrix的函數(shù),以此來處理該問題。第21頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(3)file2matrix()代碼如下,即將文本記錄轉換為Numpy的解析程序:def file2matrix(filename): fr = open(filename) arrayOLines = fr.readlines() numberOfLines = len(arrayOLines) returnMat
15、= zeros(numberOfLines,3) classLabelVector = index = 0 for line in arrayOLines: line = line.strip() listFromLine = line.split(t) returnMatindex,: = listFromLine0:3 classLabelVector.append(int(listFromLine-1) index += 1 return returnMat, classLabelVector第22頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果該函數(shù)的輸入為文件名字符串,輸出為
16、訓練樣本矩陣和類標簽向量。下劃線部分為得到文件行數(shù)。傾斜部分為創(chuàng)建以0填充的矩陣Numpy。下劃線+傾斜字體部分循環(huán)處理文件中的每行數(shù)據(jù),首先使用函數(shù)line.strip()截掉所有回車字符,然后使用t字符將上一步得到的整行數(shù)據(jù)分割成一個元素列表。接著我們選取前3個元素,將他們存儲到特征矩陣中。第23頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果Python語言可以使用索引值-1表示列表中的最后一列元素,利用這種索引,我們可以很方便地將列表的最后一行儲存到向量classLabel-Vector中。值得注意的是,我們必須明確告訴解釋器列表中存儲的元素是整型。繼續(xù)輸入以下命令: relo
17、ad(kNN) datingDataMat,datingLabels = kNN.file2matrix(datingTestSet2.txt)第24頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果 datingDataMat datingLabels0:20 接下來我們將采用圖形化的方法直觀地顯示數(shù)據(jù)。第25頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果2.首先我們使用Matplotlib制作原始數(shù)據(jù)的散點圖,繼續(xù)輸入以下命令: import matplotlib import matplotlib.pyplot as plt fig = plt.figure() ax =
18、 fig.add_subplot(111) ax.scatter(datingDataMat:,1,datingDataMat:,2) plt.show()輸出結果如圖:第26頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果上述散點圖使用datingDataSet矩陣的第二、第三列數(shù)據(jù),分別表示特征值“玩視頻游戲所耗時間百分比”和“每周所消耗的冰淇淋公升數(shù)”。由于沒有使用樣本分類的特征值,我們很難從上圖中看出任何有用的數(shù)據(jù)模式信息。一般來說,我們會采用彩色或其他的記號來標記不同樣本分類,以便更好地理解數(shù)據(jù)信息。Matplotlib庫提供的scat-ter函數(shù)支持個性化標記散點圖上的點。
19、重新輸入上面代碼,調用scatter函數(shù)時使用下列函數(shù):ax.scatter(datingDataMat:,1,datingDataMat:,2, 15.0*array(datingLabels),15.0*array(datingLabels),其結果如圖:第27頁/共52頁該圖為選取每年獲取的飛行常客里程數(shù)與玩視頻游戲所耗時間百分比所得的散點圖:第28頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果3.準備數(shù)據(jù):歸一化數(shù)值(1)下表給出了提取的四組數(shù)據(jù)如果想要計算樣本3和樣本4之間的距離,可以采用下面的方法:第29頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(2)發(fā)現(xiàn)問
20、題:我們很容易發(fā)現(xiàn),上面方程中數(shù)字差異最大的屬性對計算結果的影響最大,也就是說,每年獲取的飛行常客里程數(shù)對于計算結果的影響將遠遠大于其他兩個特征的影響。而產(chǎn)生這種現(xiàn)象的唯一原因,僅僅是因為飛行??屠锍虜?shù)遠大于其他特征值。But,佩琪認為這三個特征同樣重要,因此作為三個等權重的特征之一,飛行??屠锍虜?shù)不應該如此嚴重的影響到計算結果。第30頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(3)解決思路:在處理這種不同取值范圍的特征值時,我們通常采用的方法是將數(shù)值歸一化,如將取值范圍處理為01或者-11之間。下面的公式可以將任意取值范圍內的特征值轉化為01區(qū)間內的值:其中min和max分別是
21、數(shù)據(jù)集中的最小特征值和最大特征值。雖然該做法會增加分類器的復雜度,但為了準確結果我們必須這樣做。第31頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(4)歸一化特征值(在kNN.py中添加以下代碼):def autoNorm(dataSet): minVals = dataSet.min(0) maxVals = dataSet.max(0) ranges = maxVals - minVals normDataSet = zeros(shape(dataSet) m = dataSet.shape0 normDataSet = dataSet - tile(minVals, (m,
22、1) normDataSet = normDataSet/tile(ranges, (m,1) return normDataSet, ranges, minVals第32頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果在函數(shù)autoNorm()中,我們將每列的最大最小值分別存放在變量maxVals和變量minVals中,其中dataSet.min(0)中的參數(shù)0使得函數(shù)可以從列中選取最小值而不是選取當前行的最小值。然后,函數(shù)計算可能的取值范圍,并創(chuàng)建新的返回矩陣。正如前面給出的公式,為了歸一化特征值,我們必須使用當前值減去最小值,然后除以取值范圍。第33頁/共52頁示例:使用k-近鄰
23、算法改進約會網(wǎng)站的配對結果需要注意的是,特征值矩陣有10003個值,而minVals和range的值都為13.為了解決這個問題,我們使用Numpy庫中tile()函數(shù)將變量內容復制成輸入矩陣同樣大小的矩陣,注意這是具體特征值相除,而對于某些數(shù)值處理包,/ 可能意味著矩陣除法,但在Numpy庫中,矩陣除法需要使用函數(shù)linalg.solve(matA,matB)。第34頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(5)繼續(xù)輸入以下代碼: reload(kNN) normMat, ranges, minVals = kNN.autoNorm(datingDataMat) normMat
24、 ranges minVals第35頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果4.測試算法:作為完整程序驗證分類器之前我們已經(jīng)將數(shù)據(jù)按照需求做了處理,現(xiàn)在我們將測試分類器的效果,如果分類器的正確率滿足要求,佩琪就可以使用這個軟件來處理約會網(wǎng)站提供的約會名單了。機器學習算法一個很重要的工作就是評估算法的正確率,通常我們只提供已有數(shù)據(jù)的90%作為訓練樣本來訓練分類,而使用其余10%來測試分類器,檢測分類器的正確率。當然10%的測試數(shù)據(jù)是隨機選擇的,由于佩琪的數(shù)據(jù)也是隨機的,以此我們可以隨意選擇數(shù)據(jù)。在之前的代碼里,我們定義了一個計數(shù)器變量,每次錯誤的分類便+1,程序完成后計數(shù)器的結果
25、除以數(shù)據(jù)點總數(shù)既是錯誤率。第36頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(1)為了測試分類器效果,在kNN.py文件中創(chuàng)建函數(shù)datingClassTest,該函數(shù)是自包含的,你可以在任何時候在Python運行環(huán)境中使用該函數(shù)測試分類器效果,代碼如下:def datingClassTest(): hoRatio = 0.10 #抓取 10% datingDataMat,datingLabels = file2matrix(datingTestSet2.txt) #文件下載 normMat, ranges, minVals = autoNorm(datingDataMat) m
26、= normMat.shape0 numTestVecs = int(m*hoRatio) errorCount = 0.0 for i in range(numTestVecs): classifierResult = classify0(normMati,:,normMatnumTestVecs:m,:, datingLabelsnumTestVecs:m,3) print the classifier came back with: %d, the real answer is: %d % (classifierResult, datingLabelsi) if (classifierR
27、esult != datingLabelsi): errorCount += 1.0 print the total error rate is: %f % (errorCount/float(numTestVecs)第37頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(2)datingClassTest函數(shù)使用了file2matrix和antoNorm函數(shù)從文件中讀取數(shù)據(jù)并將其轉換為歸一化特征值。接著計算測試向量的數(shù)量,此步?jīng)Q定了normMat向量中哪些數(shù)據(jù)用于測試,哪些數(shù)據(jù)用于分類器的訓練樣本;然后將這兩部分數(shù)據(jù)輸入到原始kNN分類器函數(shù)classify0。最后,函數(shù)計算錯誤率并
28、輸出結果。第38頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(3)在Python命令提示符下重新加載kNN模塊并輸入: kNN.datingClassTest()分類器處理約會數(shù)據(jù)集的錯誤率是6.4%,這是一個不錯的結果了。我們可以改變函數(shù)datingClassTest的內變量hoRatio和變量k的值,檢測錯誤率是否隨著變量值的變化而增加。依據(jù)分類算法、數(shù)據(jù)集和程序設置,分類器的輸出結果可能有很大的不同。第39頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果4.使用算法:構建完整可用系統(tǒng)上面我們已經(jīng)在數(shù)據(jù)上對分類器進行了測試,現(xiàn)在便可以使用這個分類器幫助佩琪來對人們分類。
29、我們將給她一小段程序,通過該程序佩琪在約會網(wǎng)站上找到某個人并輸入他的信息。程序將給出她對對方喜歡程度的預測值。第40頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(1)將下列代碼繼續(xù)加入kNN.py中并重新加載:def classifyPerson(): resultList = not at all, in small doses, in large doses percentTats = float(raw_input( percentage of time spent playing video games?) ffMiles = float(raw_input(frequen
30、t flier miles earned per year?) iceCream = float(raw_input(liters of ice cream consumed per year?) datingDataMat, datingLabels = file2matrix(datingTestSet2.txt) normMat, ranges, minVals = autoNorm(datingDataMat) inArr = array(ffMiles, percentTats, iceCream) classifierResult = classify0(inArr - minVa
31、ls)/ranges, normMat, datingLabels, 3) print You will probably like this person: , resultListclassifierResult - 1第41頁/共52頁示例:使用k-近鄰算法改進約會網(wǎng)站的配對結果(2)上述代碼唯一新加入了raw_input()函數(shù)。該函數(shù)允許用戶輸入文本行命令并返回用戶所輸入的命令。(3)輸入以下命令: kNN.classifyPerson()目前為止,我們已經(jīng)看到如何在數(shù)據(jù)上個構建分類器。這里所有的數(shù)據(jù)看起來都很容易,那如何處理人看不懂的數(shù)據(jù)了?接下來我們將講解如何在二進制存儲的圖像數(shù)
32、據(jù)上使用kNN。第42頁/共52頁示例:手寫識別系統(tǒng)1.現(xiàn)在開始我們一步步地構建使用k-近鄰算法 的手寫識別系統(tǒng)。為了簡便起見,這里的構造的系統(tǒng)只能識別數(shù)字0到9,參見下圖:第43頁/共52頁示例:手寫識別系統(tǒng)(2)需要識別的數(shù)字已經(jīng)使用圖形處理軟件處理成具有相同的色彩和大小:寬和高是32像素32像素的黑白圖像。盡管采用文本格式存儲圖像不能有效地利用內存空間,但是為了方便理解,我們還是將圖像轉換為了文本格式第44頁/共52頁示例:手寫識別系統(tǒng)(3)使用k-近鄰算法的手寫識別系統(tǒng): 收集數(shù)據(jù):提供文本文件。 準備數(shù)據(jù):編寫函數(shù)img2vector(),將圖像格式轉換為文本格式。 分析數(shù)據(jù):在Py
33、thon命令提示符中檢查數(shù)據(jù),確保它符合要求。 測試算法:編寫函數(shù)使用提供的部分數(shù)據(jù)作為測試樣本,測試樣本與非測試樣本的區(qū)別在于測試樣本是已經(jīng)完成分類的數(shù)據(jù),如果預測分類與實際類別不同,則標記為一個錯誤。第45頁/共52頁示例:手寫識別系統(tǒng)2.準備數(shù)據(jù):將圖像轉換為測試向量實際圖像存儲在目錄trainingDigits,其中包含大約200-0個例子,每個例子均如前圖,每個數(shù)字大約包含200個樣本;目錄testDigits中包含了大約900個測試數(shù)據(jù)。接下來,我們將使用目錄trainingDigits中的數(shù)據(jù)訓練分類器,使用目錄testDigits中的數(shù)據(jù)測試分類器的效果。第46頁/共52頁示例
34、:手寫識別系統(tǒng)(2)現(xiàn)在我們將編寫img2vector函數(shù),用于將圖像轉換為向量:該函數(shù)創(chuàng)建一個11024的Numpy數(shù)組,然后打開給定的文件,循環(huán)讀出文件的前32行,并將每行的頭32個字符值存儲于Numpy數(shù)組中,最后返回數(shù)組。def img2vector(filename): returnVect = zeros(1,1024) fr = open(filename) for i in range(32): lineStr = fr.readline() for j in range(32): returnVect0,32*i+j = int(lineStrj) return return
35、Vect第47頁/共52頁示例:手寫識別系統(tǒng)(3)將上述代碼添加于kNN.py并輸入以下命令,再與文本編輯器打開的文件進行比較: testVector = kNN.img2vector(testDigits/0_13.txt)第48頁/共52頁示例:手寫識別系統(tǒng)3.測試算法:之前我們將數(shù)據(jù)處理成分類器可以識別的格式,現(xiàn)在我們將這些數(shù)據(jù)輸入到分類器,檢測分類器的執(zhí)行效果。d e f h a n d w r i t i n g C l a s s T e s t ( ) : h w L a b e l s = t r a i n i n g F i l e L i s t = l i s t d
36、i r ( t r a i n i n g D i g i t s ) # 獲 取 目 錄 中 的 文 件 內 容 存 儲 于 列 表 中 m = l e n ( t r a i n i n g F i l e L i s t ) t r a i n i n g M a t = z e r o s ( ( m , 1 0 2 4 ) ) f o r i i n r a n g e ( m ) : f i l e N a m e S t r = t r a i n i n g F i l e L i s t i f i l e S t r = f i l e N a m e S t r . s
37、p l i t ( . ) 0 # t a k e o f f . t x t c l a s s N u m S t r = i n t ( f i l e S t r . s p l i t ( _ ) 0 ) # 從 文 件 名 解 析 分 類 數(shù) 字 h w L a b e l s . a p p e n d ( c l a s s N u m S t r ) t r a i n i n g M a t i , : = i m g 2 v e c t o r ( t r a i n i n g D i g i t s / % s % f i l e N a m e S t r ) t e s t F i l e L i s t = l i s t d i r ( t e s t D i g i t s ) # i t e r a t e t h r o u g h t h e t e s t s e t e r r o r C o u n t = 0 . 0 m T e s t = l e n ( t e s t F i l e L i s t ) f o r i i n r a n g e ( m T e s t ) : f i l e N a m e S t r = t e s t F i l e L i s t i f i l e S t r = f i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國音樂學院樂理一級試題及答案
- 云南省曲靖市羅平縣一中2025年高二下物理期末調研試題含解析
- 云南省通海縣第三中學2024-2025學年高二下生物期末復習檢測試題含解析
- 浙江省杭州市桐廬縣分水高中2025年生物高二第二學期期末達標檢測模擬試題含解析
- 鹽城市阜寧縣高二上學期期中考試物理試題
- 餐飲店鋪轉讓合同附帶原店員勞動合同及社保轉移
- 重大工程項目安全生產(chǎn)管理責任合同
- 地形測繪測量員聘請及質量保證合同
- 深圳博物館選聘專業(yè)技術崗位人員考試真題2024
- 能源知識競賽練習試題附答案
- 理論聯(lián)系實際談一談你對高質量發(fā)展的理解參考答案二
- 醫(yī)院檢驗科實驗室生物安全程序文件SOP
- 密度計法顆粒分析試驗記錄(自動和計算)
- 閥門系數(shù)Cv和KV值計算表格(帶公式)
- 消防工程項目樣板區(qū)、樣板間方案
- 彩盒類產(chǎn)品通用質量檢驗標準
- 導流明渠施工方案(共4頁)
- 小學美術三年級下冊第5課我們班級的標志PPT課件
- 兒童社會工作案例及分析PPT學習教案
- 均相液體機械攪拌夾套冷卻反應器設計
- 某醫(yī)院手術室潔凈工程招標文件(完整版)
評論
0/150
提交評論