利用聚类作为特征改进分类

2024-05-16 19:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

假设我使用的是无监督算法-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]

列车和试验的尺寸不相同。 那么,我如何实施这种方法呢


Tags: the数据功能算法利用labelsmodel分类
1条回答
网友
1楼 · 发布于 2024-05-16 19:33:01

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

你真正想做的是:

  1. 将您的训练数据与GMM匹配
  2. 使用此安装的GMM获取训练和测试数据的群集标签
  3. 在两个数据集中附加群集标签作为新功能
  4. 使用此“增强的”训练数据调整分类器

总之,假设您的X_trainX_test是数据帧,以下是过程:

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时遇到的数据泄漏,并且您的结果将是无效和误导的

相关问题 更多 >