2019獨角獸企業重金招聘python工程師標準》
今天,介紹一種特別簡單的機器學習演算法,叫k-臨近法,英文k-nearest neighbors,簡稱knn。
在介紹演算法之前,我們先舉乙個案例。等案例講完後,看看我們怎麼用k-臨近法去解決這個案例中的問題。
有乙個遊戲公司,他們開發了一款遊戲。這款遊戲發布了一段時間後,他們得到了一些使用者的資料。資料如面這幅圖所示:
這個圖上的每乙個圖形表示乙個使用者。紅色的三角形表示該使用者喜歡這款遊戲;藍色的正方形表示該使用者不喜歡這款遊戲。圖上有2個座標。橫座標表示使用者的年齡,縱座標表示使用者平均每天玩手機的時長,單位是分鐘。
比如,右下角這個藍色方框。這個使用者的年齡大概50歲,ta每天平均玩手機的時間30分鐘左右。這個圖形是藍色,表示他不喜歡這款遊戲。再比如左上角的紅色三角形。這個使用者的年齡不到15歲,每天玩手機時間240分鐘,也就是4個小時。這個圖形是紅色,表示他喜歡這款遊戲。其它使用者也是一樣等邏輯。
這些都是已知使用者的資料。現在,他們從某些渠道獲得了一批新使用者。比如,有乙個使用者,在圖上表示為綠色的圓點。這個使用者大概30歲,每天玩手機時長有200分鐘左右。
公司想知道,他們是否應該向這個使用者推廣這款遊戲?
需要說明一下,推廣遊戲是有成本的,需要花費一定的推廣費用。所以,只有推廣給那些喜歡這款遊戲的人,公司才能獲取收益。
於是,剛才那個問題就轉換成為:**這個綠色的新使用者是否喜歡這款遊戲。
那如何**呢?
這裡我們需要乙個假設:屬性越接近的人,行為偏好也越相似。
比如,兩個20多歲的人,他們的行為偏好可能比較相似;而乙個20多歲和乙個50多歲的人,他們的行為偏好就會相差比較大。也就是說,年齡這個屬性越接近,行為偏好也就越相似。
再比如,兩個工程師,他們的行為偏好可能就比較相似。而乙個工程師和乙個演員,他們的行為偏好就會相差比較大。也就是說,行業這個屬性越接近,行為偏好也就越相似。
推廣一下,就是屬性越接近的人,行為偏好也越相似。這跟我們常說的「物以類聚、人以群分」是乙個道理。
回到我們的案例。要想知道綠色的使用者跟那一類使用者更相似,我們可以比較他跟哪些人的屬性更接近。或者反過來說,跟他接近的人有哪些?
我們發現,「接近」是乙個距離的概念。在二維平面圖上,就是指哪些圖形距離這個綠色圓點比較短。
那選幾個鄰居比較合適呢?這個數由我們自己定,我們可以選任意k個鄰居,k是個整數。這就是k臨近法的含義。
比如,我們選4個最近鄰居。發現四個鄰居有3個是紅色,只有乙個藍色。鄰居中紅色占多數,我們就可以判斷,這個新使用者也大概也是紅色。物以類聚嘛!他是紅色就表示他喜歡這款遊戲,因此這家公司應該給他推薦這款遊戲。
我們還可以擴大一下鄰居的範圍,比如找8個鄰居。這時發現5個紅色,3個藍色。還是紅色鄰居多,因此我們仍然判斷這個使用者是紅色。
不過,並不是任意選幾個鄰居都能得出相同的結論。比如我們選1個鄰居。這時就會發現,這個鄰居是藍色,因此結論應該是該使用者為藍色。與之前的結論不一樣!
理論上講,選的鄰居越多越好。不過,太多的話,計算量大,算起來也就會慢。通常我們需要根據實際情況選擇合適的k值,既使得結論比較合理,同時計算量也不會太大。
到此為止,k臨近法的主要原理就介紹完了。
不過,有心的同學可能會發現乙個問題。我們的圖只有兩個屬性:「年齡」和「每天玩手機的時長」。如果有三個屬性怎麼辦?比如,我們還有乙個屬性是「學歷」。該怎麼表達呢?
其實,三個屬性可以用三維的空間表示,x、y、z三個座標。每乙個座標代表乙個屬性。乙個點的鄰居,就是它在三維空間中離它最近的那些點。三維空間中兩點的距離,其計算方法與二維平面兩點距離是類似的。
如果有4個屬性,那就是4維空間表示。有n個屬性,就用n維空間表示。我們可能無法想象出高維空間是什麼樣子大,不過高維空間中兩個點的距離,其計算方法與二維、三維中的距離計算方法是類似的。
因此,不管有多少個屬性,k臨近法都可以用相同的計算方法。
今天我們介紹了乙個遊戲公司的案例,案例中的公司要判斷是否應該給新使用者推廣某一款遊戲,然後用k臨近法解決了這個問題。
人工智慧演算法分類
人工智慧演算法大體上來說可以分類兩類 基於統計的機器學習演算法 machine learning 和深度學習演算法 deep learning 總的來說,在sklearn中機器學習演算法大概的分類如下 1 回歸演算法 2 分類演算法 3 聚類演算法 4 降維演算法 5 概率圖模型演算法 6 文字挖掘...
人工智慧演算法(一)進化演算法
我希望用這類文章,來盡可能通俗的解釋一些聽上去很 高大上 的人工智慧演算法,不僅可以幫助自己真正的理解,還能帶來更多的思考。目前想寫專家系統,神經網路,還有本篇進化演算法。不說大話,進入正題 相信大部分對人工智慧感興趣的人都聽說過進化演算法 遺傳演算法,基因演算法 一篇文章當然不可能把進化演算法的方...
人工智慧演算法 猴子摘香蕉
只有簡單的狀態顯示 include iostream using namespace std void at char monkeyplace,char boxplace void state int on,int hb char goto char st,char lt void act char...