聚類K means演算法

2022-08-21 03:09:08 字數 4287 閱讀 8362

問題:給你一張這樣的圖,也沒給其他資訊,讓你去給他們分類?怎麼分類

那麼,我們可能會以帽子

或頭髮等為特徵對他們進行分類,物以類聚,人以群分

1. 隨機在資料當中抽取三個樣本,當做三個類別的中心點(k1,k2,k3). ##圖一,顏色實心標記##

2. 計算其餘的點分別到這三個中心點的距離,這樣每乙個點(樣本)就有3個距離(a,b,c),從中選出距離最近的乙個中心點作為自己的標記形成三個族群.

3. 分別計算這三個族群的平均值,把三個平均值與三個舊的中心點進行比較.

- 如果相同:結束聚類.

- 如果不同:把這個平均值當做新的中心點,重複第二步第三步直到結束聚類.

1. 隨機設定k個特徵空間內的點作為初始的聚類中心2. 對於其他每個點計算到k個中心的距離,未知的點選擇最近的乙個聚類中心點作為標記類別3. 接著對標記聚類中心之後,計算每個聚類的新中心點(平均值)4. 如果計算得出的新中心點與原中心點一樣,那麼聚類結束,否則重新進行第二步驟

sklearn.cluster.kmeans(n_clusters=8,init='k-means++')k

-means聚類

n_clusters:開始的聚類中心數量

init:初始化方法,預設為

'k-means++

'labels_:預設標記的型別,可以和真實值比較(不是值比較)

聚類有什麼作用?聚類一般用在分類演算法之前,然後進行**.聚類流程:

案例演示:

# 匯入案例資料

import

pandas as pd

from sklearn.decomposition import

pca

#讀取四張表的資料

prior = pd.read_csv(r'

c:\users\luowe\desktop\week9\week9\instacart\order_products__prior.csv')

product = pd.read_csv(r'

c:\users\luowe\desktop\week9\week9\instacart\products.csv')

orders = pd.read_csv(r'

c:\users\luowe\desktop\week9\week9\instacart\orders.csv')

aisles = pd.read_csv(r'

c:\users\luowe\desktop\week9\week9\instacart\aisles.csv')

#合併四張表到一張表,(使用者-物品類別)

data = pd.merge(prior, product, on='

product_id')

data = pd.merge(data, orders, on='

order_id')

data = pd.merge(data, aisles, on='

aisle_id')

#建立乙個以使用者為行,產品為列的表 # 即使用者和產品進行交叉

table = pd.crosstab(data['

user_id

'], data['

aisle'])

#資料結構為(206209, 134),需要做主成分分析,進行降維

pca = pca(n_components=0.9) #

保留90%的資料

res = pca.fit_transform(table) #之前的資料降維學習的資料

資料量大,把資料減

x = res[:500]

#假設使用者一共分為4個類別

from sklearn.cluster import

kmeans

km = kmeans(n_clusters=4)

km.fit(x)

#聚類 ,分類加上標記

predict = km.predict(x)少

輸出結果:

500個結果,把這四個類別畫出來:

import

matplotlib.pyplot as plt

plt.figure(figsize=(10,10))

#建立四個顏色

colored = ['

green

','red

','yellow

','blue']

color=[colored[i] for i in

predict]

plt.scatter(x[:, 1],x[:, 11],color=color) #

散點圖,x第1列,y第11列

plt.xlabel('1'

)plt.ylabel('2

') plt.show()

#因為只取了2個維度,所以看上去...

聚類效果的好壞

# 外部聚類最大化,內部距離最小化 #

##輪廓係數,計算聚類效果的好壞 ##

考慮極端情況:

完美聚類 bi>>ai : sci=1

最差聚類 bi<

sklearn.metrics.silhouette_score(x,labels)

計算所有樣本的平均輪廓係數

x:特徵值

labels:被聚類標記的目標值

#

# 評判聚類效果,輪廓係數

from sklearn.metrics import

silhouette_score

silhouette_score(x,predict)

# 通過不停的調優,網格搜尋,交叉驗證可以得到最好的聚類效果

輸出:

特點採用迭代, 直觀易懂, 並且實用

缺點容易收斂到區域性最優解.(多次聚類)....#類 裡面有區域性聚類#

注意 : 聚類一般做在分類之前

K Means聚類演算法

k means聚類演算法 intergret kmeans演算法的基本思想是初始隨機給定k個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心,從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。k means聚類演算法主要分為三個步驟 1 第一步是為待聚類...

聚類演算法 K means

演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個 中心物件 引力中心 來進行計算的。k means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演...

k means聚類演算法

說到聚類,得跟分類區別開來,分類是按人為給定的標準將樣本歸到某個類別中去,在機器學習中多是監督學習,也就是訓練樣本要給標籤 正確的類別資訊 而聚類是在某種規則下自動將樣本歸類,在機器學習中是無監督學習,不需要提前給樣本打標籤。k means聚類演算法,就是在某種度量方式下,將樣本自動劃分到k個類別中...