摘要:其實聚類算法還有一個妙用就是,當數據集過于龐大,并且原始數據并不存在信息,你又需要跑一個有監督學習的算法的時候,你想要人為的給數據打顯然是不合適的,這時先跑一次聚類,記錄好聚類的情況,再直接跑有監督學習的算法就可以了。
前言
在本系列前面的內容中,講述了一系列的機器學習方法。要知道機器學習算法中,比較常用的主要分成有監督學習和無監督學習(其實還有一個叫半監督學習,在這里先不作討論),簡單點來說,所謂的有監督學習,就是人類會給訓練集指明label,自然的無監督學習就是不為訓練集指明label。所以本系列前段時間所說的就屬于有監督學習。
站在使用者的角度來說,兩種模型的使用方法大致相同,都是我將測試樣本輸入模型,模型輸出該樣本所屬的類別(這里以分類問題為例),但模型產生的方式是不同的。對于有監督學習來說,你重新訓練一次樣本1類還是那個1類,而對于無監督學習來說,你重新訓練一次1類說不定就不是上次那個1類了,正是因為這個原因,所以在輸出類別后,必要時需要輸出同類別的其他樣本,以作參考。
正如當你老師跟你說了一堆三角形的例子你就知道這堂課說的就是三角形一樣,沒錯,接下來就是為了講述最基本的無監督學習的算法,K-Means聚類算法。
在這篇文章中,作者舉了一個例子,將近年來各國球隊的戰績進行聚類,分出世界一流,二流,三流球隊,那么,顯然當有一只新球隊需要分類時,將他的戰績扔進模型里跑一跑就ok了。
其實聚類算法還有一個妙用就是,當數據集過于龐大,并且原始數據并不存在label信息,你又需要跑一個有監督學習的算法的時候,你想要人為的給數據打label顯然是不合適的,這時先跑一次聚類,記錄好聚類的情況,再直接跑有監督學習的算法就可以了。
K-Means回到正題上,本文主要介紹K-Means方法,和為了彌補K-Means不足而產生的二分K-Means方法
以下講解以二維數據為例。
普通的K-Means方法隨機產生n個點為簇心,n的取值為用戶需要的類別個數。
計算所有樣本離簇心的距離,計算方法有多種,其中包括最易理解的歐式距離sqrt((x1-y1)^2 +(x2-y2)^2)
每一個樣本都歸納到距離最近的簇心所在的類別。
產生新的簇心,新的簇心計算方法為每一個簇內所有的樣本的算術平均數。新簇心坐標(((x1+x2+……xn)/n),(y1+y2+……yn)/n))(x,y)為同一簇內樣本點的坐標
產生新的簇心后,按照新的簇心進行分類,若分類結果不變,則結束聚類,否則重復該過程至分類結果不變或超出用戶指定的迭代次數。
普通K-Means有一個比較明顯的缺陷,就是他的起始簇心是隨機的。
隨機意味這什么呢?一切皆有可能啊!
因為后續的質心迭代都是基于首次質心的選取,因此整體算法的結果和質心的選取極度敏感,雖然退一步來說,第一次聚類不理想,就重來算法一次好了,你可以重復運行至結果可接受位置,但這種方法顯然是不能接受。于是便出現了二分K-Means算法。
二分K-Means方法以所有樣本點的中心為第一個簇心
判斷當前簇心數是否滿足要求,若滿足則退出算法
若不滿足,則選取劃分后誤差最小的點一分為二(只有一個點時則選取自身)(一分為二的操作是指對該簇進行普通的K-Means方法)
直至簇心個數滿足要求。
代碼實現后話github
自從開始這個機器學習從入門到放棄系列后,也多了一些關注者,最近文章更新緩慢我也有些抱歉,其實在github上已有其他算法的實現,心癢的同學可以先自行學習,因文章需要知識上的梳理和總結加上一些私事,所以更新會較慢,各位關注者見諒哈。
文章如有不足或不明白的地方,歡迎留言指教或探討。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38188.html
摘要:摘要前文數據挖掘與機器學習技術入門實戰與大家分享了分類算法,在本文中將為大家介紹聚類算法和關聯分析問題。比如,聚類算法可以實現公司客戶價值自動劃分,網頁自動歸類等。 摘要:前文數據挖掘與機器學習技術入門實戰與大家分享了分類算法,在本文中將為大家介紹聚類算法和關聯分析問題。分類算法與聚類到底有何區別?聚類方法應在怎樣的場景下使用?如何使用關聯分析算法解決個性化推薦問題?本文就為大家揭曉答...
閱讀 1612·2021-09-23 11:31
閱讀 927·2021-09-23 11:22
閱讀 1352·2021-09-22 15:41
閱讀 4080·2021-09-03 10:28
閱讀 2914·2019-08-30 15:55
閱讀 3548·2019-08-30 15:55
閱讀 1960·2019-08-30 15:44
閱讀 2723·2019-08-30 13:50