我一直在阅读相似性度量和图像特征提取; 大多数论文都将k-means称为一种良好的统一聚类技术,我的问题是,对于特定集合,k-means聚类是否有更好的选择?
我想在我的IR项目中使用余弦相似性但是因为向量的大小很大并且它必须多次浮动多次,所以需要很长时间.
有没有办法更快地计算余弦相似度?
这是我的代码:
private double diffrence(HashMap<Integer, Float> hashMap,
HashMap<Integer, Float> hashMap2 ) {
Integer[] keys = new Integer[hashMap.size()];
hashMap.keySet().toArray(keys);
float ans = 0;
for (int i = 0; i < keys.length; i++) {
if (hashMap2.containsKey(keys[i])) {
ans += hashMap.get(keys[i]) * hashMap2.get(keys[i]);
}
}
float hashLength = 0;
for (int i = 0; i < keys.length; i++) {
hashLength += (hashMap.get(keys[i]) * hashMap.get(keys[i]));
}
hashLength = (float) Math.sqrt(hashLength);
Integer[] keys2 = new Integer[hashMap2.size()];
hashMap2.keySet().toArray(keys2);
float hash2Length = 0;
for (int i …Run Code Online (Sandbox Code Playgroud) 我在scala 0.9.0上运行k-means聚类,我试图了解数据如何在n个系统之间分配以计算k个中心数据点.
我理解k-means聚类是什么,但我想知道数据是如何划分的,并且计算是在分布式计算上完成的(map和reduce).在此scala版本中,KMeansDataGenerator可以选择将数据点生成到n个分区中.每个从节点是否获得一个数据文件分区?
假设我们有一个64dim矩阵来聚类,假设矩阵数据集是dt = 64x150.
使用vl_feat的库中的kmeans函数,我将我的数据集聚集到20个中心:
[centers, assignments] = vl_kmeans(dt, 20);
Run Code Online (Sandbox Code Playgroud)
centers 是一个64x20矩阵.
assignments 是一个1x150矩阵,其中包含值.
根据手册:向量分配包含输入数据到集群的(硬)分配.
我仍然无法理解矩阵中的这些数字是什么assignments意思.我根本得不到它.有人介意帮我一点吗?一个例子或一些东西会很棒.这些价值观代表什么呢?
我在下面有一个来自大型数据集的示例数据,其中每个参与者都有多个评分条件。
Participant<-c("p1","p1","p2","p2","p3","p3")
Condition<-c( "c1","c2","c1","c2","c1","c2")
Score<-c(4,5, 5,7,8,2)
T<-data.frame(Participant, Condition, Score)
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 K 均值聚类将参与者分成不同的组,考虑到条件不是数字,有什么好的方法吗?
谢谢!
我一直在研究自组织地图的概念,以了解任何类型数据集中变量的关系/关系并生成一些热图。是否有任何其他机器学习概念/方法可用于对数据进行探索性分析并获得变量之间的关系。
data-visualization machine-learning k-means som self-organizing-maps
我知道这Gaussian mixture model是一个概括K-means,因此应该更准确.
但我无法在下面的聚类图像上看出为什么获得的结果K-means在某些区域更准确(如斑点噪声显示为浅蓝色点,在Gaussian Mixture Model结果中持续存在于结果中而不是K-means结果中).
以下是matlab两种方法的代码:
% kmeans
L1 = kmeans(X, 2, 'Replicates', 5);
kmeansClusters = reshape(L1, [numRows numCols]);
figure('name', 'Kmeans clustering')
imshow(label2rgb(kmeansClusters))
% gaussian mixture model
gmm = fitgmdist(X, 2);
L2 = cluster(gmm, X);
gmmClusters = reshape(L2, [numRows numCols]);
figure('name', 'GMM clustering')
imshow(label2rgb(gmmClusters))
Run Code Online (Sandbox Code Playgroud)
并在下面显示原始图像,以及聚类结果:
原始图片:
K-方式:
高斯混合模型:
PS:我只使用强度信息进行聚类,聚类的数量是2(即水和土地).
数据(已缩放):
structure(c(0.160485413118994, -0.325277232672307, 1.25345136614942, -0.0823959097766563, -1.05392120135926, 1.6177733504929, 0.403366736014645, -0.446717894120132, -0.932480539911433, -0.0823959097766563, 0.508649308224364, -0.625897284357438, 0.83280547753345, -0.625897284357438, -0.139663030393809, 1.96735207011525, -0.301741115048352, -0.301741115048352, -1.76044387693924, -0.139663030393809, 0.0577843342673918, 0.121189712724219, 1.51610803877442, -0.0056210441894354, -0.766485585671361, 1.51610803877442, -0.57626945030088, -1.02010709949867, -1.27372861332598, 1.0088650111198, 0.270645677706219, -0.834749808144522, 1.19678784152711, -0.296989842054972, 1.07728562684054, 0.0913923556763693, 0.121267909348011, -0.356740949398255, -0.864625361816163, 0.83828119746741, 1.30651856124931, -0.595043606688955, 0.545893694074002, 0.16558126048635, 5.23641370832172, -1.48243928506014, 0.419122882878118, 0.419122882878118, -0.0879603619054184, 0.0388104492904658, 0.311357673194754, 0.0940238518063364, 0.311357673194754, 0.0940238518063364, 9.43937817150828, -0.557977612358916, -0.557977612358916, 0.0940238518063364, -0.340643790970498, 0.528691494583171, -0.205722605421789, -0.596759109816679, 1.14786529440668, -0.747157765353175, -0.596759109816679, 2.59169238755704, -0.476440185387482, -0.95771588310427, -1.40891184971376, 0.425951747831495, 0.136489240515638, 0.520535462720394, -1.14366483350021, 0.648550870121979, 0.520535462720394, -1.91175727790973, 0.136489240515638, 0.90458168492515, 1.67267412933466, …Run Code Online (Sandbox Code Playgroud) 我正在学习scala,并尝试加载我已经在数据上运行/拟合的模型而没有成功。运行花了6个小时,如果我想不出一种保存/加载输出的方法,恐怕我将不得不重新运行它。
我将KMeans作为管道的一部分运行。我将在训练数据集上运行的管道的输出保存为“模型”,这就是我尝试加载的结果。
运行模型后,我可以使用以下命令保存(或至少我以为是):
model.write.overwrite().save("/analytics_shared/qoe/km_model")
Run Code Online (Sandbox Code Playgroud)
我的问题是如何重新加载它,这样我就可以使用它来对新数据进行聚类/评分,而不必重新运行耗时6个小时的培训。
下面是变量的前 5 行,我使用 KMeans 来找到最佳的簇数-
store_code PinCode sale_price_after_promo
0 2655 453441.0 55.00
1 2655 999999.0 30.00
2 2655 400064.0 418.95
3 2615 400099.0 70.00
4 2655 474001.0 34.20
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误 -
OverflowError Traceback (most recent call last)
<ipython-input-62-3802a2b79f71> in <module>()
2 for i in range(0,11):
3 kmeans=KMeans(n_clusters=i, init='k-means++', random_state=42)
----> 4 kmeans.fit(X)
5 wcss.append(kmeans.inertia_)
6 plt.plot(range(1, 11), wcss)
OverflowError: cannot convert float infinity to integer
Run Code Online (Sandbox Code Playgroud)
即使我尝试使用各种变量组合但仍然出现相同的错误,如何摆脱这个错误?