문제

코디네이트 데이터베이스를 클러스터하고 캐시하기위한 예제가 포함 된 K-Means 알고리즘의 Python 구현을 찾고 있습니다.

도움이 되었습니까?

해결책

Scipy의 클러스터링 구현은 잘 작동하며 a K- 평균 구현.

또한 있습니다 Scipy-cluster, 응집 클러스터링을 수행하는; THS는 미리 클러스터 수를 결정할 필요가 없다는 이점이 있습니다.

다른 팁

Scipy 's kmeans2 () 수치 적 문제가 있습니다. 다른 사람들은 가지고 있습니다 보고 된 버전 0.6.0에서 "매트릭스는 긍정적 인 명확성이 아닙니다 - Cholesky Decomposition을 계산할 수 없습니다"와 같은 오류 메시지는 0.7.1 버전에서 동일하게 발생했습니다.

지금은 사용하는 것이 좋습니다 파이 클러스터 대신에. 예제 사용 :

>>> 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)

모든 데이터가 통과되었을 때 수단을 인쇄 할 수 있지만 실시간으로 변경되는 것을 보는 것이 훨씬 더 재미 있습니다. 나는 이것을 20ms 비트의 사운드의 주파수 봉투에 사용했고, 1 ~ 2 분 동안 그것과 대화를 나눈 후, 짧은 'a'모음, 긴 'o'모음 및 ''s '자음에 대한 일관된 범주가있었습니다. 더 이상!

에서 위키 백과, 당신은 scipy를 사용할 수 있습니다. 벡터 양자화를 클러스터링하는 K- 평균

또는 OpenCV에 파이썬 래퍼를 사용할 수 있습니다. ctypes-opencv.

또는 당신은 할 수 있습니다 OpenCV의 새로운 Python 인터페이스, 그리고 그들의 kmeans 구현.

(몇 년 후)이 kmeans.py 아래 IS-IT-IT-IT-IT-SPECIFY-YOUR-OWN Distance-Function-Using-Scikits-K-Means 간단하고 합리적으로 빠릅니다. scipy.spatial.distance에서 20 개의 메트릭을 사용합니다.

공간 데이터와 함께 작동하기 위해 많은 기능이 많은 GDAL을 사용할 수도 있습니다.

Scikit Learn 's kmeans () 파이썬에서 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 Learn의 문서 제공)

Python의 Pycluster 및 PyPlot은 K-Means 클러스터링 및 2D 데이터의 시각화에 사용할 수 있습니다. 최근 블로그 게시물 Python 및 Pycluster를 사용한 주가/볼륨 분석 재고 데이터에서 pycluster를 사용하여 클러스터링의 예를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top