kmean聚類python實現

2021-09-27 12:01:28 字數 2843 閱讀 5495

import pandas as pd

import numpy as np

import xlrd

# 匯入資料

df2 = pd.read_excel(

"test2.xlsx"

)data = np.array(df2)

# 去掉前兩列

data = data[:,

2:]# 分為k類

k =3

# 臨近均值e

e =0.00001

# 獲得行數和列數

(row, line)

= data.shape

# 隨機分配中心點

datak = np.array(

[data[1,

:], data[2,

:], data[10,

:]])

# print(datak.shape)

# 初始化距離

d = np.zeros(

(k, row,1)

)while1:

for i in

range

(k):

# 與中心點做差

dev =

abs(data - datak[i]

)# 用曼哈頓距離求距離

d[i]

= np.

sum(dev, axis=

1, keepdims=

true

)# 返回最小值下標

mind = np.argmin(d, axis=0)

# 生成(row,0)秩

mind = np.array(mind[:,

0])# print(mind)

kx0 = np.where(mind ==0)

kx0 = np.array(kx0)

# print(kx0)

kx1 = np.where(mind ==1)

kx1 = np.array(kx1)

kx2 = np.where(mind ==2)

kx2 = np.array(kx2)

# print(kx2.shape)

kx = np.array(

[kx0[0]

, kx1[0]

, kx2[0]

])# print(kx[0])

# 計算中心點和誤差

# 初始化方差e

e = np.zeros((2

, k,1)

)for i in

range

(k):

# 獲取第i個物件的行數

linex = kx[i]

.shape

linex = linex[0]

# print(linex)

# 初始化第i個類包含的物件

# print(linex, line)

data_x1 = np.zeros(

(linex, line)

) data_x2 = np.zeros(

(k, linex, line)

)# print(data_x.shape)

for j in

range

(linex)

:# 每個物件和第i個中心點作差

data_x1[j]

=abs

(data[kx[i]

[j]]

-datak[i]

) data_x2[i, j]

= data[kx[i]

[j]]

# 求方差

e[0, i,0]

= np.

sum(np.

sum(data_x1**2)

)# print(data_x1.shape)

# print(i, e[0, i, 0])

# print(data_x2.shape)

# 更新第i類的中心點

# a = np.mean(data_x2, axis=0)

# print(a.shape)

datak[i]

= np.mean(data_x2[i]

, axis=0)

for j in

range

(linex)

:# 每個物件和第i個中心點作差

data_x1[j]

=abs

(data[kx[i]

[j]]

-datak[i]

) e[

1, i,0]

= np.

sum(np.

sum(data_x1 **2)

)# print(i, e[1, i, 0])

# print(data_x)

# print(datak[i])

# print(e[0, 0], e[1, 0], e[2, 0])

if e[0,

0,0]

-e[1,0

,0]<= e and e[0,

1,0]

-e[1,1

,0]<= e and e[0,

2,0]

-e[1,2

,0]<= e:

break

print

("success!"

)# 列印類和類中心

for i in

range

(k):

print

(kx[i]

.shape)

print

(kx[i]

)print

(datak[i]

)

測試資料

Kmean聚類演算法原理python實現

kmean聚類演算法是基於距離對物件進行分類的演算法,該演算法實現步驟如下 1 確定初始資料簇質心,質心的數量與需要分的類的數量一致 2 將資料集中的每乙個物件與不同質心計算距離,並將其分類到最近的質心簇中 3 更新資料簇質心,迭代計算,直到資料簇質心不再變化或者分類精度達到要求時,停止演算法。如下...

K mean聚類演算法

k mean演算法屬於非監督類演算法,模型相對簡單。目標函式 j sum dj i 演算法 1 初始化k個點 2 樣本xi,到k個點的距離為 dk xi uk j argmin j dk xi屬於cj 3 更新引數 uk sum xi i sum i 重複2和3,終止條件j的變化很小或者uk變化很小...

聚類及K mean演算法

首先什麼是聚類,和分類有什麼區別,這裡講乙個例子,比如有一群學生考完期末考試,現在要根據他們的成績把他們劃分成幾個小組,讓老師分別進行輔導,這時候,你不知道要劃分幾個小組比較好,但你可以根據他們的成績,比較成績接近的歸到乙個小組,這個過程就是聚類,另一種情況是直接給出了90分段的乙個小組,80分段的...