numpy実現k-meansアルゴリズム
3453 ワード
numpy実現k-meansアルゴリズム
numpyの中国語のドキュメントを見ていくつか学びました
彼のk-meansコードを試してみました
ローカルでの運用に問題がある場所もあります
ちょっと直して、詳しい注釈をつけて理解を助けました.
元のコードのアドレスは:NumPy中国語ドキュメント
一応分かりましたが、中には2つのコードがありますが、実装プロセスが分かりません.もし大物が知っていたら、説明してください(´v`)
numpyの中国語のドキュメントを見ていくつか学びました
彼のk-meansコードを試してみました
ローカルでの運用に問題がある場所もあります
ちょっと直して、詳しい注釈をつけて理解を助けました.
元のコードのアドレスは:NumPy中国語ドキュメント
import matplotlib.pyplot as plt
import numpy as np
import random
import math
import re
def euclDistance(v1, v2):
#
return math.sqrt(sum(np.power(v2 - v1, 2)))
def initCentroids(dataSet, k):#dataSet- k-
#
numSamples, dim = dataSet.shape#numSample- dim-
#shape
centroids = np.zeros((k, dim))#centroids-
for i in range(k):
index = int(random.uniform(0, numSamples))#index-
centroids[i, :] = dataSet[index, :]
# centroids
"""---------------------------------------- : random """
return centroids
def kmeans(dataSet, k):
#k-means
numSamples = dataSet.shape[0]#
clusterAssment = np.mat(np.zeros((numSamples, 2)))#clusterAssment-
#1.zeros numSamples, 2
#2.mat 1
clusterChanged = True#clusterChanged-
centroids = initCentroids(dataSet, k)#
while clusterChanged:#
clusterChanged = False#
for i in range(numSamples):#
minDist = 100000.0#minDist-
minIndex = 0#minIndex-
for j in range(k):
# ,
distance = euclDistance(centroids[j, :], dataSet[i, :])#distance-
if distance < minDist:
minDist = distance
minIndex = j
if clusterAssment[i, 0] != minIndex:#
clusterChanged = True#
clusterAssment[i, :] = minIndex, minDist**2# ,
for j in range(k):#
pointsInCluster = dataSet[np.nonzero(clusterAssment[:, 0].A == j)[0]]# ?
"""---------------------------------------------------- : """
centroids[j, :] = np.mean(pointsInCluster, axis = 0)
#np.mean()- axis=0-
print(" ")
return centroids,clusterAssment
def showCluster(dataSet, k, centroids, clusterAssment):
#
numSamples, dim = dataSet.shape
if dim != 2:
print(" ")
return 1
mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', ' len(mark):
print("k , ")
return 1
for i in range(numSamples):#
markIndex = int(clusterAssment[i, 0])
plt.plot(dataSet[i, 0], dataSet[i, 1], mark[markIndex])
mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '
一応分かりましたが、中には2つのコードがありますが、実装プロセスが分かりません.もし大物が知っていたら、説明してください(´v`)