【问题标题】:NotFittedError issue with SklearnSklearn 的 NotFittedError 问题
【发布时间】:2018-05-18 01:33:02
【问题描述】:

我正在尝试使用 sklearn 的 LinearSVC 并将决策树导出到 .dot 文件。我可以用样本数据拟合分类器,然后在一些测试数据上使用它,但是导出到 .dot 文件会给出 NotFittedError。

data = pd.read_csv("census-income-data.data", skipinitialspace=True, usecols=list(range(0, 41)))
data = data.fillna('Missing value').apply(pp.LabelEncoder().fit_transform)

target = pd.read_csv("census-income-data.data", skipinitialspace=True, usecols=[41])

dataTest = pd.read_csv("census-income-test.test", skipinitialspace=True, usecols=list(range(0, 41)))
dataTest = dataTest.fillna('Missing value').apply(pp.LabelEncoder().fit_transform)

targetTest = pd.read_csv("census-income-test.test", skipinitialspace=True, usecols=[41])
clfSVC = LinearSVC(random_state=0)

clfSVC = clfSVC.fit(data, target.target)
scoreSVC = clfSVC.score(dataTest, targetTest.target)
print(scoreSVC)
tree.export_graphviz(clfSVC, out_file='tree.dot') 

这是输出:

> Traceback (most recent call last):
  File "D:\Documents\Telecom\IA\ai-person-income\project\sklearn_test.py", line 49, in <module>
    tree.export_graphviz(clfSVC, out_file='tree.dot')
  File "D:\Program Files\WinPython-64bit-3.6.3.0Qt5\python-3.6.3.amd64\lib\site-packages\sklearn\tree\export.py", line 392, in export_graphviz
    check_is_fitted(decision_tree, 'tree_')
  File "D:\Program Files\WinPython-64bit-3.6.3.0Qt5\python-3.6.3.amd64\lib\site-packages\sklearn\utils\validation.py", line 768, in check_is_fitted
    raise NotFittedError(msg % {'name': type(estimator).__name__})
sklearn.exceptions.NotFittedError: This LinearSVC instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

我错过了什么?

【问题讨论】:

    标签: python pandas scikit-learn


    【解决方案1】:

    您正在使用function 绘制决策树。查看第一个参数:decision_tree,就像this 的对象。

    SVM 不是决策树!它不是任何一种树,你不能使用这个功能,它在理论上也没有意义。

    错误本身基于this code:

    check_is_fitted(decision_tree, 'tree_')
    

    查询决策树对象的内部树的位置。这对于 SVM 不存在。

    【讨论】:

      【解决方案2】:

      sklearn.tree.export_graphviz 中,第一个参数是拟合的决策树。 你给出了一个拟合的估计器,但没有给出一个决策树。 确实,LinearSVC 不是决策树。

      尝试使用sklearn.tree.DecisionTreeClassifier 而不是sklearn.svm.LinearSVC

      【讨论】:

        猜你喜欢
        • 2019-01-17
        • 2020-10-19
        • 2019-12-13
        • 2018-09-27
        • 2015-06-05
        • 2016-11-17
        • 1970-01-01
        • 2019-08-09
        • 2017-01-13
        相关资源
        最近更新 更多