나는 파이썬 구현을 k- 평균 알고리즘을 클러스터와 캐시에 예제를 사용하여 찾고있다.파이썬 k- 평균 알고리즘
답변
Scipy's clustering 구현이 잘 작동하며 구현시 k-means을 포함합니다.
응집성 클러스터링을 수행하는 scipy-cluster도 있습니다. 클러스터의 수를 미리 결정할 필요가 없다는 장점이 있습니다.
, 당신은 scipy 사용할 수, K-means clustering an vector quantization
를 또는, OpenCV의, ctypes-opencv에 대한 파이썬 래퍼를 사용할 수 있습니다.
또는 OpenCV's new Python interface 및 해당 kmeans 구현이 가능합니다.
GDAL을 사용할 수도 있습니다. GDAL은 공간 데이터로 작업 할 수있는 많은 기능을 가지고 있습니다.
SciPy의 kmeans2()에는 몇 가지 수치적인 문제가 있습니다. 다른 사람은 reported이라는 오류 메시지가 있습니다. "매트릭스는 양수입니다. 콜렉스 분해는 계산할 수 없습니다."버전 0.6.0에서, 그리고 나는 버전 0.7.1에서 방금 만났습니다.
지금은 PyCluster을 사용하는 것이 좋습니다. 사용 예 :
>>> import numpy
>>> import Pycluster
>>> points = numpy.vstack([numpy.random.multivariate_normal(mean,
0.03 * numpy.diag([1,1]),
20)
for mean in [(1, 1), (2, 4), (3, 2)]])
>>> labels, error, nfound = Pycluster.kcluster(points, 3)
>>> labels # Cluster number for each point
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32)
>>> error # The within-cluster sum of distances for the solution
1.7721661785401261
>>> nfound # Number of times this solution was found
1
연속 데이터의 경우 k- 평균은 매우 쉽습니다.
평균의 목록이 필요하며 각 데이터 포인트에 대해 새 데이터 포인트에 가장 가까운 평균값을 찾고 평균값을 찾습니다. 당신의 수단은 입력 데이터에서 가장 최근의 포인트 클러스터를 나타낼 것입니다.
나는 평균을 연속적으로 수행하므로 새 평균을 얻기 위해 이전 데이터를 가질 필요가 없습니다. 이전 평균 k
다음 데이터 포인트 x
, 그리고 평균을 유지하기 위해 과거의 데이터 포인트의 수를하는 일정 n
을 감안할 때, 새로운 평균은 여기
k*(1-(1/n)) + n*(1/n)
파이썬
의 전체 코드입니다
from __future__ import division
from random import random
# init means and data to random values
# use real data in your code
means = [random() for i in range(10)]
data = [random() for i in range(1000)]
param = 0.01 # bigger numbers make the means change faster
# must be between 0 and 1
for x in data:
closest_k = 0;
smallest_error = 9999; # this should really be positive infinity
for k in enumerate(means):
error = abs(x-k[1])
if error < smallest_error:
smallest_error = error
closest_k = k[0]
means[closest_k] = means[closest_k]*(1-param) + x*(param)
모든 데이터가 통과되면 수단을 인쇄 할 수 있지만 실시간으로 변경하는 것이 훨씬 재미 있습니다. 나는 이것을 20 밀리 비트의 주파수의 엔벨로프 (envelope)에 사용했고, 1 ~ 2 분 정도 이야기를 한 후에는 짧은 'a'모음, long o 모음, 's'자음에 대해 일관된 범주를 유지했습니다. ~!
이것은 훌륭한 온라인 학습 kmeans 알고리즘입니다! 그러나 코드 마지막 행에 버그가 있습니다. 이 행에있는 하나의 탭을 제거해야합니다. 즉 [nearest_k] = [nearest_k] * (1-param) + x * (param) – lai
(수십 년 후)이 kmeans.py는 is-it-possible-to-specify-your-own-distance-function-using-scikits-learn-k-means이며 간단하고 합리적입니다. 그것은 scipy.spatial.distance에서 20-odd 메트릭 중 하나를 사용합니다.
파이썬의 Pycluster와 pyplot은 k-means 클러스터링과 2D 데이터의 시각화에 사용될 수 있습니다. 최근 블로그 게시물 Stock Price/Volume Analysis Using Python and PyCluster은 주식 데이터에 PyCluster를 사용한 클러스터링의 예를 제공합니다.
* Pyhon이 코드 K-수단이 *
from math import math
from functions import functions
class KMEANS:
@staticmethod
def KMeans(data,classterCount,globalCounter):
counter=0
classes=[]
cluster =[[]]
cluster_index=[]
tempClasses=[]
for i in range(0,classterCount):
globalCounter+=1
classes.append(cluster)
cluster_index.append(cluster)
tempClasses.append(cluster)
classes2=classes[:]
for i in range(0,len(classes)):
globalCounter=1
cluster = [data[i]]
classes[i]=cluster
functions.ResetClasterIndex(cluster_index,classterCount,globalCounter)
functions.ResetClasterIndex(classes2,classterCount,globalCounter)
def clusterFills(classeses,globalCounter,counter):
counter+=1
combinedOfClasses = functions.CopyTo(classeses)
functions.ResetClasterIndex(cluster_index,classterCount,globalCounter)
functions.ResetClasterIndex(tempClasses,classterCount,globalCounter)
avarage=[]
for k in range(0,len(combinedOfClasses)):
globalCounter+=1
avarage.append(functions.GetAvarage(combinedOfClasses[k]))
for i in range(0,len(data)):
globalCounter+=1
minimum=0
index=0
for k in range(0,len(avarage)):
total=0.0
for j in range(0,len(avarage[k])):
total += (avarage[k][j]-data[i][j]) **2
tempp=math.sqrt(total)
if(k==0):
minimu=tempp
if(tempp<=minimu):
minimu=tempp
index=k
tempClasses[index].append(data[i])
cluster_index[index].append(i)
if(functions.CompareArray(tempClasses,combinedOfClasses)==1):
return clusterFills(tempClasses,globalCounter,counter)
returnArray = []
returnArray.append(tempClasses)
returnArray.append(cluster_index)
returnArray.append(avarage)
returnArray.append(counter)
return returnArray
cdcd = clusterFills(classes,globalCounter,counter)
if cdcd !=None:
return cdcd
@staticmethod
def KMeansPer(data,classterCount,globalCounter):
perData=data[0:int(float(len(data))/100*30)]
result = KMEANS.KMeans(perData,classterCount,globalCounter)
cluster_index=[]
tempClasses=[]
classes=[]
cluster =[[]]
for i in range(0,classterCount):
globalCounter+=1
classes.append(cluster)
cluster_index.append(cluster)
tempClasses.append(cluster)
classes2=classes[:]
for i in range(0,len(classes)):
globalCounter=1
cluster = [data[i]]
classes[i]=cluster
functions.ResetClasterIndex(cluster_index,classterCount,globalCounter)
functions.ResetClasterIndex(classes2,classterCount,globalCounter)
counter=0
def clusterFills(classeses,globalCounter,counter):
counter+=1
combinedOfClasses = functions.CopyTo(classeses)
functions.ResetClasterIndex(cluster_index,classterCount,globalCounter)
functions.ResetClasterIndex(tempClasses,classterCount,globalCounter)
avarage=[]
for k in range(0,len(combinedOfClasses)):
globalCounter+=1
avarage.append(functions.GetAvarage(combinedOfClasses[k]))
for i in range(0,len(data)):
globalCounter+=1
minimum=0
index=0
for k in range(0,len(avarage)):
total=0.0
for j in range(0,len(avarage[k])):
total += (avarage[k][j]-data[i][j]) **2
tempp=math.sqrt(total)
if(k==0):
minimu=tempp
if(tempp<=minimu):
minimu=tempp
index=k
tempClasses[index].append(data[i])
cluster_index[index].append(i)
if(functions.CompareArray(tempClasses,combinedOfClasses)==1):
return clusterFills(tempClasses,globalCounter,counter)
returnArray = []
returnArray.append(tempClasses)
returnArray.append(cluster_index)
returnArray.append(avarage)
returnArray.append(counter)
return returnArray
cdcd = clusterFills(result[0],globalCounter,counter)
if cdcd !=None:
return cdcd
Read ...
의 KMeans() 알아 SciKit 파이썬에서 클러스터링을 k는-의미 적용하는 가장 간단한 방법입니다. 피팅 클러스터는 다음과 같이 간단합니다. kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
.
이 코드 스 니펫은 중심 좌표를 저장하고 좌표 배열에 대해 클러스터를 예측하는 방법을 보여줍니다.
>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
... [4, 2], [4, 4], [4, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([0, 0, 0, 1, 1, 1], dtype=int32)
>>> kmeans.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)
>>> kmeans.cluster_centers_
array([[ 1., 2.],
[ 4., 2.]])
(위에 링크 SciKit의 호의 알아 설명서)
- 1. 증분 k- 코어 알고리즘
- 2. 이미지 유사도 및 k 평균 클러스터링
- 3. 시계열 데이터에서 K- 평균 클러스터링을 수행하려면 어떻게해야합니까?
- 4. K- 첫 단거리 경로 알고리즘 검색
- 5. k 파티션 알고리즘 - 작업 부하를 균등하게 나누기
- 6. K 가장 가까운 이웃 알고리즘 의심
- 7. 일반화 된 헤비안 알고리즘 (루비 또는 파이썬)
- 8. 평균 변경을 얻는 가장 빠른 알고리즘
- 9. MapReduce - 상대 값 (평균, 최고 k 등)을 어떻게 계산합니까?
- 10. MATLAB에서 미리 정의 된 시드를 사용하여 K- 평균 클러스터링 사용
- 11. AdaBoost ML 알고리즘 파이썬 구현
- 12. n 비트의 크기 k 오류 수정 코드를 생성하는 알고리즘
- 13. k 번째 최단 경로 찾기?
- 14. int [] k, i 및 int k [], i;
- 15. K & R
- 16. flashsort 알고리즘
- 17. 버킷 팅 알고리즘
- 18. 개별 평균 및 누적 평균 및 최고 평균 점수 기록
- 19. Python 알고리즘 효율성
- 20. K 평균 클러스터링, 왜 클러스터의 초기 위치가 최종 클러스터링 결과에 영향을 줍니까?
- 21. O (n * log K) 시간에 평균 길이 K의 정렬 된 목록을 어떻게 정렬합니까?
- 22. 반복 알고리즘
- 23. 알고리즘 smbPitchShift (파스칼)
- 24. 자바에서 간단한 그룹화를위한 k- 수단을 구현하는 방법
- 25. 평균 'cgi.parse_qs'가
- 26. 가중 평균
- 27. 평균 계산하기
- 28. 선형 검색 알고리즘의 평균 사례 실행 시간
- 29. K & R, K & 연구에서 읽는 동안 EOF
- 30. Java에서 k-ary 트리
나는 이미지에 대한 유사한 구현했다. RGB 값 대신 2 차원 배열을 사용할 수 있습니다. 매우 순진하지만 https://github.com/keremgocen/pattern-recog-notes에 적합합니다. – mass