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

2021-09-05 12:08:01 字數 1937 閱讀 8725

#無監督學習-聚類 k-means聚類演算法

#以k為引數,把n個物件分為k個簇,使簇內具有較高相似度,簇間相似度較低

#1.隨機選擇k個點作為初始聚類中心;2.根據剩下點與聚類中心的距離(預設就是歐氏距離),歸為最近的簇;

#3.對每個簇,計算所有點的均值作為新聚類中心;4.重複2、3直至聚類中心不變

#31省2023年平均每人全年支出,分為衣、食等八個變數,利用已有資料,對其進行聚類(對各城市消費等級進行分類)。

#技術路線:sklearn.cluster.kmeans

#1.建立工程,匯入sklearn相關包

import numpy as np

from sklearn.cluster import kmeans

#2.載入資料,建立k-means演算法例項,並進行訓練,獲得標籤

#載入資料方法定義

defloaddata

(filepath)

: fr=

open

(filepath,

'r+'

)#讀寫方式開啟

lines=fr.readlines(

)#一行一行讀入

retdata=

retcityname=

for line in lines:

items=line.strip(

).split(

',')

#去掉文字中空格並拆分元素0]

)#建立乙個城市名稱的列表[,,,...]

[float

(items[i]

)for i in

range(1

,len

(items))]

)#建立乙個二維列表,每個城市資料為乙個內層列表[,,...]

return retdata,retcityname

#主程式

if __name__==

'__main__'

: data,cityname=loaddata(

"city.txt"

)#注意loaddata的用法:會一行一行的處理資料,並分別返回響應值

#print(cityname,data)二者為列表型別

km=kmeans(n_clusters=3)

#指定聚類中心個數(消費水平級數),預設最大迭代次數max_iter為300

label=km.fit_predict(data)

#計算簇中心以及為簇分配序號,label為聚類後各資料所屬的標籤(不是簇中心值),data應為二維陣列

expenses=np.

sum(km.cluster_centers_,axis=1)

#expense為聚類中心點數值結合,即平均消費水平

#km.cluster_centers_為按照label(=n_clusters)計算的簇中心值,axis=1為橫向計算每個城市的總消費

print

(expenses.sort(axis=0)

)#有三個元素,expenses為numpy.array型別,.sort確保expenses輸出時按照公升序排列

citycluster=[[

],,]

for i in

range

(len

(cityname)):

citycluster[label[i]])

#按照label類別將每個城市歸到內層列表中

for i in

range

(len

(citycluster)):

print

("expenses:%.2f"

% expenses[i]

)#輸出計算出的三個城市總開銷簇中心

print

(citycluster[i]

)#輸出對應簇包含的城市名稱

無監督學習 K Means聚類

無監督學習 通過無標籤的資料,學習資料的分布或資料與資料之間的關係。1定義 根據資料的 相似性 將資料分為多類的過程。1.1.演算法模組 k means 近鄰傳播演算法 dbscan演算法,高斯混合模型 gmm 等。1.2.python庫 sklearn.cluster 1.3.k means聚類演...

無監督學習 K means聚類

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

無監督學習 聚類

聚類是針對給定的樣本,根據據他們特徵的相似度或者距離,將其歸併到若干個 類 或 簇 的資料分析問題。乙個類是樣本的乙個子集。直觀上,相似的樣本在相同的類,不相似的樣本分散在不同的類。目的是通過得到的 類 或 簇 來發現資料的特點或者對資料進行處理,在資料探勘 模式識別等領域有著廣泛的應用。屬於無監督...