k均值python_Python K-均值算法

Python K-均值算法

我正在寻找带有示例的k-means算法的Python实现来聚类和缓存我的坐标数据库。

8个解决方案

54 votes

Scipy的集群实施效果很好,其中包括k-means实施。

还有scipy-cluster,它可以进行聚集聚类。 它的优点是您无需提前决定群集的数量。

tom10 answered 2020-06-23T11:05:11Z

28 votes

SciPy的kmeans2()有一些数字问题:其他报告了错误消息,例如0.6.0版中的“矩阵不是正定的-无法计算Cholesky分解”,而我在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

Vebjorn Ljosa answered 2020-06-23T11:05:36Z

20 votes

对于连续数据,k均值非常简单。

您需要一个均值列表,并且对于每个数据点,找到均值最接近的均值并将其平均化为新数据点。 您的均值将代表输入数据中最近的显着点集。

我连续进行平均,因此不需要旧数据即可获得新平均值。 给定旧的平均值k,下一个数据点x和一个常数n(它是要保留平均值的过去数据点的数量),新的平均值为

k*(1-(1/n)) + n*(1/n)

这是Python中的完整代码

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的声音频率包络上使用了此语言,并与之交谈了一两分钟后,它对于短的“ a”元音,长的“ o”元音和“ s”辅音具有统一的类别。 奇怪!

Nathan answered 2020-06-23T11:06:15Z

5 votes

从Wikipedia,您可以使用scipy,K-means聚类矢量量化

或者,您可以将Python包装器用于OpenCV,即ctypes-opencv。

或者,您可以使用OpenCV的新Python接口及其kmeans实现。

Jacob answered 2020-06-23T11:06:44Z

5 votes

(多年以后)可以使用scikits-learn-k-means来指定您自己的距离功能,该kmeans.py既简单又合理。 它使用scipy.spatial.distance中的20多种指标之一。

denis answered 2020-06-23T11:07:04Z

0 votes

您还可以使用GDAL,它具有许多处理空间数据的功能。

George Silva answered 2020-06-23T11:07:24Z

0 votes

SciKit Learn的KMeans()是在Python中应用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的文档提供,以上链接)

gsilv answered 2020-06-23T11:07:53Z

-1 votes

Python的Pycluster和pyplot可用于k-means聚类和2D数据的可视化。 最近的博客文章使用Python和PyCluster进行股票价格/数量分析,给出了一个使用PyCluster对股票数据进行聚类的示例。

Guest answered 2020-06-23T11:08:13Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值