【问题标题】:retrieve misclassified documents using scikitlearn使用 scikit learn 检索错误分类的文档
【发布时间】:2014-10-22 12:04:51
【问题描述】:

我很想知道 scikitlearn python 模块中是否有内置函数,可以检索错误分类的文档。

这很简单,我通常通过比较预测向量和测试向量并从测试文档数组中检索文档来自己编写它。但我问的是它是否有内置功能,而不是在我编写的每个 python 代码中复制功能。

【问题讨论】:

  • 如果clf.predict(X_test) != y_test 就是您要寻找的全部,那么正如您所说,它非常简单,因此不会作为任何分类器的成员函数公开。但是,如果您愿意,可以通过一些技巧来编写一个 scoring 对象来执行此操作。

标签: python numpy machine-learning scipy scikit-learn


【解决方案1】:

如果您有一组文档的真实标签列表y_test,例如["ham", "spam", "spam", "ham"] 并将其转换为 NumPy 数组,然后您可以将其与单行中的预测进行比较:

import numpy as np

y_test = np.asarray(y_test)
misclassified = np.where(y_test != clf.predict(X_test))

现在misclassifiedX_test 的索引数组。

@eickenberg 是对的,这类东西没有在 scikit-learn 中实现,因为用户应该对 NumPy 足够熟悉,可以自己用几行代码来完成。

【讨论】:

  • 但是如果我进行 Shuffle Split,我还可以使用这种方法来识别我错误分类的数据点吗?或者,如果我改变了训练测试分割率,我如何能够正确识别哪些点是哪些?
  • @user42 这是一个非常好的问题!我也想知道!
【解决方案2】:

您可以通过列表理解得到这样的错误分类。否则我不知道在 sklearn 中有任何其他方法可以做到这一点。

from sklearn.cross_validation import train_test_split
from sklearn import datasets
from sklearn import svm


iris = datasets.load_iris()
X_iris, y_iris = iris.data, iris.target
X, y = X_iris[:, :2], y_iris
X_train, X_test, y_train, y_test = train_test_split(X, y)

clf = svm.LinearSVC()
clf.fit(X_train, y_train)

mis_cls = [train 
           for test, truth, train in 
           zip(X_test, y_test, X_train) 
           if clf.predict(test) != truth]

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 2016-08-09
    • 2016-01-02
    • 2016-07-15
    • 2016-05-16
    • 2017-12-24
    • 2015-03-21
    • 2018-07-03
    • 2015-03-01
    相关资源
    最近更新 更多