K均值演算法

2022-08-28 21:09:26 字數 4494 閱讀 8126

1. 機器學習的步驟

資料,模型選擇,訓練,測試,**

2. 安裝機器學習庫sklearn

pip list 檢視版本

python -m pip install --upgrade pip

pip install -u scikit-learn

pip uninstall sklearn

pip uninstall numpy

pip uninstall scipy

pip install scipy

pip install numpy

pip install sklearn

2. 匯入sklearn的資料集

from sklearn.datasets import load_iris

iris = load_iris()

iris.keys()

x = iris.data # 獲得其特徵向量

y = iris.target # 獲得樣本標籤

iris.feature_names # 特徵名稱

3.k均值演算法

k-means是乙個反覆迭代的過程,演算法分為四個步驟:

(x,k,y)

1) 選取資料空間中的k個物件作為初始中心,每個物件代表乙個聚類中心;

def initcenter(x, k): kc

2) 對於樣本中的資料物件,根據它們與這些聚類中心的歐氏距離,按距離最近的準則將它們分到距離它們最近的聚類中心(最相似)所對應的類;

def nearest(kc, x[i]): j

def xclassify(x, y, kc):y[i]=j

3) 更新聚類中心:將每個類別中所有物件所對應的均值作為該類別的聚類中心,計算目標函式的值;

def kcmean(x, y, kc, k):

4) 判斷聚類中心和目標函式的值是否發生改變,若不變,則輸出結果,若改變,則返回2)。

while flag:

y = xclassify(x, y, kc)

kc, flag = kcmean(x, y, kc, k)

參考官方文件: 

4. 作業:

1). 撲克牌手動演練k均值聚類過程:>30張牌,3類

本人抽取了如上30張牌,一開始以3,4,5作為聚類中心,最終結果如上圖所示,最終中心為2,6,j(12)。

2). *自主編寫k-means演算法 ,以鳶尾花花瓣長度資料做聚類,並用散點圖顯示。(加分題)

import

numpy as np

from sklearn.datasets import

load_iris

import

random

import

matplotlib.pylab as plt

#(1)定義計算歐幾里得距離函式。

defjl(data1,data2):

return np.sqrt(sum((data1-data2)**2))

#(2)構建k個隨機質心。

defsjcenter(k,data):

sjksz=

newdata=

for i in

range(k):

sjk = random.randint(0, len(data)-1)

if sjk not

insjksz:

else

: i=i-1;

return

newdata

#(3)定義k-means函式實現演算法。

defkmeans(k,data,center):

n =len(data)

dist = np.zeros([n, k + 1])

newcenter = np.zeros([k, data.shape[1]])

while

true:

for i in

range(n):

for j in

range(k):

dist[i, j] =jl(data[i],center[j])

dist[i, k] =np.argmin(dist[i, :k])

for i in

range(k):

index = dist[:, k] ==i

newcenter[i, :] = data[index, :].mean(axis=0)

if (np.all(center ==newcenter)):

break

else

: center =newcenter

return

dist

#(4)主函式中呼叫上述4個函式實現k-means演算法,並繪製資料散點圖檢視聚類中心。

defmain(k,data):

center =sjcenter(k, data)

dist=kmeans(k,data,center)

plt.scatter(data[:, 0], data[:, 1], c=dist[:,k], s=50, cmap='

rainbow')

#類中心用黑點標出

3). 用sklearn.cluster.kmeans,鳶尾花花瓣長度資料做聚類,並用散點圖顯示.

#

(1)直接呼叫sklearn庫實現對鳶尾花資料進行聚類分析。

2,3題都用了鳶尾花的花瓣資料做了聚類,效果圖也如上二圖所示,黑點為聚類中心,可以看出較好的吻合。

4). 鳶尾花完整資料做聚類並用散點圖顯示.

利用鳶尾花的完整資料進行聚類分析,與實際的分類做出比較後如上圖所示,第一第二聚模擬較好,第三個聚類較不準確。

5).想想k均值演算法中以用來做什麼?

1、給機器識別物種

2、**人習慣愛好

K 均值演算法

動態聚類方法是模式識別中一種普遍採用的方法,它具有以下3個要點 1 選定某種距離度量作為樣本間的相似性度量 2 確定某個評價聚類結果質量的準則函式 3 給定某個初始分類,然後用迭代演算法找出使準則函式取極值的最好的聚類結果 k means演算法 輸入 聚類個數k,以及包含 n個資料物件的資料庫。輸出...

K均值演算法

假設需要聚成k個類 演算法先會隨機從資料集中選取k個點,把他們當做k個聚類的中心點 依次計算資料集中的每乙個點與各個中心點的距離,離哪個中心點近,就劃分到那個中心點對應的聚類下 計算分到同一類簇下,所有點的均值,更新中心點,重複 直至達到迭代結束條件 import numpy as np impor...

k均值演算法

1 撲克牌手動演練k均值聚類過程 30張牌,3類 實驗總牌數為30,分三類進行三輪迭代。第一輪 抽取聚類中心為 3 4 7.聚類結果為 第二輪 經過求平均後,重新確定聚類中心為 2 4 10 第三輪 對上類再進行求平均,選定聚類中心為2 5 10 最終聚類中心穩定在2 5 10,以此為小中大劃分。2...