陳凱
說起機(jī)器學(xué)習(xí),不少人頭腦中浮現(xiàn)出的畫面,要么是繁雜的程序代碼,要么是難懂的數(shù)學(xué)公式。但有些機(jī)器學(xué)習(xí)算法核心原理并不復(fù)雜,用幾個(gè)數(shù)據(jù)表就能解釋清楚,本文利用K近鄰算法的思路,在數(shù)據(jù)表中實(shí)現(xiàn)分類功能,涉及到的需求和解決方法比較簡單,可以作為人工智能學(xué)習(xí)入門階段的活動資料,也可以方便地加以拓展,用某一種程序語言代碼來使得分類更自動化。
即便是高度人工化的城市環(huán)境中,也有不少野生鳥類棲息繁衍。在城市校園中,可以觀察到的野鳥種類遠(yuǎn)不只是麻雀一種,但往往叫不出它們的名字,假如學(xué)校的觀鳥社團(tuán)曾經(jīng)對各種鳥的行為特征進(jìn)行過記錄,那么后來者就可以利用這些記錄,和自己所觀察到的鳥的行為特征進(jìn)行對比,從而猜測出鳥的種類。那么,機(jī)器(計(jì)算機(jī))是如何模仿這種特征比對和猜測行為的呢?為簡單起見,右表僅列舉了野鳥的一種行為特征,即觀察者所注意到的不同種類鳥出現(xiàn)在不同生境的概率,這里象征性地列舉了四種野生鳥類與三種生境相對應(yīng)的情況。
對于某一種鳥,三種不同生境的出現(xiàn)概率值加起來是1,這是為了使得不同種類鳥的數(shù)據(jù)之間具有可比性而做的歸一化的處理。如果將某種鳥出現(xiàn)在三種不同生境的概率畫到坐標(biāo)軸上,可以得到一幅三維的散點(diǎn)圖(本文使用了hrrps://techology.cpm.org/eneral/3dgraph/提供的繪圖工且),如圖1所示。其中1、2、3、4四個(gè)點(diǎn)分別代表了白鵲鎢、棕背伯勞、八哥、棕頭鴉雀四種不同的鳥的特征所在位置。
上面的例子中,每種鳥的行為特征都是固定的,比如說,棕頭鴉雀喜歡密集的灌木叢而很少來到開闊的草地上,這個(gè)特征并不會輕易改變。但有時(shí)情況就復(fù)雜很多了,比如數(shù)字4有不同的寫法,可以是4這種樣子,也可以是4這種樣子,不同的人書寫的“4”,模樣都是不同的。也就是說,如果將數(shù)字“4”的特征標(biāo)注在坐標(biāo)軸上,那可能會有好多個(gè)坐標(biāo)點(diǎn),把不同坐標(biāo)點(diǎn)的值取平均數(shù)那可是沒啥道理的。這時(shí)候,如果有人寫下某個(gè)需要識別的數(shù)字符號,計(jì)算機(jī)對這個(gè)數(shù)字符號的特征在坐標(biāo)軸上的位置進(jìn)行比對,就只好和很多個(gè)對象做比較。比如,坐標(biāo)軸上可能有三個(gè)不同的數(shù)字“4”的坐標(biāo)點(diǎn)和三個(gè)不同的數(shù)字“7”的坐標(biāo)點(diǎn),對比下來發(fā)現(xiàn),某個(gè)新寫下的數(shù)字符號的坐標(biāo)點(diǎn)位置和其中某三個(gè)數(shù)字符號的坐標(biāo)點(diǎn)位置接近,這三個(gè)符號中,有兩個(gè)符號曾經(jīng)被標(biāo)注為“4”,有一個(gè)曾經(jīng)被標(biāo)注為“7”,因?yàn)楸粯?biāo)注為“4”的數(shù)量占優(yōu),所以就判定新寫下的這個(gè)符號是“4”。
這個(gè)實(shí)驗(yàn)同樣可以在電子表格中進(jìn)行。舉例說,如圖4所示,用12行9列的點(diǎn)陣描出數(shù)字符號,可以用“0”代表空白,用“1”代表有筆畫,這里假設(shè)你自己并不知道這個(gè)符號到底代表的是什么。
接下來是提取這個(gè)未知數(shù)字符號的特征值,特征值的提取方式有很多種,最偷懶的辦法就是劃出幾個(gè)區(qū)域,然后把每個(gè)區(qū)域里的數(shù)字加起來。因?yàn)檫@個(gè)實(shí)驗(yàn)是手動進(jìn)行的,所以區(qū)域沒辦法劃得太多,比如說劃出12個(gè)區(qū)域,每個(gè)區(qū)域中數(shù)字加起來后,就得到了一張四行三列的特征表,如圖5所示。
怎么知道這個(gè)四行三列的特征表到底代表了什么數(shù)字符號呢?這就要去對比以往曾經(jīng)標(biāo)注過的數(shù)字符號的特征值了。比如說,已經(jīng)存在三個(gè)標(biāo)注為“4”的特征表和三個(gè)標(biāo)注為“7”的特征表可供對比。這些符號的描繪和特征值的提取,不一定要由教師提供,也完全可以是由學(xué)習(xí)者自己描繪和計(jì)算獲得,這樣實(shí)驗(yàn)才更有說服力。當(dāng)然,描繪時(shí)需要給出一些限定條件,比如描繪的數(shù)字線條必須經(jīng)過至少多少個(gè)特征區(qū)域,否則,可能會因?yàn)榉柼』蛘咛鵁o法有效提取出特征值,為了處理這些太小或太偏的符號,還不得不做圖像預(yù)處理的工作,這樣就大大增加了實(shí)驗(yàn)難度。
圖6中,左上角是用戶描繪的等待判斷的符號的圖像點(diǎn)陣,左下角是對點(diǎn)陣中12個(gè)特征區(qū)域取值,右上角是將該特征值與曾經(jīng)被標(biāo)注過的數(shù)字符號的特征值進(jìn)行比對,比對的方法仍然是求兩點(diǎn)間直線距離。不過因?yàn)樘卣鞅碇锌偣灿?2個(gè)值,所以就要將特征所在的坐標(biāo)看成一個(gè)12維空間的坐標(biāo),雖然在頭腦中很難把12維空間想象出來,但兩點(diǎn)間距離公式仍然可以直接套用(可用公式拖曳的方法計(jì)算各個(gè)特征差值的平方數(shù))。最右側(cè)是比對后的結(jié)果,為觀察清晰起見,結(jié)果沒有開平方。
觀察結(jié)果,可發(fā)現(xiàn)最近距離是5,所對應(yīng)的標(biāo)注是“4”,第二近的距離是12,所對應(yīng)的標(biāo)注也是“4”,第三近的距離是20,所對應(yīng)的標(biāo)注是“7”。如果取三個(gè)最近點(diǎn),也就是K近鄰算法中K值為3,那么可以判定,用戶新描繪的這個(gè)符號更可能是“4”。當(dāng)然,也可以將K值取為1,這樣就直接找最近點(diǎn),結(jié)果也認(rèn)定該符號是“4”。
利用這個(gè)方法分辨“4”和“7”沒啥問題,可要是分辨“8”和“6”就沒那么有效了,究其原因,就是圖像像素太少,特征區(qū)域的劃分也不夠細(xì)致。要提高數(shù)字符號的能力,就需要利用計(jì)算機(jī)編程,將判斷過程變得更自動化,這就為下一步的學(xué)習(xí)指明了方向。