機器學習演算法實戰:使用聚類演算法統計美國國會不同議員的投票主張
專欄推薦
正文
現在有一個資料集是美國國會投票的資料,資料集如圖所示:
資料集第一列為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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- 【Python機器學習實戰】聚類演算法(2)——層次聚類(HAC)和DBSCANPython機器學習聚類演算法
- 9.1.6 DBSCAN聚類演算法————機器學習實戰第二版聚類演算法機器學習
- 機器學習Sklearn系列:(五)聚類演算法機器學習聚類演算法
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 機器學習中的聚類演算法演變及學習筆記機器學習聚類演算法筆記
- 支援區塊鏈的議案通過了美國國會投票區塊鏈
- 機器學習實戰6(SMO演算法)機器學習演算法
- 機器學習—聚類5-1(K-Means演算法+瑞士捲)機器學習聚類演算法
- 20分鐘學會DBSCAN聚類演算法聚類演算法
- 【火爐煉AI】機器學習022-使用均值漂移聚類演算法構建模型AI機器學習聚類演算法模型
- 機器學習——dbscan密度聚類機器學習聚類
- 機器學習(8)——其他聚類機器學習聚類
- 機器學習經典聚類演算法 —— k-均值演算法(附python實現程式碼及資料集)機器學習聚類演算法Python
- 機器學習3-分類演算法機器學習演算法
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- 機器學習-聚類分析之DBSCAN機器學習聚類
- 機器學習 之 層次聚類機器學習聚類
- 聚類演算法聚類演算法
- 機器學習4-分類演算法2機器學習演算法
- 【無監督學習】2:DBSCAN聚類演算法原理聚類演算法
- 美國科學促進會:機器學習“正在導致科學危機”機器學習
- 機器學習--有監督學習--分類演算法(預測分類)機器學習演算法
- 計算機如何感知大資料——聚類演算法計算機大資料聚類演算法
- 機器學習演算法機器學習演算法
- 【機器學習】K-means聚類分析機器學習聚類
- 【火爐煉AI】機器學習020-使用K-means演算法對資料進行聚類分析AI機器學習演算法聚類
- 機器學習演算法(22)python實現用scikit-learn進行全連線的凝聚層次聚類演算法(Agglo-merative-Clustering)機器學習演算法Python聚類
- 機器學習實戰----k值近鄰演算法(Python語言)機器學習演算法Python
- 《機器學習:演算法原理和程式設計實踐》2:中文文字分類機器學習演算法程式設計文字分類
- Spark中的聚類演算法Spark聚類演算法
- 【機器學習】新手必看的十種機器學習演算法機器學習演算法
- python機器學習演算法——KNN演算法Python機器學習演算法KNN
- 機器學習演算法:AdaBoost機器學習演算法
- 【火爐煉AI】機器學習026-股票資料聚類分析-近鄰傳播演算法AI機器學習聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- 聚類之K均值聚類和EM演算法聚類演算法
- 機器學習演算法學習筆記機器學習演算法筆記