有人可以提供有关sklearn的kmean属性的更多详细信息,并验证每种方法的功能吗?

时间:2019-05-08 16:32:09

标签: python scikit-learn k-means

我有一个数据集,该数据集包含48000行和24列,每列都已规范化,因此它的值介于0到1之间。

我尝试将数据聚类为曲线,但是不确定我的实现是否正确:

cluster_num = 8
kclustering = KMeans(n_clusters=cluster_num, random_state=RAND).fit(df_reads)
kclustering.transform(df_reads)

查看数据时,我看到:

>> kclustering.cluster_centers_[0]

array([ 0.44851436,  0.40071485,  0.37478944,  0.36488641,  0.37286438,
        0.4042693 ,  0.47056609,  0.502428  ,  0.47682049,  0.47377337,
        0.47723668,  0.49041012,  0.5107349 ,  0.53044935,  0.55766196,
        0.61032937,  0.66640804,  0.72395814,  0.77165046,  0.8449527 ,
        0.83843484,  0.75404816,  0.63712833,  0.5259275 ])

我想通过阅读 sklearn web page 中的文档和源代码来确认对kmeans的理解:

拟合-此函数将kmeans模型适合作为[n_samples,m_features]提供的数据,在这种情况下,n是48000个样本,m是24个要素。

转换-将数据转换为群集距离空间。根据我的测试,它返回一个[n_samples,m_clusters]数组,其中n_samples为48000,m_clusters为8(由上面声明的8个聚类定义),它显示了每个样本与每个聚类的距离。

>> kclustering.transform(df_reads)[0]

array([ 0.76017856,  1.69920653,  0.81333364,  1.21883207,  1.65154547,
        0.83507006,  1.6426527 ,  1.35372735])

预测-获取与“拟合”步骤匹配的另一组[n_samples,m_features]个数据集,并为每个样本分配一个簇号,返回大小为[1,n_labels]的数组,其中n为48000在这种情况下。


在我查找的示例中,我看到了对“ transform”方法的调用,但是此转换步骤是否必要?无论有没有这一行,cluster_centers_都完全相同:

kclustering.transform(df_reads)

如果是这样,是否不应该将其分配给变量?似乎该行没有在程序的功能中发挥作用。

根据我的理解,变换将[48000,24]数据集转换为[48000,8],并分配了与每个群集的距离,但是该变换实际上并没有计算距离,该步骤似乎发生在之所以选择“适合”,是因为“ precompute_distances”参数默认设置为“自动”,在文档指定的位置:

  

“自动”:如果n_samples * n_clusters> 12,则不预先计算距离   百万。这相当于使用双倍每个作业大约100MB的开销   精度。

是否由于对内存的担忧而从未将'precompute_distances'设置为True的唯一原因?如果将precompute_distances设置为False,那么此时是否需要调用'Transform'?

最后,从原始数据帧中提取了24个特征,如果我想将每个样本的聚类标签与原始记录进行匹配,是否像在kmeans.labels上使用pd.concat()一样简单?原始数据框的搜索结果,以找出为每个标签分配了哪个主键?

这就是我所做的,但是我不确定如何使用concat时如何验证是否分配了正确的标签,除了手动查找多个样本并尝试映射其曲线与分配的聚类曲线。

谢谢!

0 个答案:

没有答案