#無監督學習-聚類 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 演算法會隨機生成兩個聚類中心 然後會分別計算每個資料 綠點 與聚類中心的距離 一般是歐式距離 來決定屬於哪個類 距離哪個聚類中心近 這樣,就得到了資料的第一次分類,接下來演算法會計算已分類的資料的 中心 將它們作為新的聚類中...
無監督學習 聚類
聚類是針對給定的樣本,根據據他們特徵的相似度或者距離,將其歸併到若干個 類 或 簇 的資料分析問題。乙個類是樣本的乙個子集。直觀上,相似的樣本在相同的類,不相似的樣本分散在不同的類。目的是通過得到的 類 或 簇 來發現資料的特點或者對資料進行處理,在資料探勘 模式識別等領域有著廣泛的應用。屬於無監督...