無監督學習:通過無標籤的資料,學習資料的分布或資料與資料之間的關係。
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實現各種機器學習演算法,詳情見置頂的目錄。聚類演算法是一種無監督的機器學習演算法,通過距離測度實現樣本點的歸類,演算法的最終目的是使得聚簇內部樣本點相似度最大,聚簇間樣本點相似度最小,常見的...