【问题标题】:Understanding clustering了解集群
【发布时间】:2014-04-21 21:17:03
【问题描述】:

我在这里需要集群方面的帮助。我需要了解集合中的变量分组,所以我做了以下事情:

  1. 我得到了数据并确定它是浮点类型的
  2. 我使用 x = (x - min)/(max - min) 对这些值进行了标准化,其中 min 和 max 是表示数据中最小值和最大值的变量 范围
  3. 我使用 np.array 函数将其转换为 numpy 数组
  4. 然后我尝试使用带宽(使用 ManShift)或 DBSCAN 函数来执行处理,但它会陷入 "ValueError: data type not understood" 错误。我做错了什么?

这里是代码-

print ('Minimum value is {0}, maximum is {1}'.format(min_value, max_value))
for position in range(0, len(sub_set)):
    sub_set[position] = (sub_set[position] - min_value)/(max_value - min_value)

data = np.array(sub_set)

print (type(data))
print len(data)
bandwidth = estimate_bandwidth(data, quantile=0.2, n_samples=len(data))

问候马特维

【问题讨论】:

  • @bibhas 我删除了与here 和至少np.array 相对应的问候 代码

标签: python cluster-analysis


【解决方案1】:

对于一维数据,进行聚类几乎没有什么收获。相反,请使用核密度估计或利用数据有序性的类似方法。

因为 meanshift、DBSCAN 等是为多变量数据设计的,它们需要一个 multidimensional 矩阵,但您却给出了一个一维矩阵。使用reshape 解决此问题。

一般来说,学习您的 API - 您可以更有效地使用 numpy,方法是首先将您的数据转换为 numpy,然后在 vectorized 中执行所有其他操作表格。

data = numpy.array(data)
data = (data - data.min()) / data.ptp() # Scale to 0:1
dens = gaussian_kde(data).evaluate(data)

将为数据中的每个点生成密度估计值。尝试根据该密度估计的局部最小值拆分您的数据。

看看你的数据曲线:

plot(gaussian_kde(data).evaluate(np.linspace(data.min(),data.max())))

在局部最小值处分裂会产生预期的结果吗?

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2019-01-01
    • 2020-02-02
    • 2020-09-27
    • 2017-01-19
    • 1970-01-01
    • 2019-03-06
    • 2018-05-05
    • 2010-11-06
    相关资源
    最近更新 更多