機器學習之無監督聚類問題

2021-07-28 21:41:10 字數 3639 閱讀 4697

通過判斷彼此間的距離來實現聚類

#無監督:資料沒有明確說明屬於哪一類,無需去訓練模型

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 對異常值敏感 對初始...