【问题标题】:Improving classification by using clustering as a feature通过使用聚类作为特征来改进分类
【发布时间】:2020-10-02 03:20:27
【问题描述】:

我正在尝试通过进行聚类来改进我的分类结果,并将聚类数据用作另一个特征(或单独使用它而不是所有其他特征 - 尚不确定)。

假设我正在使用无监督算法 - GMM:

gmm = GaussianMixture(n_components=4, random_state=RSEED)

gmm.fit(X_train)

pred_labels = gmm.predict(X_test)

我用训练数据训练模型,用测试数据预测聚类。

现在我想使用分类器(例如 KNN)并使用其中的聚类数据。所以我尝试了:

#define the model and parameters
knn = KNeighborsClassifier()

parameters = {'n_neighbors':[3,5,7],
              'leaf_size':[1,3,5],
              'algorithm':['auto', 'kd_tree'],
              'n_jobs':[-1]}

#Fit the model
model_gmm_knn = GridSearchCV(knn, param_grid=parameters)
model_gmm_knn.fit(pred_labels.reshape(-1, 1),Y_train)

model_gmm_knn.best_params_

但我得到了:

ValueError: Found input variables with inconsistent numbers of samples: [418, 891]

Train 和 Test 的维度不同。 那么我该如何实现这种方法呢?

【问题讨论】:

  • 请再想一想你在上一个fit 中要做什么;您正在尝试将测试数据的集群特征与训练数据的标签一起使用,来做...究竟是什么?除了明显的尺寸不匹配外,这些标签甚至与给定的特征不对应。
  • 其实我并不确定我的方法是否正确,但是我被要求尝试通过使用无监督聚类算法来改善分类结果,我仍然不知道如何!基于这个例子 (kaggle.com/sudeep88/titanic-survivors-classification-using-pca) 他们使用 PCA 拟合的结果作为另一个特征,并在以后使用它进行预测。

标签: python machine-learning cluster-analysis knn gmm


【解决方案1】:

您的方法不正确 - 您试图将 test 数据 pred_labels 的集群标签用作单个特征,以便使分类器适合您的训练 em> 标签Y_train。即使在这些数据集的维度相同的巨大巧合情况下(因此没有给出维度不匹配错误,如这里),这在概念上是错误的,实际上没有任何意义。

你真正想做的是:

  1. 用您的训练数据拟合 GMM
  2. 使用此拟合 GMM 为您的训练和测试数据获取集群标签。
  3. 将集群标签作为新特征添加到两个数据集中
  4. 用这种“增强的”训练数据拟合您的分类器。

总而言之,假设您的 X_train 和 X_test 是 pandas 数据帧,以下是过程:

import pandas as pd

gmm.fit(X_train)
cluster_train = gmm.predict(X_train)
cluster_test = gmm.predict(X_test)

X_train['cluster_label'] = pd.Series(cluster_train, index=X_train.index)
X_test['cluster_label'] = pd.Series(cluster_test, index=X_test.index)

model_gmm_knn.fit(X_train, Y_train)

请注意,您应该不将您的聚类模型与您的测试数据相匹配 - 仅适用于您的训练数据,否则您会出现类似于 using the test set for feature selection 时遇到的数据泄漏,您的结果将是既无效又具有误导性。

【讨论】:

  • 谢谢。在您提交答案之前,我用类似的方法编辑了我的帖子......但似乎问题在于附加该功能。无论如何,它正在使用您的代码,我得到 score = 100(似乎很奇怪)
  • @M_Z 酷。如果您有后续问题,随时欢迎您提出新问题。为了保持一致性,我将问题恢复为以前的形式(否则我已经在 cmets 中提出的答案看起来很奇怪且无关紧要)。
猜你喜欢
  • 2013-07-28
  • 2015-02-17
  • 2015-12-13
  • 2014-05-20
  • 2021-07-25
  • 2019-12-01
  • 2018-01-12
  • 2021-03-26
  • 2017-06-29
相关资源
最近更新 更多