kmean聚類演算法是基於距離對物件進行分類的演算法,該演算法實現步驟如下:
1、確定初始資料簇質心,質心的數量與需要分的類的數量一致;
2、將資料集中的每乙個物件與不同質心計算距離,並將其分類到最近的質心簇中;
3、更新資料簇質心,迭代計算,直到資料簇質心不再變化或者分類精度達到要求時,停止演算法。
**如下:
(1)建立資料集**:
(2)kmean演算法實現分類import matplotlib.pyplot as plt
import numpy as np
import random
def make_data():
data_list =
data_list1 =
data_list2 =
data_list3 =
for _ in range(30):
data1 =
data2 =
data3 =
for _ in range(4):
return data_list, data_list1, data_list2, data_list3
if __name__ == '__main__':
data, _, _, _ = make_data()
# print(data)
data_x =
data_y =
for i in data:
print(i)
plt.scatter(data_x, data_y)
plt.show()
執行結果如下:# kmean演算法原理演示
import numpy as np
import matplotlib.pyplot as plt
import creat_data
import sys
sys.setrecursionlimit(1000000)
def kmean_test(cornel_list, data_list):
""":param data_list: [,,,,...,]
:param cornel_list: [,,,...,],內部元素數量與需要分類的個數有關
:return: 新核心[,,,...,]和分類的資料[[,,...,],[,,...,],...,]
"""table_list =
for _ in cornel_list:
# 將列表轉換為numpy陣列
data_list_array = np.array(data_list)
cornel_list_array = np.array(cornel_list)
for data_item in data_list_array:
distance_list =
for cornel_item in cornel_list_array:
distance = np.sqrt(np.sum((data_item - cornel_item) ** 2))
min_value_index = distance_list.index(min(distance_list))
table_list_array = np.array(table_list)
# 計算新核
new_cornel_list =
for table in table_list_array:
sum_cornel = np.zeros((1, len(data_list_array[0])))
for item in table:
sum_cornel += item
km.cornel_list_a = new_cornel_list
km.table_list_b = table_list
return table_list, new_cornel_list
class km:
cornel_list_a = none
table_list_b = none
def __init__(self, a, b):
self.count = 0
self.loop(a, b)
def loop(self, cornel_list, data_list):
table, new_cornel = kmean_test(cornel_list, data_list)
if new_cornel == cornel_list:
# print("迭代%d次尋找到最佳分組如下:" % self.count)
# for table0 in table:
# for item in table0:
# print(item)
# print("#################")
return table, new_cornel
else:
self.count += 1
self.loop(new_cornel, data_list)
if __name__ == '__main__':
km = km
data, list1, list2, list3 = creat_data.make_data()
list1_x =
list1_y =
list2_x =
list2_y =
list3_x =
list3_y =
for i in list1:
for j in list2:
for k in list3:
cornel_list1 = [[1, 3, 4, 5], [5, 6, 2, 3], [5, 3, 8, 4]]
km(cornel_list1, data)
cornel1 = km.cornel_list_a
table1 = km.table_list_b
cornel_list0 = [[40, 10, 36, 5], [33, 55, 74, 21], [9, 13, 18, 4]]
km(cornel_list0, data)
cornel2 = km.cornel_list_a
table2 = km.table_list_b
init_cornel1_x =
init_cornel1_y =
init_cornel2_x =
init_cornel2_y =
cornel1_x =
cornel1_y =
cornel2_x =
cornel2_y =
for h in cornel_list1:
for h1 in cornel_list0:
for i in cornel1:
for j in cornel2:
plt.scatter(list1_x, list1_y, color='black')
plt.scatter(list2_x, list2_y, color='red')
plt.scatter(list3_x, list3_y, color='green')
plt.scatter(cornel1_x, cornel1_y, color='blue')
plt.scatter(cornel2_x, cornel2_y, color='yellow')
plt.scatter(init_cornel1_x, init_cornel1_y, color='purple')
plt.scatter(init_cornel2_x, init_cornel2_y, color='darkorange')
plt.show()
圖中用不同顏色標記不同資料點,黑色、紅色和綠色分別是不同簇的資料,橙色和紫色為初始設定的質心(初始設定了兩個不同的質心,分別對同一組資料進行分類,以說明初始質心的選擇對分類結果的影響。)黃色和藍色分別為初始質心確定的最終分類質心的結果,由於初始兩個質心最終確定的分類質心相同,導致藍色質心被覆蓋。當對其中乙個最終質心不描繪時,就可以看到另乙個藍色質心了,如下:
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分段的...
基本k mean聚類的文字聚類演算法原理和例子
基於質心的劃分方法是研究最多的演算法,包括k mean聚類演算法及其各種變體,這些變體依據初始簇的選擇,物件的劃分 相識度的計算方法 簇中心的計算方法不同而不同。基於質心的劃分方法將簇中所有物件的平均值看做簇的質心,根據乙個資料物件與簇質心的距離,將該物件賦予最近的簇。在這類方法中,需要給定劃分的簇...