我正在尝试在 Python 中实现 K 均值算法(我知道有相应的库,但我想学习如何自己实现它。)这是我遇到问题的函数:
def AssignPoints(points, centroids):
"""
Takes two arguments:
points is a numpy array such that points.shape = m , n where m is number of examples,
and n is number of dimensions.
centroids is numpy array such that centroids.shape = k , n where k is number of centroids.
k < m should hold.
Returns:
numpy array A such that A.shape = (m,) and A[i] is index of the centroid which points[i] is assigned to.
""" …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个用于 CBIR 任务的密码本。一切正常,直到我尝试执行 kmeans,然后我有
Traceback (most recent call last):
File "path", line 36, in <module>
scipy.cluster.vq.kmeans(descriptors, k_or_guess=500, iter=20, thresh=1e-05)
File "path", line 513, in kmeans
No = obs.shape[0]
AttributeError: 'list' object has no attribute 'shape'
Run Code Online (Sandbox Code Playgroud)
如果我使用 kmeans 代替 scipy 函数
cv2.kmeans(descriptors, K=500, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_MAX_ITER, 1, 10), attempts=1, flags=cv2.KMEANS_RANDOM_CENTERS)
Run Code Online (Sandbox Code Playgroud)
我有
Traceback (most recent call last):
File "path", line 35, in <module>
cv2.kmeans(descriptors, K=500, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_MAX_ITER, 1, 10), attempts=1, flags=cv2.KMEANS_RANDOM_CENTERS)
TypeError: data is not a numpy array, neither a scalar …Run Code Online (Sandbox Code Playgroud) 我想使用 python 中 scikit 包中的 calinski 和 harabasz 验证自动选择 k(k 均值聚类)(metrics.calinski_harabaz_score)。
我循环遍历所有聚类范围以选择 calinski_harabaz_score 的最大值
for kClusterCnt in range(2, 21) :
value = metrics.calinski_harabaz_score(datasets.data, kmCls.labels_)
Run Code Online (Sandbox Code Playgroud)
仅使用该方法是否有任何缺陷或错误?
似乎“SwarmSVM”包曾经有一个 kmeans.predict 函数,但现在没有了。
我想将数据帧划分为训练+测试子集以训练模型然后对其进行测试。我目前只能使用 'kmeans' 函数来创建集群,但我无法弄清楚使用哪些函数/包来训练和测试模型。
在阅读了这篇关于 k 均值聚类中的重复值的文章后,我意识到我不能简单地使用唯一点进行聚类。
\n\n\n\n我有超过 10000000 点,虽然只有 8000 个独特的点。因此,我最初认为为了加快速度,我\xe2\x80\x99d 仅使用唯一点。看来这是一个坏主意。
\n\n为了减少计算时间,这篇文章建议为每个点添加权重。这在Python中如何实现呢?
\n我正在尝试使用 word2vec 和 Kmeans 进行聚类,但它不起作用。
这是我的部分数据:
demain fera chaud à paris pas marseille
mauvais exemple ce n est pas un cliché mais il faut comprendre pourquoi aussi
il y a plus de travail à Paris c est d ailleurs pour cette raison qu autant de gens",
mais s il y a plus de travail, il y a aussi plus de concurrence
s agglutinent autour de la capitale
Run Code Online (Sandbox Code Playgroud)
脚本:
import nltk
import pandas
import pprint
import numpy as np
import pandas …Run Code Online (Sandbox Code Playgroud) 我想创建预测函数来预测观察属于哪个集群
data(iris)
mydata=iris
m=mydata[1:4]
train=head(m,100)
xNew=head(m,10)
rownames(train)<-1:nrow(train)
norm_eucl=function(train)
train/apply(train,1,function(x)sum(x^2)^.5)
m_norm=norm_eucl(train)
result=kmeans(m_norm,3,30)
predict.kmean <- function(cluster, newdata)
{
simMat <- m_norm(rbind(cluster, newdata),
sel=(1:nrow(newdata)) + nrow(cluster))[1:nrow(cluster), ]
unname(apply(simMat, 2, which.max))
}
## assign new data samples to exemplars
predict.kmean(m_norm, x[result$cluster, ], xNew)
Run Code Online (Sandbox Code Playgroud)
当我收到错误后
Error in predict.kmean(m_norm, x[result$cluster, ], xNew) :
unused argument (xNew)
Run Code Online (Sandbox Code Playgroud)
我知道我正在做一些错误的功能,因为我只是在学习这样做,但我不明白到底在哪里。
确实我想采用 apcluster 的类似功能(我见过类似的主题,但是针对 apcluster)
predict.apcluster <- function(s, exemplars, newdata)
{
simMat <- s(rbind(exemplars, newdata),
sel=(1:nrow(newdata)) + nrow(exemplars))[1:nrow(exemplars), ]
unname(apply(simMat, 2, which.max))
}
## assign new data samples to exemplars …Run Code Online (Sandbox Code Playgroud) 我无法理解 n_jobs 是如何工作的:
data, labels = sklearn.datasets.make_blobs(n_samples=1000, n_features=416, centers=20)
k_means = sklearn.cluster.KMeans(n_clusters=10, max_iter=3, n_jobs=1).fit(data)
Run Code Online (Sandbox Code Playgroud)
运行时间不到 1 秒
当 n_jobs = 2 时,它的运行量几乎是原来的两倍
n_jobs = 8,它太长了,在我的电脑上永远不会结束......(我有8个核心)
我对并行化的工作原理有什么不明白的地方吗?
如果我不使用 DTW 作为距离度量,那么 tslearn.clustering.TimeSeriesKMeans 和 sklearn.cluster.KMeans 是否相等?
如果不是,有人可以告诉我这两个软件包之间的主要区别是什么?
python cluster-analysis machine-learning time-series k-means
我正在使用 python 3.8.8,Tensorflow-gpu:2.4.1,scikit-learn 的版本是 0.24.2。
使用旧版本我没有这个问题,但我必须升级我的 python 和tensorflow才能在gpu上运行我的代码。错误是
from sklearn.cluster._kmeans import _init_centroids
ImportError: cannot import name '_init_centroids' from 'sklearn.cluster._kmeans'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
k-means ×10
python ×7
scikit-learn ×3
r ×2
numpy ×1
opencv ×1
python-2.7 ×1
python-3.x ×1
scipy ×1
sift ×1
time-series ×1
word2vec ×1