使用K-means导出标签,然后使用分类器(python)进行训练

时间:2014-12-07 21:28:49

标签: python scikit-learn

我有一个要素数据集'X'和一个标签数据集'Y'。现在在这个问题中我只允许使用X数据集并仅使用Y作为参考。

我正在使用sklearn的Kmeans算法来预测要素数据集的标签。但是,在使用已经分配的标签比较衍生标签时,Kmeans错误地将大约40%的标签分类。

所以相反,我决定使用Kmeans来推导标签和分类算法,以使用X和派生标签来拟合和预测,目的是获得更好的准确性。

这个策略是否有效,是否有人可以建议我使用一个好的分类算法来实现此目的?谢谢。

1 个答案:

答案 0 :(得分:0)

K-means是一种半监督学习算法,这意味着它需要一些示例来学习。所以它需要有数据和类标签。但是,k-means通常用于无人监督的学习问题,如你的。

为实现此目的,类标签随机初始化,并根据此标签计算 k 数量的均值。然后重新标记数据并计算新的质心。等等,直到没有任何变化。该算法将收敛到局部最优,因此不一定是全局最优,因此分类结果高度依赖于初始均值。

通常可以通过使用更智能的初始化来改善结果,例如k-means++算法。在sklearn module for kmeans中,通过传递init=kmeans++作为参数,也可以进行初始化。像这样:

KMeans(init='k-means++', n_clusters=k)

我建议您尝试一下,看看它是否会产生更好的结果。另外,请务必为k选择一个合适的数字,等于数据中的类数。

使用差的k均值分类结果作为完全监督学习算法的输入将不起作用。然后,您将训练分类器以了解k-means分类给出的不良标记。在这种情况下,你最好看看其他(更复杂的)无监督学习算法,如neural gas