为什么每次我在 GridSearchCV 中运行决策树时,max_depth答案都会更改?


Hyperparameters={'max_depth':np.arange(1,100,1)}
dectree= tree.DecisionTreeClassifier()
cv_grid = GridSearchCV(estimator= dectree ,param_grid = Hyperparameters, scoring ='accuracy',cv = 10)
cv_grid= cv_grid.fit(X_train, y_train)
cv_grid.best_params_

这是因为决策树算法中存在随机性。从诊断树文档中:

特征在每次拆分时始终随机排列,即使拆分器设置为"最佳"。但是,即使max_features=n_features,找到的最佳拆分可能会因不同的运行而有所不同。如果几个拆分的标准改进相同,并且必须随机选择一个拆分,则就是这种情况。

所以,随机性是正常的。如果你想要一个确定性的方法,设置random_state参数(即,指定种子(,你每次都会得到相同的结果。下面是一个示例:

from sklearn.model_selection import GridSearchCV 
import numpy as np
from sklearn import tree
X_train = np.random.rand(100, 10)
y_train = np.random.randint(0, 3, 100)
for i in range(10):
Hyperparameters={'max_depth':np.arange(1,100,1)}
dectree= tree.DecisionTreeClassifier(random_state=42)
cv_grid = GridSearchCV(estimator= dectree ,param_grid = Hyperparameters, 
scoring ='accuracy',cv = 5)
cv_grid= cv_grid.fit(X_train, y_train)
print(cv_grid.best_params_)
{'max_depth': 4}
{'max_depth': 4}
{'max_depth': 4}
{'max_depth': 4}
{'max_depth': 4}

当我在不使用random_state参数的情况下进行测试运行时,我得到以下结果:

{'max_depth': 5}
{'max_depth': 65}
{'max_depth': 59}
{'max_depth': 5}
{'max_depth': 93}

最新更新