機器學習實戰(zhàn) K-近鄰算法

K-近鄰算法

優(yōu)點:精度高感憾、對異常值不敏感、無數(shù)據(jù)輸入假定

缺點:計算復雜高磕诊、空間復雜度高

適用數(shù)據(jù)范圍:數(shù)值型和標稱型

一般流程

收集數(shù)據(jù):可以使用任何方法

準備數(shù)據(jù):距離計算所需要的數(shù)值哮兰,最好是結構化的數(shù)據(jù)結構

分析數(shù)據(jù):可以使用任何方法

訓練算法:此步驟不適用于K-近鄰算法

測試算法:計算錯誤率

使用算法:首先需要輸入樣本數(shù)據(jù)和結構化的輸出結果结缚,然后運行K-近鄰算法判定輸入數(shù)據(jù)分別屬于哪個分類竿痰,最后應用對計算出的分類執(zhí)行后續(xù)的處理脆粥。



def createDataset():

????group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])? ? #我覺得可以這樣理解砌溺,每一種方括號都是一個維度(秩),這里就是二維數(shù)組变隔,最里面括著每一行的有一個方括號抚吠,后面又有一個,就是二維弟胀,四行

????labels=['A','A','B','B']

????return group,labels

createDataset()函數(shù)創(chuàng)造數(shù)據(jù)集和標簽



K-近鄰算法偽代碼

計算已知類別數(shù)據(jù)集中的點與當前點之間的距離

按照距離遞增次序排序

選取與當前點距離最小的k個點

確定前k個點所在類別的出現(xiàn)頻率

返回前k個點出現(xiàn)頻率最高的類別作為當前點的預測分類

def classify0(inX,dataSet,labels,k):? ?#inX是你要輸入的要分類的“坐標”,dataSet是上面createDataSet的array喊式,就是已經(jīng)有的孵户,分類過的坐標,label是相應分類的標簽岔留,k是KNN夏哭,k近鄰里面的k

????dataSetSize=dataSet.shape[0]? ? #dataSetSize是dataSet的行數(shù),用上面的舉例就是4行

????diffMat=tile(inX,(dataSetSize,1))-dataSet????#前面用tile献联,把一行inX變成4行一模一樣的(tile有重復的功能竖配,dataSetSize是重復4遍,后面的1保證重復完了是4行里逆,而不是一行里有四個一樣的)进胯,然后再減去dataSet,是為了求兩點的距離原押,先要坐標相減胁镐,這個就是坐標相減

????sqDiffMat=diffMat**2????#上一行得到了坐標相減,然后這里要(x1-x2)^2诸衔,要求乘方

? ? sqDistance=sqDiffMat.sum(axis=1)????#axis=1是列相加盯漂,這樣得到了(x1-x2)^2+(y1-y2)^2

????distances=sqDistance**0.5????#開根號,這個之后才是距離

? ? sortedDistIndicies=distances.argsort()???? #argsort是排序笨农,將元素按照由小到大的順序返回下標就缆,比如([3,1,2]),它返回的就是([1,2,0])

????classCount={}

????for i in range(k):

????????voteIlabel=labels[sortedDistIndicies[i]]

????????classCount[voteIlabel]=classCount.get(voteIlabel,0)+1???? #get是取字典里的元素,如果之前這個voteIlabel是有的谒亦,那么就返回字典里這個voteIlabel里的值竭宰,如果沒有就返回0(后面寫的),這行代碼的意思就是算離目標點距離最近的k個點的類別诊霹,這個點是哪個類別哪個類別就加1

? ? sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)????#key=operator.itemgetter(1)的意思是按照字典里的第一個排序羞延,{A:1,B:2},要按照第1個(AB是第0個),即‘1’‘2’排序脾还。reverse=True是降序排序

????return sortedClassCount[0][0]????#返回類別最多的類別

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伴箩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鄙漏,更是在濱河造成了極大的恐慌嗤谚,老刑警劉巖棺蛛,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巩步,居然都是意外死亡旁赊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門椅野,熙熙樓的掌柜王于貴愁眉苦臉地迎上來终畅,“玉大人,你說我怎么就攤上這事竟闪±敫#” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵炼蛤,是天一觀的道長妖爷。 經(jīng)常有香客問我,道長理朋,這世上最難降的妖魔是什么絮识? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮嗽上,結果婚禮上次舌,老公的妹妹穿的比我還像新娘。我一直安慰自己兽愤,他們只是感情好垃它,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烹看,像睡著了一般国拇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惯殊,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天酱吝,我揣著相機與錄音,去河邊找鬼土思。 笑死务热,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的己儒。 我是一名探鬼主播崎岂,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闪湾!你這毒婦竟也來了冲甘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎江醇,沒想到半個月后濒憋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡陶夜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年凛驮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片条辟。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔夭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出羽嫡,到底是詐尸還是另有隱情纠修,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布厂僧,位于F島的核電站,受9級特大地震影響了牛,放射性物質(zhì)發(fā)生泄漏颜屠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一鹰祸、第九天 我趴在偏房一處隱蔽的房頂上張望甫窟。 院中可真熱鬧,春花似錦蛙婴、人聲如沸粗井。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浇衬。三九已至,卻和暖如春餐济,著一層夾襖步出監(jiān)牢的瞬間耘擂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工絮姆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留醉冤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓篙悯,卻偏偏與公主長得像蚁阳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸽照,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容