Python超参数调优遇NameError:RandomForestClassifier未定义求解
解决RandomForestClassifier未定义的NameError问题
问题原因
报错提示NameError: name 'RandomForestClassifier' is not defined,是因为你只导入了RandomizedSearchCV,但没有导入RandomForestClassifier类,同时accuracy_score也需要单独导入。
解决方案
补充缺失的导入语句
在代码开头添加以下导入:from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score完整可运行代码示例
from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import RandomizedSearchCV n_estimators_array = [1, 4, 5, 8, 10, 20, 50, 75, 100, 250, 500] results = [] for n in n_estimators_array: forest = RandomForestClassifier(n_estimators=n, random_state=76) forest.fit(x_train, y_train) result = accuracy_score(y_test, forest.predict(x_test)) results.append(result) print(n, ':', result)
额外优化(用RandomizedSearchCV做超参数调优)
既然你已经导入了RandomizedSearchCV,可以直接用它替代手动循环,效率更高且支持交叉验证:
from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import RandomizedSearchCV param_dist = {'n_estimators': [1, 4, 5, 8, 10, 20, 50, 75, 100, 250, 500]} # 初始化随机搜索,cv=5表示5折交叉验证 random_search = RandomizedSearchCV( estimator=RandomForestClassifier(random_state=76), param_distributions=param_dist, n_iter=11, # 遍历所有参数选项 cv=5, random_state=76, scoring='accuracy' ) random_search.fit(x_train, y_train) # 输出最佳结果 print("最佳n_estimators参数:", random_search.best_params_) print("交叉验证最佳准确率:", random_search.best_score_) # 在测试集上验证 test_accuracy = accuracy_score(y_test, random_search.predict(y_test)) print("测试集准确率:", test_accuracy)
内容的提问来源于stack exchange,提问作者Kori gray
相关产品推荐
相关产品推荐

