Hello大家好,今天為大家送上Kmeans聚類算法的案例,圖片處理與NBA群員信息的分析。
Kmeans算法是非監督的學習裡面的一個經典算法,也是一個典型的基於距離的非層次聚類算法,在小化誤差函數的基礎上,將數據劃分為預定的類數K(這個k我們稍後說),採用距離作為相似性的評價指標,及認為倆個對象的距離越近,其相似度越高。
可能大家有點懵,這個Kmeans到底是什麼呢,其實他就是我們的扎堆算法(個人定義的),為啥這麼說呢,大家都知道人以類似物以群分,在我們拿到一堆數據集後這堆數據集沒有我們所需要的標籤,這時候我們就需要將相似度高的分為一組(專業術語稱之為一簇),而分為多少簇呢就是這個K;比如上學時老師根據學習成績和平時表現將學生分為學霸,學酥,學渣等;在比如利用國家個城市的經濟,醫療等數據將其劃分為幾種不同的貧富等級(如發達,欠發達,貧困,特貧困等)
當然,聚類算法不僅僅可以將數據實現分割,還可以用於異常點的監控,所謂的異常點就是遠離任何簇的樣本,而這些樣本往往就是需要關注的點,例如信用卡交易中的監控。
Kmeans算法其實就是這麼簡單,並沒有太多的複雜的數學公式,接下來我們看看該算法的集體過程:
注意:聚類的結果可能依賴於初始聚類中心的隨機選擇,可能使得結果嚴重偏離全局最優分類。在實際應用中為了得到較好的結果,通常以不同的初始聚類中心多次運行Kmeans算法。
下圖為Kmeans聚類示意圖:
說了這麼多,有人可能就開始鬱悶啦,鬱悶那個K到底取多少呢,這個K的確定也是Kmeans裡面的一個難點,通常會選用探索法,即給定不同的K值下,對比某些評估指標的變動情況,進而選擇一個比較合理的K值。那麼我帶大家簡單看看我們常用最佳K值確定的幾種方法:
1. 拐點法
2. 輪廓係數法
3. 間隔統計量法
嗯,就是這三種方法,由於篇幅有限,只能先告訴大家這三種方法,我們改天在詳談這個三種方法,先給大家來個有意思的案例,那就是依舊我們的Kmeans算法進行圖片的聚類,其實就是按照像素進行聚類;
如下:
我們利用sklearn庫導入了一張笑臉圖片,然後通過聚類分析得到處理壓縮後的圖片
最終效果圖為:
哈哈哈,自己也被驚著啦,因為此處處理的時候將一張三維的圖片拉成了一張二維的所以他變得如此之醜陋
沒關係接下來我們看看利用聚類算法對NBA球員進行聚類分析:
先對球員數據進行讀取(數據來源於虎撲)
從數據集來看,得分,命中率,罰球命中率等都為數值型變量,並且量綱也不一樣,谷需要對數據集做標準化處理,此處挑選得分,命中率,三分命中率和發球命中率4個維度用於球員得分與命中率之間的散點圖,便於後文比對聚類後的效果
通過肉眼似乎如法直接對這286名球員進行分割,如果要將這些球員聚類的話,該劃分為幾類計較合適呢,通過利用前面介紹的三種選擇k的方法,對該數據集進行測試:
使用輪廓係數選擇最佳的K值
使用間隙統計量選擇最佳的K值
通過上述方法我們最終得到K的值為3.
重新繪製球員與命中率之間的散點圖
如上圖,三類散點圖看上去很有規律,其中五角星代表各個簇的中心,對比正方形和圓行的點,他們之間的差異主要體現在命中率上,正方形所代表的球員屬於低得分低命中率型,命中率普遍在百分之50以下,圓形所代表的球員屬於低得分高命中率型,在對比正方形和三角形的點,他們的差異體現在得分上,三角形所代表的球員屬於高得分低命中率型,當然行圖中也能發現幾個強悍的球員高得分高命中率
最後看看三類球員的雷達圖,比對四個指標上的差異
如上圖,三個群體的球員在各個維度上還是存在差異的,以C2和C3舉例,他們的平均得分並沒有顯著差異,但是C3的命中率卻比C2高很多,在從平均的罰球命中率和三分命中率來看,C2類的球員普遍比C3類球員強一些。