绘制一维数据的 KMeans 聚类和分类

     2023-03-12     95

关键词:

【中文标题】绘制一维数据的 KMeans 聚类和分类【英文标题】:Plot KMeans clusters and classification for 1-dimensional data 【发布时间】:2019-07-17 09:49:05 【问题描述】:

我正在使用KMeans 对具有不同特征的三个时间序列数据集进行聚类。出于可重复性的原因,我正在分享数据here。

这是我的代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

protocols = 

types = "data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"

for protname, fname in types.items():
    col_time,col_window = np.loadtxt(fname,delimiter=',').T
    trailing_window = col_window[:-1] # "past" values at a given index
    leading_window  = col_window[1:]  # "current values at a given index
    decreasing_inds = np.where(leading_window < trailing_window)[0]
    quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
    quotient_times = col_time[decreasing_inds]

    protocols[protname] = 
        "col_time": col_time,
        "col_window": col_window,
        "quotient_times": quotient_times,
        "quotient": quotient,
    



k_means = KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
    n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',
    random_state=0, tol=0.0001, verbose=0)
k_means.fit(quotient.reshape(-1,1))

这样,给定一个新的数据点(quotientquotient_times),我想知道它属于哪个 cluster,方法是构建每个数据集,将这两个转换后的特征 quotientquotient_timesKMeans

k_means.labels_ 给出此输出 array([1, 1, 0, 1, 2, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0], dtype=int32)

最后,我想使用plt.plot(k_means, ".",color="blue") 可视化集群,但出现此错误:TypeError: float() argument must be a string or a number, not 'KMeans'。我们如何绘制KMeans 集群?

【问题讨论】:

您不想绘制KMeans 类,对吧?但取而代之的是一些数字。但是你想绘制什么数字?预测?集群中心? 我想要两个图 1)预测和 2)KMeans 类。 【参考方案1】:

如果我理解正确,您想要绘制的是您的 Kmeans 结果的边界决定。 您可以在 scikit-lean 网站here 中找到如何执行此操作的示例。

上面的例子甚至是在做 PCA,所以数据可以在 2D 中可视化(如果你的数据维度高于 2)对你来说是无关紧要的。

您可以通过 Kmeans 决策轻松绘制散点颜色,以便更好地了解您的聚类出错的地方。

【讨论】:

我已经尝试过了,但我得到了同样的错误。对你有用吗?【参考方案2】:

您实际上正在寻找的是一个值范围,在这些值之间的点被认为属于给定类。使用 KMeans 以这种方式对一维数据进行分类是非常不寻常的,尽管它确实有效。正如您所注意到的,您需要将输入数据转换为二维数组才能使用该方法。

k_means = KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
    n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',
    random_state=0, tol=0.0001, verbose=0)

quotient_2d = quotient.reshape(-1,1)
k_means.fit(quotient_2d)

稍后您将再次需要quotient_2d 进行分类(预测)步骤。

首先我们可以绘制质心,因为数据是 1d 的,所以 x 轴点是任意的。

colors = ['r','g','b']
centroids = k_means.cluster_centers_
for n, y in enumerate(centroids):
    plt.plot(1, y, marker='x', color=colors[n], ms=10)
plt.title('Kmeans cluster centroids')

这会产生以下情节。

要获得点的集群成员资格,请将quotient_2d 传递给.predict。这将返回一个用于类成员的数字数组,例如

>>> Z = k_means.predict(quotient_2d)
>>> Z
array([1, 1, 0, 1, 2, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0], dtype=int32)

我们可以使用它来过滤我们的原始数据,以单独的颜色绘制每个类。

# Plot each class as a separate colour
n_clusters = 3 
for n in range(n_clusters):
    # Filter data points to plot each in turn.
    ys = quotient[ Z==n ]
    xs = quotient_times[ Z==n ]

    plt.scatter(xs, ys, color=colors[n])

plt.title("Points by cluster")

这将使用原始数据生成以下图,每个点都由集群成员着色。

【讨论】:

聚类算法总结

... 什么是聚类算法?聚类算法就是根据特定的规则,将数据进行分类。分类的输入项是数据的特征,输出项是分类标签,它是无监督的。常见的聚类规则包括:1)基于原型的,例如有通过质心或中心点聚类,常见的算法KMeans... 查看详情

使用分类变量的 Kmeans

...个数据集的最佳特征选择模型。而且我无法为这个数据集绘制肘曲线。我在k均值肘法中给出了k=1-1000的范围,但它没有 查看详情

kmeans聚类并绘制聚类后的决策边界(代码片段)

KMeans聚类并绘制聚类后的决策边界#导数基础包和函数fromsklearnimportdatasetsimportmatplotlib.pyplotasplt#使用skelarn的数据生成工具make_blobs生成聚类仿真数据集;#对仿真数据进行可视化X,y=datasets.make_blobs(n_samples=1000,n_features=2,centers=5,cluster_s 查看详情

基于bp神经网络kmeans聚类和hc模型的火焰特征数据识别算法matlab仿真

目录一、理论基础二、案例背景三、MATLAB程序四、仿真结论分析一、理论基础    为了简化计算,可对 查看详情

python - 如何在python中的4维数据上绘制kmeans聚类?

】python-如何在python中的4维数据上绘制kmeans聚类?【英文标题】:Howtoplotkmeansclusteringon4dimensionaldatainpython?【发布时间】:2016-06-0108:43:50【问题描述】:我在numpy数组中有以下内容。[[5112][2112][5211][4102][6101][6632]]我使用以下代码执... 查看详情

svm分类基于kmeans聚类+svm的数据分类matlab仿真(代码片段)

...件版本MATLAB2013b2.本算法理论知识聚类:首先计算整个数据集合的平均值点,作为第一个初始聚类中心C1;然后分别计算所有对象到C1的欧式距离d,并且计算每个对象在半径R的范围内包含的对象个数W。此时计算P=... 查看详情

使用聚类算法(kmeans)进行数据降维并作为分类算法逻辑回归(logisticregression)的数据预处理步骤实战

使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logisticRegression)的数据预处理步骤实战目录 查看详情

在 Python 中为每次迭代绘制 KMeans 聚类中心

】在Python中为每次迭代绘制KMeans聚类中心【英文标题】:PlottingtheKMeansClusterCentersforeveryiterationinPython【发布时间】:2021-04-0313:12:17【问题描述】:我创建了一个包含6个集群的数据集,并使用下面的代码对其进行可视化,并找到每... 查看详情

聚类算法-kmeans算法的简单实现

...ier会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做supervisedlea 查看详情

如何使用 KMeans 进行距离聚类

...否可以使用KMeans对数据进行聚类?如何获取标签并将数据绘制在每个集群的图表上?【问题讨论】:你试过sklearn的K 查看详情

matlab|kmeans聚类如何绘制更强的聚类边界(决策边界)(代码片段)

本篇文章主要解决对于kmeans聚类结果,怎样绘制更强的聚类边界:不过在此之前先讲解如何绘制聚类效果、聚类边界,最后再展示上图所示更强的聚类边界。代码其实不需要写下面那么长,但是为了画图好看就写... 查看详情

matlab聚类分析kmeans和cluster的区别

...证了你所确定的K有着最好的划分效果,但是可能不符合数据自身分类特征,层次聚类的树状图能看到数据分类过程和分类距离,但是未必满足你所需要的K参考技术A23456789101112131415161718192021222324252627282930%随机获取150个点X=[randn(50,... 查看详情

如何绘制kmeans?

】如何绘制kmeans?【英文标题】:howtographkmeans?【发布时间】:2020-07-1901:04:03【问题描述】:我正在使用数据集并尝试学习Kmeans聚类,我正在使用以下代码:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeans#Cre... 查看详情

pyspark:kmeans 的分类变量准备

...2016-02-0220:13:18【问题描述】:我知道Kmeans不是应用于分类数据的好选择,但我们在spark1.4中没有太多用于聚类分类数据的选项。不管以上问题。我在下面的代码中遇到错误。我从hive读取我的表,在管道中使用onehotencoder,然后将... 查看详情

聚类算法-kmeans

...效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。简易动画过程在这,传送门第一步,输入k的值,即我们希望将数据... 查看详情

数学建模matlab应用实战系列(108)-k-medoids聚类(附matlab代码)

前言聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习。K-medoids聚类和K均值聚类非常类似,它和Kmeans算法唯一不同的地方是中心点... 查看详情

如何绘制一维 K 均值集群

】如何绘制一维K均值集群【英文标题】:Howtoplota1DK-meanscluster【发布时间】:2021-12-1315:03:44【问题描述】:我有一个向量(X2),我想研究它们可以形成的组。我已经执行了K-means分析,其中包含2个集群:形状X2=(19,1)kmeans=KMeans(n_clust... 查看详情

如何使用 Ruby 进行一维 k 均值聚类?

】如何使用Ruby进行一维k均值聚类?【英文标题】:Howtomakeone-dimensionalk-meansclusteringusingRuby?【发布时间】:2015-03-0211:45:27【问题描述】:我的问题:我搜索了可用的Rubygem,找到了一个执行k-means聚类的。我发现了很多:kmeans、kmean... 查看详情