标签: k-means

如何根据Python中最近的聚类质心逻辑将新的观察值分配给现有的Kmeans聚类?

我使用下面的代码通过 Scikit learn 创建 k-means 集群。

kmean = KMeans(n_clusters=nclusters,n_jobs=-1,random_state=2376,max_iter=1000,n_init=1000,algorithm='full',init='k-means++')

kmean_fit = kmean.fit(clus_data)
Run Code Online (Sandbox Code Playgroud)

我还使用保存了质心kmean_fit.cluster_centers_

然后我腌制了 K 均值对象。

filename = pickle_path+'\\'+'_kmean_fit.sav'
pickle.dump(kmean_fit, open(filename, 'wb'))
Run Code Online (Sandbox Code Playgroud)

这样我就可以加载相同的 kmeans pickle 对象并在新数据出现时将其应用到新数据中,使用kmean_fit.predict().

问题 :

  1. 加载 kmeans pickle 对象并应用的方法是否 kmean_fit.predict()允许我根据现有集群的质心将新观察值分配给现有集群?这种方法是否只是从头开始对新数据进行重新聚类?

  2. 如果此方法不起作用,鉴于我已经使用高效的 p​​ython 代码保存了集群质心,如何将新观察值分配给现有集群?

PS:我知道使用现有集群作为因变量构建分类器是另一种方法,但由于时间紧迫,我不想这样做。

python cluster-analysis k-means scikit-learn text-classification

2
推荐指数
1
解决办法
9208
查看次数

K-means 中的总距离总和必须始终递减吗?

我正在使用 Java 进行 k 均值聚类。我的代码中没有发现问题,而且看起来不错。但是,我不明白一些事情。

步骤1:选择N个中心。(假设有N个簇)

步骤2:使用欧氏距离将每个向量放入距离最近的中心的簇中。(||v1 - v2||)

步骤 3:找到每个簇的新均值(=中心)

步骤 4:如果中心发生显着移动,则转至步骤 2

然而,当我在每次迭代后绘制点到各自中心距离的总和时,我可以看到总距离一直在减少(尽管它总体上在减少并且收敛得很好)。 k 均值聚类

第二次迭代的总距离总是比第一次迭代的总距离短,并且是最短的。总距离在第 3 次迭代时略有增加,并在第 4 次或第 5 次迭代时收敛。

我相信有人告诉我它应该总是减少。怎么了?我的算法(实现)或我对总距离的假设?

java cluster-analysis k-means

2
推荐指数
1
解决办法
1754
查看次数

使用欧几里得距离与曼哈顿距离实现 k 均值?

我正在 python 和 Spark 上从头开始实现 kmeans 算法。事实上,这是我的作业。问题是用不同的初始化方法实现具有预定义质心的kmeans,其中一种是随机初始化(c1),另一种是kmeans++(c2)。此外,还需要使用不同的距离度量、欧几里得距离和曼哈顿距离。两者的公式介绍如下:

在此输入图像描述

每个部分中的第二个公式用于相应的成本函数,该函数将被最小化。我已经实现了这两个,但我认为有一个问题。这是使用不同设置的 kmeans 每次迭代的成本函数图:

在此输入图像描述

在此输入图像描述

第一个图看起来不错,但第二个图似乎有问题,因为就我而言,每次迭代后 kmeans 的成本必须减少。那么,问题是什么?这是我的代码或公式吗?

这些是我计算距离和成本的函数:

def Euclidean_distance(point1, point2):
    return np.sqrt(np.sum((point1 - point2) ** 2))

def Manhattan_distance(point1, point2):
    return np.sum(np.absolute(point1 - point2))

def cost_per_point(point, center, cost_type = 'E'):
    if cost_type =='E':
        return Euclidean_distance(point, center)**2
    else:
        return Manhattan_distance(point, center)
Run Code Online (Sandbox Code Playgroud)

这是我在 GitHub 上的完整代码: https://github.com/mrasoolmirzaei/My-Data-Science-Projects/blob/master/Implementing%20Kmeans%20With%20Spark.ipynb

python cluster-analysis k-means euclidean-distance

2
推荐指数
1
解决办法
1万
查看次数

如何在 R 中绘制使用 kmeans 获得的簇的 3D 图?

我的包含具有 3 个属性的观察结果,我使用将它们分为四个不同的组。绘图中绘制我获得的聚类,以便有一种快速、简单的方法来查看聚类数据。

但是我不知道如何在 3D 中绘制,我有适用于 2D 的代码,但我不知道如何调整它以添加维度。我的代码如下:

    library(ggplot2)
set.seed(137)
km = kmeans(bella,4, nstart=25)

df = as.data.frame(bella)
df$cluster = factor(km$cluster)
centers=as.data.frame(km$centers)
df

 ggplot(data=df, aes(x=Annual.Income..k.., z = Age, y=Spending.Score..1.100.)) +
 geom_point() + theme(legend.position="right") +
 geom_point(data=centers,
 aes(x=Annual.Income..k.., y=Spending.Score..1.100., z=Age,color=as.factor(c(1:4))), aes(x=Age, y=Spending.Score..1.100., color=as.factor(c(1:4))),
 size=10, alpha=.3, show.legend=FALSE)
Run Code Online (Sandbox Code Playgroud)

如何创建 3D 绘图?提前致谢!

3d r cluster-analysis ggplot2 k-means

2
推荐指数
1
解决办法
7370
查看次数

无论聚类中心如何初始化,Kmeans 算法是否都能保证收敛?为什么?

K-means 是一种随机初始化聚类中心的迭代算法。无论聚类中心如何初始化,Kmeans 算法是否都能保证收敛?为什么?

artificial-intelligence machine-learning k-means unsupervised-learning data-science

2
推荐指数
1
解决办法
3653
查看次数

使用肘部方法和 K 均值聚类找到最佳聚类数

我正在编写一个程序,需要对一些> 200、300 元素数组的数据集应用 K 均值聚类。有人可以给我提供一个代码链接,并解释一下- 1. 通过肘部方法找到 k 2. 应用 k 均值方法并获取质心数组

我自己搜索了上面的内容,但没有找到任何对代码有明确解释的内容。PS我正在Google Colab工作,所以如果有相同的具体方法,请提出建议


我尝试了下面的代码,但是,我不断收到以下错误 -

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

TypeError: float() argument must be a string or a number, not 'list'


The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)

<ipython-input-70-68e300fd4bf8> in <module>()
     24 
     25 # step 1: find optimal k (number of clusters)
---> 26 find_best_k()
     27 

3 frames

/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
     83 
     84     """ …
Run Code Online (Sandbox Code Playgroud)

python k-means google-colaboratory

2
推荐指数
1
解决办法
1931
查看次数

使用 PCA (Python) 可视化聚类结果

我有一个包含 61 行(用户)和 26 列的数据集,我在其中应用 k 均值和其他算法进行聚类。在对数据集进行归一化后,首先将 KMeans 应用于数据集。作为之前的任务,我在对这些数据进行归一化并识别出 10 个簇后对其运行 k 均值。与此同时,我还尝试可视化这些集群,这就是我使用 PCA 来减少特征数量的原因。

我编写了以下代码:

UserID  Communication_dur   Lifestyle_dur   Music & Audio_dur   Others_dur  Personnalisation_dur    Phone_and_SMS_dur   Photography_dur Productivity_dur    Social_Media_dur    System_tools_dur    ... Music & Audio_Freq  Others_Freq Personnalisation_Freq   Phone_and_SMS_Freq  Photography_Freq    Productivity_Freq   Social_Media_Freq   System_tools_Freq   Video players & Editors_Freq    Weather_Freq
1   63  219 9   10  99  42  36  30  76  20  ... 2   1   11  5   3   3   9   1   4   8
2   9   0   0   6   78  0   32  4   15  3   ... 0 …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis k-means

2
推荐指数
1
解决办法
6311
查看次数

如何获取 k 均值中每个簇的 SSE?

我正在使用 sklearn.cluster KMeans 包并尝试为每个集群获取 SSE。据我了解,kmeans.inertia_将给出所有集群的 SSE 总和。有没有办法获取 sklearn.cluster KMeans 包中每个集群的 SSE?

我有一个包含 7 个属性和 210 个观察值的数据集。簇数为 3,希望计算每个簇的 SSE。

python k-means scikit-learn

2
推荐指数
1
解决办法
1万
查看次数

python和scipy中稀疏矩阵的聚类

我正在尝试使用python和scipy聚类一些数据,但以下代码不能正常工作我不明白:

from scipy.sparse import *
matrix = dok_matrix((en,en), int)

for pub in pubs:
    authors = pub.split(";")
    for auth1 in authors:
        for auth2 in authors:
            if auth1 == auth2: continue
            id1 = e2id[auth1]
            id2 = e2id[auth2]
            matrix[id1, id2] += 1

from scipy.cluster.vq import vq, kmeans2, whiten
result = kmeans2(matrix, 30)
print result
Run Code Online (Sandbox Code Playgroud)

它说:

Traceback (most recent call last):
  File "cluster.py", line 40, in <module>
    result = kmeans2(matrix, 30)
  File "/usr/lib/python2.7/dist-packages/scipy/cluster/vq.py", line 683, in kmeans2
    clusters = init(data, k)
  File "/usr/lib/python2.7/dist-packages/scipy/cluster/vq.py", line …
Run Code Online (Sandbox Code Playgroud)

numpy cluster-analysis data-mining scipy k-means

1
推荐指数
1
解决办法
3416
查看次数

排除R中方差为零的变量的最快方法

我正在使用一个非常大的.csv数据集进行评估,但是却遇到了要解决的错误。

Warning in preProcess.default(data, method = c("center", "scale")) :
  These variables have zero variances: num_outbound_cmds, is_host_login
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Run Code Online (Sandbox Code Playgroud)

在数据集中排除变量的最快方法是什么whose variance is zero (0)

r k-means

1
推荐指数
1
解决办法
2420
查看次数