通過判斷彼此間的距離來實現聚類
#無監督:資料沒有明確說明屬於哪一類,無需去訓練模型
import pandas as pd
votes = pd.read_csv("d:\\test\machinelearning\\114_congress.csv")
print(votes["party"].value_counts())
print votes.mean()
r 54
d 44
i 2
name: party, dtype: int64
00001 0.325
00004 0.575
00005 0.535
00006 0.945
00007 0.545
00008 0.415
00009 0.545
00010 0.985
00020 0.525
00026 0.545
00032 0.410
00038 0.480
00039 0.510
00044 0.460
00047 0.370
dtype: float64
from sklearn.metrics.pairwise import euclidean_distances
#歐式距離
#reshape指定了行的維度,-1代表列的維度由程式自己推斷
print(euclidean_distances(votes.iloc[0,3:].reshape(1,-1),votes.iloc[1,3:].reshape(1,-1)))
distance = euclidean_distances(votes.iloc[0,3:].reshape(1,-1),votes.iloc[2,3:].reshape(1,-1))
[[ 1.73205081]]
import pandas as pd
from sklearn.cluster import kmeans
#kmeans是聚類演算法的一種,n_clusters是堆的個數,你需要分成幾類,
#random_state=1代表隨機值是一樣的,這樣一來聚類的結果也是一樣的
kmeans_model = kmeans(n_clusters=2,random_state=1)
#求出分類後的距離
senator_distances = kmeans_model.fit_transform(votes.iloc[:,3:])
#分成2類,0,1代表不同的類,label就是將這些列印出來
labels=kmeans_model.labels_
#print labels
#從這一步分資料可以看出,資料被分成2類,其中d和r區分明顯,說明分類有效
#crosstab生成乙個列表,統計一下不同的label有多少值
print(pd.crosstab(labels,votes["party"]))
democratic = votes[(labels == 1)&(votes["party"]!="d")]
party d i r
row_0
0 41 2 0
1 3 0 54
#以上資料label為1的d有3個,和r走的很近,如何將他們找出來
democratic = votes[(labels == 1)&(votes["party"]=="d")]
print democratic
name party state 00001 00004 00005 00006 00007 00008 00009 \
42 heitkamp d nd 0.0 1.0 0.0 1.0 0.0 0.0 1.0
56 manchin d wv 0.0 1.0 0.0 1.0 0.0 0.0 1.0
74 reid d nv 0.5 0.5 0.5 0.5 0.5 0.5 0.5
00010 00020 00026 00032 00038 00039 00044 00047
42 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0
56 1.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0
74 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
import matplotlib.pyplot as plt
#用散點圖表示,使資料更加清晰
#離群點分析,距離最遠
extremism = (senator_distances ** 3).sum(axis=1)
votes["extremism"] = extremism
votes.sort_values("extremism",inplace=true,ascending=false)
print votes.head(2)
name party state 00001 00004 00005 00006 00007 00008 00009 \
98 wicker r ms 0.0 1.0 1.0 1.0 1.0 0.0 1.0
53 lankford r ok 0.0 1.0 1.0 0.0 1.0 0.0 1.0
00010 00020 00026 00032 00038 00039 00044 00047 extremism
98 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 46.250476
53 1.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 46.046873
機器學習之無監督聚類問題
無監督 資料沒有明確說明屬於哪一類,無需去訓練模型 import pandas as pd votes pd.read csv d test machinelearning 114 congress.csv print votes party value counts print votes.mea...
機器學習之無監督演算法k means(聚類)
什麼叫做無監督學習?資料集只有特徵值但是缺少目標值。不知道自己做得 值是正確或不正確。k means 如上圖,每個人的衣著作為每個人特徵,我們將相似的特徵作為乙個類別進行分析。簡稱 物以類聚,人以群分 舉例 k 把資料劃分為多少個類別。例 k 2,則劃分為2個類別 k 3,則劃分為3個類別 k 4,...
機器學習 無監督聚類K means
參考 聚類屬於無監督學習,以往的回歸 樸素貝葉斯 svm等都是有類別標籤y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特徵x,比如假設宇宙中的星星可以表示成三維空間中的點集 優點 原理簡單 速度快 對大資料集有比較好的伸縮性 缺點 需要指定聚類數量k 對異常值敏感 對初始...