機器學習入門——實戰(zhàn)篇之非監(jiān)督學習

這是本篇文章是《機器學習入門》系列文章的第三篇,該系列有如下文章:
《機器學習入門——基礎篇》
《機器學習入門——實戰(zhàn)篇之監(jiān)督學習》
《機器學習入門——實戰(zhàn)篇之非監(jiān)督學習》
《機器學習入門——實戰(zhàn)篇之深度學習》
《機器學習入門——實戰(zhàn)篇之強化學習》

先回顧我們在《機器學習入門——基礎篇》里面講到的非監(jiān)督學習的概念。那時,我們舉例講了聚類,首先是自然聚類:

8-非監(jiān)督學習-聚類.jpg

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

9-非監(jiān)督學習-反直覺聚類.jpg

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

10-非監(jiān)督學習-高斯聚類.jpg

如上圖,這樣子分布的數(shù)據(jù)可以說是大約符合高斯分布的,那么我們就可以按照高斯分布把數(shù)據(jù)分成一類又一類,也就是說,同類的某種數(shù)據(jù)自然的以某個概率均值為中心服從高斯分布,我們把它們找出來就對了。

接下來,我們看看,用聚類算法可以具體實現(xiàn)一些什么事情。

假如我們現(xiàn)在有這樣一組數(shù)據(jù),是某個視頻網(wǎng)站上用戶對于視頻的打分,例如某用戶對于科幻類視頻打分4.5,有可能對于愛情類的電影打分為3。那么我們能不能通過打分來把用戶分個類,從而了解用戶的喜好和品位,進而推薦內(nèi)容呢?那么我們試一試。

首先是數(shù)據(jù):

非監(jiān)督學習-電影評分.png

橫軸是科幻類電影評分,縱軸是愛情類電影評分,然后我們用數(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) 

最后我們把聚類以后的圖畫出來,如下:

非監(jiān)督學習-電影用戶聚2類.png

用不同的顏色標注出來,可以看出分組的依據(jù)主要是每個人對愛情片的評分高低。如果愛情片的平均評分超過 3 星,則屬于第一組,否則屬于另一組。
如果分成三組,會發(fā)生什么?

kmeans_2 = KMeans(n_clusters=3)

其余代碼省略,得到下面結果:

非監(jiān)督學習-電影用戶聚3類.png

現(xiàn)在平均科幻片評分開始起作用了,分組情況如下所示:
? 喜歡愛情片但是不喜歡科幻片的用戶
? 喜歡科幻片但是不喜歡愛情片的用戶
? 即喜歡科幻片又喜歡愛情片的用戶
再添加一組,又會發(fā)生什么?

kmeans_3 = KMeans(n_clusters=4)

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

非監(jiān)督學習-輪廓系數(shù).png

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

非監(jiān)督學習-電影用戶聚類k值分析.png

用輪廓系數(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)篇之強化學習》

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容