機器學習演算法實戰:使用聚類演算法統計美國國會不同議員的投票主張
專欄推薦
正文
現在有一個資料集是美國國會投票的資料,資料集如圖所示:
資料集第一列為name,表示國會議員的名字,第二列為議員政黨R是共和黨,D是民主黨,I是無黨派人士
後面的00001,00004表示的是法案的標號,0表示不支援,1表示支援
我們現在並不知道這個資料集的一些情況,但是我們可以透過聚類演算法來看一下這個資料集有哪些特點
我們先來讀取這個資料,然後看以下這些資料的均值,和各黨派的人數
輸出的結果為:
value_counts()表示每個類別中的人數,透過輸出的這個結果,可以看出R共和黨為54人,D民主黨為44ren,I無黨派人士為2個人,這就是所有的議會中人員的組成。後面的是輸出的均值,也就是每個議案的均值得多少分,0是0分,1是1分,得分高表示支援率大。
每個議員都會對每個法案投票,0是反對,1是支援,我們如何才能判斷出兩個議員之間的都投法案的相似度呢?我們可以使用歐式距離來表示兩個樣本之間的相似程度。
它的公式為:
假如以下面的兩個議員資料來分析兩個一下這兩個議員的相似度,來看一下兩個議員之間投票的相似度。
Cardin,D,MD,1,0,0,1,0,1,0,1,0,0,1,1,0,1,1Carper,D,DE,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1
那麼此時x1=1,y1=0
x2=0,y1=0
以此類推,透過這個公式算出來的就是歐式距離,歐式距離越小就表示樣本之間的差距越小,越相似。在python中已經封裝好了這個方法,我們可以透過呼叫這個方法來完成計算歐式距離的操作
這個euclidean_distances為歐式距離,可以透過這個方法來計算歐式距離
votes.iloc[0,3:]獲取第一行的第三列開始的所有資料
votes.iloc[1,3:]獲取第二行的第三列開始的所有資料
預設是資料是列的形式,然後改變其形狀改成(1,-1),也就是行的形式
輸出的結果就是兩個樣本之間的距離。距離值為:[[1.73205081]]
下面透過python的庫來直接使用kmeans來聚合這些資料
這個表示聚合成兩個簇,random_state表示兩個中心點不是隨機的,而是在random_state=1的那個固定的位置
kmeans_model.fit_transform表示擬合資料,它會將傳入的資料聚類,聚成兩類,擬合資料的返回值為樣本距離聚簇中心點的距離
這個就是 senator_distances的值,是有多少個樣本就有多少行,聚成多少個簇就有多少列,比如第一個【3.12141628 1.3134775】就表示該樣本與聚簇中心1的距離是3.12141628,與聚簇中心2的距離是1.3134775,第二行就表示第二個樣本分別與聚簇中心的距離。
labels為聚類之後的類別,我們輸出labels的結果為:
可以看出有些樣本被分到了1,有些樣本被分到了0,那麼這就表示分類成功了,為了更加清晰的可以看出聚類的情況,我們可以以影像的形式進行顯示:
透過圖,我們可以看出這些樣本點的聚類情況,我們還可以使用另外一種方式
print(pd.crosstab(labels, votes["party"]))
交叉表crosstab,可以按照指定的行和列統計分組頻數,用起來非常方便,行就是labels,列就是votes["party"],我們輸出它的效果為:
這個看著很清晰,可以看出D黨派的聚類中有41個人聚到了0,還有3個人聚到了1
而R黨派中全部的54個人都聚到了類別1中,這就是非常直觀的情況
我們可以透過這個還可以發現,D黨派中有3個人是偏向R黨派的,所以我們下面的任務是把這些人給找出來,來看這三個人究竟是誰?
democratic_outliers = votes[(labels == 1) & (votes["party"] == "D")]
print(democratic_outliers)
這個程式碼就是選出聚類類別是1的,並且黨派還是D的,我們輸出這個,就可以看到這三個人究竟是誰?
我們已經將資料聚成了兩個類,但是有一種點叫做離群點,就是說這個樣本點無論它屬於哪個簇,它距離所有簇的中心點都是很遠的額,這就是離群點。我們透過什麼樣的方式才能找到這樣的離群點呢?
我們在上面已經獲取了樣本與聚簇中心點之間的距離 senator_distances,所以只要距離和最大的就是離群點了,但是有一種情況是他恰好在兩者的中間的位置,那麼它不是離群點,但是它距離聚簇中心點的距離和加起來也不小,為了防止出現這種問題,我們不能簡單的相加,而是將其來個立方,這樣的話,剛才的情況的值會很小。
這個就是將樣本與聚簇中心點的距離算一個立方,然後加起來,然後創造一個新的列extremism,然後對votes根據extremism進行排序,輸出結果為:
可以每個樣本與聚簇中心的距離,越大就表示越遠,可以定義為離群點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2654847/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《機器學習實戰》kMeans演算法(K均值聚類演算法)機器學習演算法聚類
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- 【Python機器學習實戰】聚類演算法(2)——層次聚類(HAC)和DBSCANPython機器學習聚類演算法
- 9.1.6 DBSCAN聚類演算法————機器學習實戰第二版聚類演算法機器學習
- 機器學習Sklearn系列:(五)聚類演算法機器學習聚類演算法
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 《機器學習實戰》二分-kMeans演算法(二分K均值聚類)機器學習演算法聚類
- 聚類演算法聚類演算法
- 機器學習之k-means聚類演算法(python實現)機器學習聚類演算法Python
- ITWorld:2014年美國會寫程式國會議員人數增長200%
- 機器學習中的聚類演算法演變及學習筆記機器學習聚類演算法筆記
- Spark中的聚類演算法Spark聚類演算法
- 支援區塊鏈的議案通過了美國國會投票區塊鏈
- 01-kNN演算法實戰-(機器學習實戰)KNN演算法機器學習
- 機器學習實戰6(SMO演算法)機器學習演算法
- 美國眾議員:國會必須“制止”區塊鏈過度監管區塊鏈
- 聚類之K均值聚類和EM演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- 深度解讀DBSCAN聚類演算法:技術與實戰全解析聚類演算法
- OPTICS聚類演算法原理聚類演算法
- 初探DBSCAN聚類演算法聚類演算法
- 聚類演算法綜述聚類演算法
- DBSCAN密度聚類演算法聚類演算法
- BIRCH聚類演算法原理聚類演算法
- 聚類之dbscan演算法聚類演算法
- Meanshift,聚類演算法聚類演算法
- 【機器學習】:Kmeans均值聚類演算法原理(附帶Python程式碼實現)機器學習聚類演算法Python
- 14聚類演算法-程式碼案例六-譜聚類(SC)演算法案例聚類演算法
- kmeans聚類演算法matlab實現聚類演算法Matlab
- MMM全連結聚類演算法實現聚類演算法
- 機器學習—聚類5-1(K-Means演算法+瑞士捲)機器學習聚類演算法
- Mahout聚類演算法學習之Canopy演算法的分析與實現聚類演算法
- 可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)聚類演算法
- 聚類演算法——DBSCAN演算法原理及公式聚類演算法公式
- 常用聚類演算法以及演算法評價聚類演算法
- 深度聚類演算法淺談聚類演算法
- 深度聚類演算法敘談聚類演算法
- 機器學習經典聚類演算法 —— k-均值演算法(附python實現程式碼及資料集)機器學習聚類演算法Python