前言
橙子還是柚子
請看下邊的水果,是橙子還是柚子呢?我知道,柚子通常比橙子更大、更紅。
我的思維過程類似於這樣:我腦子裡有個圖表。
一般而言,柚子更大、更紅。這個水果又大又紅,因此很可能是柚子。但下面這樣的水果呢?
如果判斷這個水果是橙子還是柚子呢?一種辦法是看它的鄰居。來看看離它最近的三個鄰居。
在這三個鄰居中,橙子比柚子多,因此這個水果很可能是橙子。祝賀你,你剛才就是使用K最近鄰(k-nearestneighbours,KNN)算法進行了分類!這個算法非常簡單。
KNN算法雖然簡單卻很有用!要對東西進行分類時,可首先嚐試這種算法。下面來看一個更真實的例子。
創建推薦系統
假設你是Netflix,要為用戶創建一個電影推薦系統。從本質上說,這類似於前面的水果問題!
你可以將所有用戶都放入一個圖表中。
這些用戶在圖表中的位置取決於其喜好,因此喜好相似的用戶距離較近。假設你要向Priyanka推薦電影,可以找出五位與他最接近的用戶。
假設在對電影的喜好方面,Justin、JC、Joey、Lance和Chris都與Priyanka差不多,因此他們喜歡的電影很可能Priyanka也喜歡!
有了這樣的圖表以後,創建推薦系統就將易如反掌:只要是Justin喜歡的電影,就將其推薦給Priyanka。
特徵抽取
在前面的水果示例中,你根據個頭和顏色來比較水果,換言之,你比較的特徵是個頭和顏色。現在假設有三個水果,你可抽取它們的特徵。
再根據這些特徵繪圖。
從上圖可知,水果A和B比較像。下面來度量它們有多像。要計算兩點的距離,可使用畢達哥拉斯公式。
例如,A和B的距離如下。
A和B的距離為1。你還可計算其他水果之間的距離。
這個距離公式印證了你的直覺:A和B很像。
假設你要比較的是Netflix用戶,就需要以某種方式將他們放到圖表中。因此,你需要將每位用戶都轉換為一組座標,就像前面對水果所做的那樣。
在能夠將用戶放入圖表後,你就可以計算他們之間的距離了。
下面是一種將用戶轉換為一組數字的方式。用戶註冊時,要求他們指出對各種電影的喜歡程度。這樣,對於每位用戶,都將獲得一組數字!
Priyanka和Justin都喜歡愛情片且都討厭恐怖片。Morpheus喜歡動作片,但討厭愛情片(他討厭好好的動作電影毀於浪漫的橋段)。前面判斷水果是橙子還是柚子時,每種水果都用2個數字表示,你還記得嗎?在這裡,每位用戶都用5個數字表示。
在數學家看來,這裡計算的是五維(而不是二維)空間中的距離,但計算公式不變。
這個公式包含5個而不是2個數字。
這個距離公式很靈活,即便涉及很多個數字,依然可以使用它來計算距離。你可能會問,涉及5個數字時,距離意味著什麼呢?這種距離指出了兩組數字之間的相似程度。
這是Priyanka和Justin的距離。
餘弦相似度
前面計算兩位用戶的距離時,使用的都是距離公式。還有更合適的公式嗎?在實際工作中,經常使用餘弦相似度(cosine similarity)。假設有兩位品味類似的用戶,但其中一位打分時更保守。他們都很喜歡Manmohan Desai的電影Amar Akbar Anthony,但Paul給了5星,而Rowan只給4星。如果你使用距離公式,這兩位用戶可能不是鄰居,雖然他們的品味非常接近。餘弦相似度不計算兩個矢量的距離,而比較它們的角度,因此更適合處理前面所說的情況。本書不討論餘弦相似度,但如果你要使用KNN,就一定要研究研究它!
閱讀更多 看到他請叫他快去學習 的文章