無監督學習 K Means聚類

2021-10-04 18:50:34 字數 3201 閱讀 6480

無監督學習:通過無標籤的資料,學習資料的分布或資料與資料之間的關係。

1定義:根據資料的「相似性」將資料分為多類的過程。

1.1.演算法模組:k-means、近鄰傳播演算法、dbscan演算法,高斯混合模型(gmm)等。

1.2.python庫:sklearn.cluster;

1.3.k-means聚類演算法步驟

(1) 首先我們選擇一組資料,並隨機初始化它們各自的中心點。中心點是與每個資料點向量長度相同的位置,這需要我們提前預知類的數量(即中心點的數量)。

(2) 計算每個資料點到中心點的距離,資料點距離哪個中心點最近就劃分到哪一類中。

(3) 計算每一類中中心點作為新的中心點。

(4) 重複以上步驟,直到每一類中心在每次迭代後變化不大為止。也可以多次隨機初始化中心點,然後選擇執行結果最好的乙個

1.4.優點和缺點

(1) 優點是:速度快,計算簡便,主要需要調參的引數僅僅是簇數k。

(2) 缺點是用資料集的中位數而不是均值來計算資料的中心點,當隱含類別的資料量嚴重失衡,或者各隱含類別的方差不同,則聚類效果不佳。

(3) 對噪音和異常點比較的敏感。

1.1. k-means 模組的匯入

import numpy as np

from sklearn.cluster import kmeans

1.2. 模組程式

class

k_means()

:'''

該類實現聚類分析

'''def loaddata

(self, filepath)

:'''

:param filepath:

:return

: 城市名,每項指標

'''fr =

open

(filepath,

'r+'

) #以讀寫的方式開啟乙個文字檔案

lines = fr.

readlines

() #一次讀取整個檔案

retdata_new =

#城市消費資訊

recityname =

#城市名稱

for line in lines:

items = line.

strip()

.split

(","

) #按','分開,每行形成乙個列表

recityname.

(items[0]

) retdata =

for i in

range(1

,len

(items)-1

):retdata.

(float

(items[i]))

retdata_new.

(retdata) #統計只有 指標資料的列表 每行為

return retdata_new, recityname

if __name__ ==

'__main__'

: tample =

k_means()

data, cityname = tample.

loaddata

('31省市居民家庭消費水平.txt'

) # print

(data, cityname)

km =

kmeans

(n_clusters=

3) #n_clusters表示聚類的數目

label = km.

fit_predict

(data) #label聚類後各資料所屬的標籤 #fit_predict

()計算簇中心以及為簇分配序號

expenses = np.

sum(km.cluster_centers_, axis=

1) #聚類中心的數值加和,也是資料的平均消費水平

# print

(expenses)

citycluster =[[

],,]

for i in

range

(len

(cityname)

): #將每個簇的城市輸出

# a = label[i]

citycluster[label[i]].

(cityname[i]

)len

(citycluster)

for i in

range

(len

(citycluster)

): #將每個簇的平均花費進行輸出

print

("expenses:%.2f"

%expenses[i]

)print

(citycluster[i]

)

1.3. 注意事項:

資料(.txt檔案)中最後一行資料結尾的游標要在最後一行最後乙個資料,不能另取一行。

第1聚類:

expenses:

3640.38

['河北'

,'山西'

,'內蒙古'

,'遼寧'

,'吉林'

,'黑龍江'

,'安徽'

,'江西'

,'山東'

,'河南'

,'湖北'

,'貴州'

,'陝西'

,'甘肅'

,'青海'

,'寧夏'

,'新疆'

]第2聚類:

expenses:

4840.20

['天津'

,'江蘇'

,'浙江'

,'福建'

,'湖南'

,'廣西'

,'海南'

,'重慶'

,'四川'

,'雲南'

,'**'

]第3聚類:

expenses:

7307.83

['北京'

,'上海'

,'廣東'

]

可以自定義聚類數目,參考:km = kmeans(n_clusters = 3)。

無監督學習 K means聚類

先用圖來描述k means怎麼做的 對於如下資料 如果你想分成2類 k 2 演算法會隨機生成兩個聚類中心 然後會分別計算每個資料 綠點 與聚類中心的距離 一般是歐式距離 來決定屬於哪個類 距離哪個聚類中心近 這樣,就得到了資料的第一次分類,接下來演算法會計算已分類的資料的 中心 將它們作為新的聚類中...

無監督學習 聚類 K means聚類演算法

無監督學習 聚類 k means聚類演算法 以k為引數,把n個物件分為k個簇,使簇內具有較高相似度,簇間相似度較低 1.隨機選擇k個點作為初始聚類中心 2.根據剩下點與聚類中心的距離 預設就是歐氏距離 歸為最近的簇 3.對每個簇,計算所有點的均值作為新聚類中心 4.重複2 3直至聚類中心不變 31省...

ML演算法 無監督學習 K means聚類

這一系列文章將介紹各種機器學習演算法,部分演算法涉及公示推導,我的部落格中有另乙個板塊介紹基於python和r實現各種機器學習演算法,詳情見置頂的目錄。聚類演算法是一種無監督的機器學習演算法,通過距離測度實現樣本點的歸類,演算法的最終目的是使得聚簇內部樣本點相似度最大,聚簇間樣本點相似度最小,常見的...