我正在尝试使用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.
我错过了什么?
答案 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
。