NotFittedError: This DecisionTreeClassifier instance is not fitted yet
NotFittedError: This DecisionTreeClassifier instance is not fitted yet
我是 ML 新手,正在尝试 运行 基于决策树的模型
我尝试了以下
X = df[['Quantity']]
y = df[['label']]
params = {'max_depth':[2,3,4], 'min_samples_split':[2,3,5,10]}
clf_dt = DecisionTreeClassifier()
clf = GridSearchCV(clf_dt, param_grid=params, scoring='f1')
clf.fit(X, y)
clf_dt = DecisionTreeClassifier(clf.best_params_)
并收到此处提到的警告
FutureWarning: Pass criterion={'max_depth': 2, 'min_samples_split': 2} as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error
warnings.warn(f"Pass {args_msg} as keyword args. From version "
后来,我尝试了 运行ning 下面的方法并得到了一个错误(但我已经使用 .fit()
拟合了模型)
from sklearn import tree
tree.plot_tree(clf_dt, filled=True, feature_names = list(X.columns), class_names=['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'])
NotFittedError: This DecisionTreeClassifier instance is not fitted yet. Call
'fit' with appropriate arguments before using this estimator.
可以帮我解决这个问题吗?
如果您选择 best_params_
,则必须使用这些参数重新拟合模型。请注意,这些应该在传递给模型时解包:
clf_dt = DecisionTreeClassifier(**clf.best_params_)
clf_dt.fit(X, y)
但是,您也可以使用 best_estimator_
属性直接访问最佳模型:
clf_dt = clf.best_estimator_
所以你面临两个问题。
首先
参考
FutureWarning: Pass criterion={'max_depth': 2, 'min_samples_split': 2} as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error
您可以在创建 params
:
时尝试使用 dict
class 构造函数
params = dict(max_depth=[2,3,4], min_samples_split=[2,3,5,10])
但是这个警告看起来很奇怪,我并没有出现。
其次
参考
NotFittedError: This DecisionTreeClassifier instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
你可以了解 sklearn 中的 强制拟合步骤。但正如您所说,您只是在第一个代码示例中这样做了。你的问题是使用
clf_dt = DecisionTreeClassifier(clf.best_params_)
您创建了一个新的 DecisionTreeClassifier
class,因此在您调用
时不适合
tree.plot_tree(clf_dt ...)
当你打电话时
clf = GridSearchCV(clf_dt, param_grid=params, scoring='f1')
sklearn 会根据您的情况自动将最佳估算器分配给 clf
。所以只需使用这个变量:)
以下步骤 clf_dt = DecisionTreeClassifier(clf.best_params_)
不是必需的。
我是 ML 新手,正在尝试 运行 基于决策树的模型
我尝试了以下
X = df[['Quantity']]
y = df[['label']]
params = {'max_depth':[2,3,4], 'min_samples_split':[2,3,5,10]}
clf_dt = DecisionTreeClassifier()
clf = GridSearchCV(clf_dt, param_grid=params, scoring='f1')
clf.fit(X, y)
clf_dt = DecisionTreeClassifier(clf.best_params_)
并收到此处提到的警告
FutureWarning: Pass criterion={'max_depth': 2, 'min_samples_split': 2} as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error
warnings.warn(f"Pass {args_msg} as keyword args. From version "
后来,我尝试了 运行ning 下面的方法并得到了一个错误(但我已经使用 .fit()
拟合了模型)
from sklearn import tree
tree.plot_tree(clf_dt, filled=True, feature_names = list(X.columns), class_names=['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'])
NotFittedError: This DecisionTreeClassifier instance is not fitted yet. Call
'fit' with appropriate arguments before using this estimator.
可以帮我解决这个问题吗?
如果您选择 best_params_
,则必须使用这些参数重新拟合模型。请注意,这些应该在传递给模型时解包:
clf_dt = DecisionTreeClassifier(**clf.best_params_)
clf_dt.fit(X, y)
但是,您也可以使用 best_estimator_
属性直接访问最佳模型:
clf_dt = clf.best_estimator_
所以你面临两个问题。
首先
参考
FutureWarning: Pass criterion={'max_depth': 2, 'min_samples_split': 2} as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error
您可以在创建 params
:
dict
class 构造函数
params = dict(max_depth=[2,3,4], min_samples_split=[2,3,5,10])
但是这个警告看起来很奇怪,我并没有出现。
其次
参考
NotFittedError: This DecisionTreeClassifier instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
clf_dt = DecisionTreeClassifier(clf.best_params_)
您创建了一个新的 DecisionTreeClassifier
class,因此在您调用
tree.plot_tree(clf_dt ...)
当你打电话时
clf = GridSearchCV(clf_dt, param_grid=params, scoring='f1')
sklearn 会根据您的情况自动将最佳估算器分配给 clf
。所以只需使用这个变量:)
以下步骤 clf_dt = DecisionTreeClassifier(clf.best_params_)
不是必需的。