【问题标题】:How can I get the corresponding features back?我怎样才能找回相应的功能?
【发布时间】:2016-07-22 02:28:24
【问题描述】:

我将 pandas 数据帧的两列转换为 numpy 数组,用作机器学习问题的特征和标签。

代码:

train_index, test_index = next(iter(ShuffleSplit(len(labels), train_size=0.2, test_size=0.80, random_state=42)))

features_train, features_test, = X[train_index], X[test_index]
labels_train, labels_test = labels[train_index], labels[test_index]

clf = DecisionTreeClassifier()
clf.fit(features_train, labels_train)
pred = clf.predict(features)
print pred

Features 当前是一个频率计数数组(我之前使用了一个 CountVectorizer 来适应和转换我原来的 pandas 数据框列)。我有存储为 pred 的完整标签列表,但我想要每个标签的相应功能,以便我可以将标签列表返回到我的 pandas 数据框。

【问题讨论】:

  • 在这里,您将获得两组行(训练和测试)并将结果值放入变量 features_*。看起来您正在调用您的示例、功能。这是机器学习中的一大禁忌!特征是数据集的属性,通常是列,因此阅读此代码非常混乱。但是,由于您预测“特征”(我想这是您的(样本,特征)矩阵,那么结果数组 pred 应该正确排序,您可以将其直接放回您的数据框中。
  • 嗯。这是有道理的,但我的样本本质上是我的特征,因为除了我希望它们拥有的标签(类似于特征/样本)之外,我没有关于它们的任何其他信息;我正在使用这个 ML 过程来将样本合并到相应的标签中。我可以保持我的代码不变,只使用@lejlot 的答案就可以了吗?

标签: python arrays numpy pandas machine-learning


【解决方案1】:

预测的顺序与传递的数据相同(正如@Ulf 指出的那样 - 您在这里错误地使用了术语“特征”,特征是矩阵的一列,您正在使用 countvectorizer 计数的特定对象;行是观察值、样本、数据点——这就是你目前所说的特征)。因此,为了查看样本标签对,您可以简单地将它们压缩在一起:

pred = clf.predict(features)
for sample, label in zip(features, pred):
  print sample, label  

如果您真的想恢复每列的含义,您的 CountVectorizer 就是您的选择。您在代码中的某个地方创建了它

vectorizer = CountVectorizer( ... )

后来用过

... = vectorizer.fit_transform( ... ) 

现在你可以用它来转换你的样本了

pred = clf.predict(features)
for sample, label in zip(features, pred):
  print vectorizer.inverse_transform(np.array([sample])), label  

【讨论】:

  • 谢谢。这是有道理的,但我的样本本质上是我的特征,因为除了我希望它们拥有的标签(类似于特征/样本)之外,我没有关于它们的任何其他信息;我正在使用这个 ML 过程来将样本合并到相应的标签中。我可以保持我的代码不变,只使用你的答案就可以了吗?
  • 这只是关于名称、约定,而不是实际问题。你可以走了。
猜你喜欢
  • 1970-01-01
  • 2013-10-09
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多