我使用下面的代码通过 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().
问题 :
加载 kmeans pickle 对象并应用的方法是否
kmean_fit.predict()允许我根据现有集群的质心将新观察值分配给现有集群?这种方法是否只是从头开始对新数据进行重新聚类?
如果此方法不起作用,鉴于我已经使用高效的 python 代码保存了集群质心,如何将新观察值分配给现有集群?
PS:我知道使用现有集群作为因变量构建分类器是另一种方法,但由于时间紧迫,我不想这样做。
python cluster-analysis k-means scikit-learn text-classification
我正在使用 Java 进行 k 均值聚类。我的代码中没有发现问题,而且看起来不错。但是,我不明白一些事情。
步骤1:选择N个中心。(假设有N个簇)
步骤2:使用欧氏距离将每个向量放入距离最近的中心的簇中。(||v1 - v2||)
步骤 3:找到每个簇的新均值(=中心)
步骤 4:如果中心发生显着移动,则转至步骤 2
然而,当我在每次迭代后绘制点到各自中心距离的总和时,我可以看到总距离一直在减少(尽管它总体上在减少并且收敛得很好)。

第二次迭代的总距离总是比第一次迭代的总距离短,并且是最短的。总距离在第 3 次迭代时略有增加,并在第 4 次或第 5 次迭代时收敛。
我相信有人告诉我它应该总是减少。怎么了?我的算法(实现)或我对总距离的假设?
我正在 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
我的数据框包含具有 3 个属性的观察结果,我使用k 均值将它们分为四个不同的组。我的目标是在3D绘图中绘制我获得的聚类,以便有一种快速、简单的方法来查看聚类数据。
但是我不知道如何在 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 绘图?提前致谢!
K-means 是一种随机初始化聚类中心的迭代算法。无论聚类中心如何初始化,Kmeans 算法是否都能保证收敛?为什么?
artificial-intelligence machine-learning k-means unsupervised-learning data-science
我正在编写一个程序,需要对一些> 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) 我有一个包含 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) 我正在使用 sklearn.cluster KMeans 包并尝试为每个集群获取 SSE。据我了解,kmeans.inertia_将给出所有集群的 SSE 总和。有没有办法获取 sklearn.cluster KMeans 包中每个集群的 SSE?
我有一个包含 7 个属性和 210 个观察值的数据集。簇数为 3,希望计算每个簇的 SSE。
我正在尝试使用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) 我正在使用一个非常大的.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)?
k-means ×10
python ×5
r ×2
scikit-learn ×2
3d ×1
data-mining ×1
data-science ×1
ggplot2 ×1
java ×1
numpy ×1
scipy ×1