gpt4 book ai didi

python-3.x - KMeans 聚类 - 值错误 : n_samples=1 should be >= n_cluster

转载 作者:行者123 更新时间:2023-11-30 08:57:18 27 4
gpt4 key购买 nike

我正在使用三个具有不同特征的时间序列数据集进行实验,其格式如下。

    0.086206438,10
0.086425551,12
0.089227066,20
0.089262508,24
0.089744425,30
0.090036815,40
0.090054172,28
0.090377569,28
0.090514071,28
0.090762872,28
0.090912691,27

第一列是时间戳。出于可重复性的原因,我共享数据 here 。从第 2 列开始,我想读取当前行并将其与前一行的值进行比较。如果更大的话,我会继续比较。如果当前值小于前一行的值,我想将当前值(较小)除以前一个值(较大)。因此,代码如下:

import numpy as np
import matplotlib.pyplot as plt

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,
}

plt.figure(); plt.clf()
plt.plot(quotient_times,quotient, ".", label=protname, color="blue")
plt.ylim(0, 1.0001)
plt.title(protname)
plt.xlabel("time")
plt.ylabel("quotient")
plt.legend()
plt.show()

这会产生以下三点 - 每一点 dataset我分享了。

enter image description here enter image description here enter image description here

从基于上面给出的代码的图中的点可以看出,data1 非常一致,其值约为 1,data2 将有两个商(其值将集中在 0.5 或 0.8 左右),data3 的值集中在两个值(0.5 或 0.7 左右)附近。这样,给定一个新的数据点(带有quotientquotient_times),我想通过构建每个数据集堆叠来知道它属于哪个集群这两个转换后的特征 quotientquotient_times。我正在尝试使用 KMeans 聚类,如下所示

from sklearn.cluster import KMeans
k_means = KMeans(n_clusters=3, random_state=0)
k_means.fit(quotient)

但这给了我一个错误:ValueError: n_samples=1 should be >= n_clusters=3。我们如何修复这个错误?

更新:样本商数据 = array([ 0.7 , 0.7 , 0.4973262 , 0.7008547 , 0.71287129,
0.704、0.49723757、0.49723757、0.70676692、0.5、
0.5、0.70754717、0.5、0.49723757、0.70322581、
0.5, 0.49723757, 0.49723757, 0.5, 0.49723757])

最佳答案

照原样,您的quotient变量现在是一个样本;这里我得到了不同的错误消息,可能是由于Python/scikit-learn版本不同,但本质是相同的:

import numpy as np
quotient = np.array([ 0.7 , 0.7 , 0.4973262 , 0.7008547 , 0.71287129, 0.704 , 0.49723757, 0.49723757, 0.70676692, 0.5 , 0.5 , 0.70754717, 0.5 , 0.49723757, 0.70322581, 0.5 , 0.49723757, 0.49723757, 0.5 , 0.49723757])
quotient.shape
# (20,)

from sklearn.cluster import KMeans
k_means = KMeans(n_clusters=3, random_state=0)
k_means.fit(quotient)

这会产生以下错误:

ValueError: Expected 2D array, got 1D array instead:
array=[0.7 0.7 0.4973262 0.7008547 0.71287129 0.704
0.49723757 0.49723757 0.70676692 0.5 0.5 0.70754717
0.5 0.49723757 0.70322581 0.5 0.49723757 0.49723757
0.5 0.49723757].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

尽管措辞不同,但与您的没有什么不同 - 本质上它表示您的数据看起来像单个样本。

遵循第一个建议(即考虑 quotient 包含单个特征(列)可以解决问题:

k_means.fit(quotient.reshape(-1,1))
# result
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)

关于python-3.x - KMeans 聚类 - 值错误 : n_samples=1 should be >= n_cluster,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54833924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com