這是本篇文章是《機器學習入門》系列文章的第三篇,該系列有如下文章:
《機器學習入門——基礎篇》
《機器學習入門——實戰(zhàn)篇之監(jiān)督學習》
《機器學習入門——實戰(zhàn)篇之非監(jiān)督學習》
《機器學習入門——實戰(zhàn)篇之深度學習》
《機器學習入門——實戰(zhàn)篇之強化學習》
先回顧我們在《機器學習入門——基礎篇》里面講到的非監(jiān)督學習的概念。那時,我們舉例講了聚類,首先是自然聚類:

但是,自然聚類會出現(xiàn)反直覺的情況,如下圖:

明明很簡單的兩個類別被從中間“切開”分成了反直覺的兩類,為了解決這個明顯的困惑,我們引入了更高級的聚類算法,高斯聚類:

如上圖,這樣子分布的數(shù)據(jù)可以說是大約符合高斯分布的,那么我們就可以按照高斯分布把數(shù)據(jù)分成一類又一類,也就是說,同類的某種數(shù)據(jù)自然的以某個概率均值為中心服從高斯分布,我們把它們找出來就對了。
接下來,我們看看,用聚類算法可以具體實現(xiàn)一些什么事情。
假如我們現(xiàn)在有這樣一組數(shù)據(jù),是某個視頻網(wǎng)站上用戶對于視頻的打分,例如某用戶對于科幻類視頻打分4.5,有可能對于愛情類的電影打分為3。那么我們能不能通過打分來把用戶分個類,從而了解用戶的喜好和品位,進而推薦內(nèi)容呢?那么我們試一試。
首先是數(shù)據(jù):

橫軸是科幻類電影評分,縱軸是愛情類電影評分,然后我們用數(shù)據(jù)預處理的辦法把這些點點都裝進一個list:
X = biased_dataset[['avg_scifi_rating','avg_romance_rating']].values
接下來,開始變戲法了:
# 引入KMeans庫
from sklearn.cluster import KMeans
# 實例化的時候帶一個參數(shù),聚成兩類
kmeans_1 = KMeans(n_clusters=2)
# 預測一下
predictions = kmeans_1.fit_predict(X)
最后我們把聚類以后的圖畫出來,如下:

用不同的顏色標注出來,可以看出分組的依據(jù)主要是每個人對愛情片的評分高低。如果愛情片的平均評分超過 3 星,則屬于第一組,否則屬于另一組。
如果分成三組,會發(fā)生什么?
kmeans_2 = KMeans(n_clusters=3)
其余代碼省略,得到下面結果:

現(xiàn)在平均科幻片評分開始起作用了,分組情況如下所示:
? 喜歡愛情片但是不喜歡科幻片的用戶
? 喜歡科幻片但是不喜歡愛情片的用戶
? 即喜歡科幻片又喜歡愛情片的用戶
再添加一組,又會發(fā)生什么?
kmeans_3 = KMeans(n_clusters=4)
這次基本無法清晰的解釋分類的意義了,這也是無監(jiān)督學習的特點之一,很快就無法解釋聚類的含義,所以恰當?shù)倪x擇類別數(shù)量是一門藝術:)
且不談藝術,工程上,我們總得有個辦法來控制這個值,這里介紹一個“肘部法”,名字真是古怪,道理倒是簡單:計算隨著類別數(shù)增加帶來的誤差的變化,找出比較小的誤差就是了。那么誤差怎么計算呢,以兩類的情況舉例,兩類的話就有兩個中心點,那么我們分別計算每一類中各個點到自己的中心點的距離,然后取個平方,再把結果加起來,就是誤差總和了。
然后我們再介紹一個東西,叫輪廓系數(shù),就是說,我們要評價兩個方面,一個是某個類的內(nèi)聚程度,另一方面是不同類的數(shù)據(jù)的分離度,結合起來才是好的聚類。
輪廓系數(shù)公式:

a(i) = average(i向量到所有它屬于的簇中其它點的距離)
b(i) = min (i向量到與它相鄰最近的一簇內(nèi)的所有點的平均距離)

用輪廓系數(shù),我們得到了這個實驗結果,橫軸是聚類的數(shù)量,縱軸是輪廓系數(shù)。我們看也就在開始的時候輪廓系數(shù)還算比較好,后面就一瀉千里了,那么說明這個電影愛好者的數(shù)據(jù)的聚類種類不能太多。
于是我們就把用戶強行分成了幾類。那么我們可以思考一下,如果被分在某一類的用戶并沒有看過愛情片,而他所在的類別的其他用戶對愛情片很不感冒,是否我們就可以認為這個用戶也對愛情片不感冒呢?古老的“協(xié)同過濾算法”就是這么認為的。
但是今天我們有了用戶更多的行為數(shù)據(jù),會分析出更多的結果,甚至可以分析實時流數(shù)據(jù)。當然那是一個復雜的話題,本文不做討論。
非監(jiān)督學習里面其實還有很多的內(nèi)容,譬如主成分分析PCA,也是一個很有價值的方向,本文暫且不做討論。
這次就到這里吧,歡迎關注《機器學習入門》系列文章。
這是本篇文章是《機器學習入門》系列文章的第三篇,該系列有如下文章:
《機器學習入門——基礎篇》
《機器學習入門——實戰(zhàn)篇之監(jiān)督學習》
《機器學習入門——實戰(zhàn)篇之非監(jiān)督學習》
《機器學習入門——實戰(zhàn)篇之深度學習》
《機器學習入門——實戰(zhàn)篇之強化學習》