سؤال

أنا أبحث عن تطبيق Python لخوارزمية k-means مع أمثلة لتجميع قاعدة بيانات الإحداثيات الخاصة بي وتخزينها مؤقتًا.

هل كانت مفيدة؟

المحلول

Scipy في تطبيقات تعمل بشكل جيد، وأنها تشمل <ل أ href = "http://docs.scipy.org/doc/scipy/reference/cluster.vq.html" يختلط = "noreferrer"> ك-وسائل التنفيذ.

وهناك أيضا scipy الكتلة ، والتي لا تجمع agglomerative. تي إتش إس له ميزة أنه لا تحتاج لاتخاذ قرار بشأن عدد من المجموعات في وقت مبكر.

نصائح أخرى

kmeans2 () لديه بعض المشاكل العددية: الآخرين ديك ذكرت رسائل الخطأ مثل "ماتريكس ليس إيجابيا واضح - Cholesky التحلل لا يمكن أن تحسب "في الإصدار 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 مللي ثانية من الصوت وبعد التحدث إليه لمدة دقيقة أو دقيقتين، كان لديه فئات متسقة لحرف العلة القصير "a" وحرف العلة الطويل "o" والحرف الساكن "s".غريب!

ويكيبيديا ، هل يمكن استخدام scipy، <وأ href = "HTTP: //docs.scipy.org/doc/scipy/reference/cluster.vq.html "يختلط =" noreferrer نوفولو "> K-وسائل تجميع ناقلات تكميم

وأو، هل يمكن استخدام مجمع بيثون للمكتبة برمجية مفتوحة للرؤية الحاسوبية، ctypes-مكتبة برمجية مفتوحة للرؤية الحاسوبية .

مكتبة برمجية مفتوحة للرؤية الحاسوبية الجديد بيثون واجهة ، وعلى <لأ href = "HTTP: //opencv.willowgarage.com/documentation/python/miscellaneous_functions.html "يختلط =" noreferrer نوفولو "> تنفيذ kmeans .

و(سنوات في وقت لاحق) هذا kmeans.py تحت <لأ href = "https://stackoverflow.com/questions/5529625/is-it-possible-to-specify-your-own-distance-function-using-scikits "بالوسائل -learn-ك> هو-هو محتمل إلى تحديد الخاص بك بين الخاصة بها عن بعد وظيفة باستخدام-scikits تعلم-ك-وسائل عبارة واضحة وسريعة إلى حد معقول. ويستخدم أي من المقاييس 20 عاما ونيفا في scipy.spatial.distance.

ويمكنك أيضا استخدام GDAL، التي لديها العديد من العديد من الوظائف للعمل مع البيانات المكانية.

وSciKit تعلم في KMeans () هو أبسط طريقة لتقديم طلب وسائل ك تجميع في بيثون. تركيب مجموعات بسيطة على النحو التالي: 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 تعلم الوثائق، وترتبط أعلاه)

وPycluster بايثون وpyplot يمكن استخدامها ل-وسائل ك تجميع ولرؤية البيانات 2D. A الأخيرة بلوق وظيفة سعر السهم / الحجم تحليل عن طريق بيثون وPyCluster يعطي مثالا على تجميع باستخدام PyCluster على البيانات المالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top