Python實(shí)現(xiàn)K-means算法及其應(yīng)用
K-means算法簡介K-means算法是一種聚類算法,接受參數(shù)k,然后將事先輸入的n個(gè)數(shù)據(jù)對象劃分為k個(gè)聚類,使得每個(gè)聚類內(nèi)的對象相似度較高,而不同聚類之間的對象相似度較小。通過計(jì)算各聚類中對象的
K-means算法簡介
K-means算法是一種聚類算法,接受參數(shù)k,然后將事先輸入的n個(gè)數(shù)據(jù)對象劃分為k個(gè)聚類,使得每個(gè)聚類內(nèi)的對象相似度較高,而不同聚類之間的對象相似度較小。通過計(jì)算各聚類中對象的均值獲得一個(gè)“中心對象”,通過隨機(jī)選取幾個(gè)聚類中心,計(jì)算所有點(diǎn)到中心的距離,并選取最近的類別,再以該簇為中心,求簇中點(diǎn)的均值形成新的類別。
實(shí)現(xiàn)K-means算法
第一步是計(jì)算歐氏距離并初始化聚類中心,代碼示例如下:
```python
import numpy as np
計(jì)算歐式距離
def calculate_distance(vector1, vector2):
return np.sqrt((np.square(vector1 - vector2)))
初始化聚類中心
def initialize_centroids(data, k):
import random
return (data, k)
```
生成新的簇類并求出最短距離
接下來是找到每個(gè)點(diǎn)到中心點(diǎn)的最小距離,代碼如下:
```python
def minimum_distance(data, centroid_list):
cluster_dictionary {}
for i in data:
vector1 i
marker 0
min_dist float('inf')
for j in range(len(centroid_list)):
vector2 centroid_list[j]
distance calculate_distance(vector1, vector2)
if distance < min_dist:
min_dist distance
marker j
if marker not in cluster_():
cluster_dictionary[marker] []
cluster_dictionary[marker].append(i)
return cluster_dictionary
```
導(dǎo)入數(shù)據(jù)并運(yùn)行算法
導(dǎo)入數(shù)據(jù)并計(jì)算,當(dāng)簇中心變化小于一定閾值時(shí)跳出循環(huán),代碼如下:
```python
path 'C:/Users/jyjh/Desktop/data.txt'
data open(path, 'r').readlines()
temp []
import numpy as np
for i in data:
num_list []
for j in ().split(' '):
num float(j)
num_(num)
(num_list)
data (temp)
centroid_list initialize_centroids(data, 4)
cluster_dictionary minimum_distance(data, centroid_list)
new_msd getmsd(cluster_dictionary, centroid_list)
old_msd -0.000001
k 2
while abs(new_msd - old_msd) > 0.00001:
centroid_list getcentroids(cluster_dictionary)
cluster_dictionary minimum_distance(data, centroid_list)
old_msd new_msd
new_msd getmsd(cluster_dictionary, centroid_list)
k 1
print(new_msd - old_msd)
showresult(cluster_dictionary, centroid_list)
```
以上是關(guān)于Python實(shí)現(xiàn)K-means算法的簡要介紹和代碼示例。通過K-means算法,我們可以對數(shù)據(jù)進(jìn)行聚類分析,發(fā)現(xiàn)數(shù)據(jù)之間的相似性,為數(shù)據(jù)挖掘和模式識別提供了一種有效的方法。如果你正在進(jìn)行數(shù)據(jù)分析或機(jī)器學(xué)習(xí)相關(guān)工作,不妨嘗試使用K-means算法來處理數(shù)據(jù),發(fā)現(xiàn)其中隱藏的規(guī)律和信息。