You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

机器学习模型拟合问题:Anaconda Python3.6运行Sklearn代码报错

解决Anaconda Python3.6环境中决策树网格搜索的报错问题

我帮你梳理了代码里导致报错的几个核心问题,一步步来修正就能正常运行了:

1. 废弃模块与缺失的导入

你用的sklearn.grid_search.GridSearchCV在scikit-learn 0.20版本后已经被移到sklearn.model_selection模块,而且代码里压根没导入ShuffleSplit,这肯定会触发NameError。修正后的导入部分应该是:

from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeRegressor
# 替换废弃的grid_search,同时导入ShuffleSplit
from sklearn.model_selection import GridSearchCV, ShuffleSplit

2. 未定义的performance_metric函数

你调用了make_scorer(performance_metric)但没给出这个函数的实现,这也是会报错的。比如如果你的性能指标是R²(常用回归指标),可以先定义这个函数:

# 示例:定义基于R²的性能评估函数,你可以根据需求替换成MAE/MSE等
def performance_metric(y_true, y_predict):
    from sklearn.metrics import r2_score
    return r2_score(y_true, y_predict)

3. GridSearchCV参数顺序问题

你调用GridSearchCV(regressor, params, scoring_fnc, cv=cv_sets)的参数顺序容易出错,建议用关键字参数明确指定,避免版本差异导致的参数位置变化:

grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cv_sets)

4. 返回语句的语法错误

代码最后return grid....的省略号是语法错误,一般我们需要返回网格搜索找到的最优模型,用grid.best_estimator_就能直接拿到训练好的最优决策树回归器:

return grid.best_estimator_

完整修正后的代码

把以上修正整合后,完整可运行的代码如下:

from sklearn.metrics import make_scorer, r2_score
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import GridSearchCV, ShuffleSplit

def performance_metric(y_true, y_predict):
    """自定义性能指标函数,这里以R²为例"""
    return r2_score(y_true, y_predict)

def fit_model(X, y):
    """ Performs grid search over the 'max_depth' parameter for a decision tree regressor trained on the input data [X, y]. """
    # 创建交叉验证集,适配新版本scikit-learn的参数格式
    cv_sets = ShuffleSplit(n_splits=10, test_size=0.20, random_state=0)
    
    # 初始化决策树回归器
    regressor = DecisionTreeRegressor()
    
    # 定义max_depth的参数范围(这里改成1到10,原代码range(1,10)只到9)
    params = {'max_depth': range(1, 11)}
    
    # 将自定义指标转换为网格搜索可识别的评分函数
    scoring_fnc = make_scorer(performance_metric)
    
    # 创建网格搜索对象
    grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cv_sets)
    
    # 拟合数据并找到最优模型
    grid.fit(X, y)
    
    # 返回最优模型
    return grid.best_estimator_

额外提醒:Python3.6环境建议安装scikit-learn 0.22.x版本(更高版本不再支持Python3.6),可以用pip install scikit-learn==0.22.2.post1来安装适配版本。

内容的提问来源于stack exchange,提问作者Abdulaziz Alshamran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:58:09