Sklearn的NotFittedError问题

时间:2017-12-04 14:42:19

标签: python pandas scikit-learn

我正在尝试使用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.

我错过了什么?

2 个答案:

答案 0 :(得分:2)

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

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

错误本身基于this code

check_is_fitted(decision_tree, 'tree_')

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

答案 1 :(得分:1)

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

尝试使用sklearn.tree.DecisionTreeClassifier代替sklearn.svm.LinearSVC