資源簡介

代碼片段和文件信息
#coding=UTF8
from?numpy?import?*
import?operator
def?createDataSet():
????“““
????函數(shù)作用:構建一組訓練數(shù)據(jù)(訓練樣本),共4個樣本
????同時給出了這4個樣本的標簽,及l(fā)abels
????“““
????group?=?array([
????????[1.0?1.1]
????????[1.0?1.0]
????????[0.??0.?]
????????[0.??0.1]
????])
????labels?=?[‘A‘?‘A‘?‘B‘?‘B‘]
????return?group?labels
def?classify0(inX?dataset?labels?k):
????“““
????inX?是輸入的測試樣本,是一個[x?y]樣式的
????dataset?是訓練樣本集
????labels?是訓練樣本標簽
????k?是top?k最相近的
????“““
????#?shape返回矩陣的[行數(shù),列數(shù)],
????#?那么shape[0]獲取數(shù)據(jù)集的行數(shù),
????#?行數(shù)就是樣本的數(shù)量
????dataSetSize?=?dataset.shape[0]?
????
????“““
????下面的求距離過程就是按照歐氏距離的公式計算的。
????即?根號(x^2+y^2)
????“““
????#?tile屬于numpy模塊下邊的函數(shù)
????#?tile(A?reps)返回一個shape=reps的矩陣,矩陣的每個元素是A
????#?比如?A=[012]?那么,tile(A?2)=?[0?1?2?0?1?2]
????#?tile(A(22))?=?[[0?1?2?0?1?2]
????#??????????????????[0?1?2?0?1?2]]
????#?tile(A(212))?=?[[[0?1?2?0?1?2]]
????#????????????????????[[0?1?2?0?1?2]]]?
????#?上邊那個結果的分開理解就是:
????#?最外層是2個元素,即最外邊的[]中包含2個元素,類似于[CD]而此處的C=D,因為是復制出來的
????#?然后C包含1個元素,即C=[E]同理D=[E]
????#?最后E包含2個元素,即E=[FG]此處F=G,因為是復制出來的
????#?F就是A了,基礎元素
????#?綜合起來就是(212)=?[C?C]?=?[[E]?[E]]?=?[[[F?F]]?[[F?F]]]?=?[[[A?A]]?[[A?A]]]
????#?這個地方就是為了把輸入的測試樣本擴展為和dataset的shape一樣,然后就可以直接做矩陣減法了。
????#?比如,dataset有4個樣本,就是4*2的矩陣,輸入測試樣本肯定是一個了,就是1*2,為了計算輸入樣本與訓練樣本的距離
????#?那么,需要對這個數(shù)據(jù)進行作差。這是一次比較,因為訓練樣本有n個,那么就要進行n次比較;
????#?為了方便計算,把輸入樣本復制n次,然后直接與訓練樣本作矩陣差運算,就可以一次性比較了n個樣本。
????#?比如inX?=?[01]dataset就用函數(shù)返回的結果,那么
????#?tile(inX?(41))=?[[?0.0?1.0]
????#????????????????????[?0.0?1.0]
????#????????????????????[?0.0?1.0]
????#????????????????????[?0.0?1.0]]
????#?作差之后
????#?diffMat?=?[[-1.0-0.1]
????#????????????[-1.0?0.0]
????#????????????[?0.0?1.0]
????#????????????[?0.0?0.9]]
????diffMat?=?tile(inX?(dataSetSize?1))?-?dataset
????
????#?diffMat就是輸入樣本與每個訓練樣本的差值,然后對其每個x和y的差值進行平方運算。
????#?diffMat是一個矩陣,矩陣**2表示對矩陣中的每個元素進行**2操作,即平方。
????#?sqDiffMat?=?[[1.0?0.01]
????#??????????????[1.0?0.0?]
????#??????????????[0.0?1.0?]
????#??????????????[0.0?0.81]]
????sqDiffMat?=?diffMat?**?2
????
????#?axis=1表示按照橫軸,sum表示累加,即按照行進行累加。
????#?sqDistance?=?[[1.01]
????#???????????????[1.0?]
????#???????????????[1.0?]
????#???????????????[0.81]]
????sqDistance?=?sqDiffMat.sum(axis=1)
????
????#?對平方和進行開根號
????distance?=?sqDistance?**?0.5
????
????#?按照升序進行快速排序,返回的是原數(shù)組的下標。
????#?比如,x?=?[30?10?20?40]
????#?升序排序后應該是[10203040]他們的原下標是[1203]
????#?那么,numpy.argsort(x)?=?[1?2?0?3]
????sortedDistIndicies?=?distance.argsort()
????
????#?存放最終的分類結果及相應的結果投票數(shù)
????classCount?=?{}
????
????#?投票過程,就是統(tǒng)計前k個最近的樣本所屬類別包含的樣本個數(shù)
????for?i?in?range(k):
????????#?index?=?sortedDistIndicies[i]是第i個最相近的樣本下標
????????#?voteIlabel?=?labels[index]是樣本index對應的分類結果(‘A‘?or?‘B‘)
????????voteIlabel?=?labels[sortedDistIndicies[i]]
????????#?classCount.get(voteIlabel?0)返回voteIlabel的值,如果不存在,則返回0
????????#?然后將票數(shù)增1
????????classCount[voteIlabel]?=?classCount.get(voteIlabel
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????I.A....??????4791??2015-11-07?16:17??chapter2\2.1最簡單的分類器\simple?kNN.py
????I.A....?????35725??2012-03-01?15:40??chapter2\2.2改進kNN分類約會網(wǎng)站\datingTestSet.txt
????I.A....?????27067??2012-03-01?15:39??chapter2\2.2改進kNN分類約會網(wǎng)站\datingTestSet2.txt
????I.A....??????7151??2015-11-07?16:47??chapter2\2.2改進kNN分類約會網(wǎng)站\kNN_improve.py
????I.A....??????8325??2015-11-07?17:09??chapter2\2.3手寫數(shù)字識別\kNN.py
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_0.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_1.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_10.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_11.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_12.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_13.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_14.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_15.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_16.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_17.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_18.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_19.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_2.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_20.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_21.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_22.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_23.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_24.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_25.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_26.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_27.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_28.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_29.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_3.txt
????I.A....??????1088??2010-10-07?21:35??chapter2\2.3手寫數(shù)字識別\testDigits\0_30.txt
............此處省略2864個文件信息
評論
共有 條評論