了解群集

时间:2014-03-16 18:53:12

标签: python cluster-analysis

我需要这里的群集帮助。我需要理解集合中变量的分组,所以我做了以下几点:

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

    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))
    

    问Matvey

1 个答案:

答案 0 :(得分:1)

对于一维数据,通过聚类获得的收益很少。相反,使用核密度估计或利用数据有序性的类似方法。

因为meanshift,DBSCAN等是针对多变量数据而设计的,所以他们期望多维矩阵,但是你给出的是一维矩阵。使用reshape来解决此问题。

一般情况下,了解您的API - 您可以更有效地使用numpy,首先将数据转换为numpy,然后执行 vectorized中的所有其他操作 em> form。

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())))

在局部最小值处拆分会产生所需的结果吗?