观看数据科学教程遇TypeError,求解决并尝试DecisionTreeRegressor
问题解决与DecisionTreeRegressor使用指南
1. 修复TypeError错误
你遇到的错误根源是参数名拼写错误:min_sample_leaf 应该改为 min_samples_leaf(注意是复数形式的samples)。Scikit-learn的DecisionTreeClassifier类不存在min_sample_leaf这个参数,正确的参数名是min_samples_leaf,用于指定每个叶节点必须包含的最小样本数量。
另外,原代码里的1-5是算术运算,结果为0,这会导致x只取数据集的第0列,大概率不符合你的需求,应该改成1:5来选取索引1到4的列(Python切片遵循左闭右开规则)。
修正后的完整代码:
x = balance_data.values[:, 1:5] y = balance_data.values[:, 0] x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 100) # 修正参数名 clf_entropy = DecisionTreeClassifier(criterion='entropy', random_state=100, max_depth=3, min_samples_leaf=5) clf_entropy.fit(x_train, y_train)
2. 切换到DecisionTreeRegressor
如果你想尝试用于回归任务的DecisionTreeRegressor,可以按照以下步骤操作:
导入所需类
首先确保从sklearn.tree导入回归器:
from sklearn.tree import DecisionTreeRegressor
初始化并训练回归器
DecisionTreeRegressor的多数参数和DecisionTreeClassifier通用,比如max_depth、min_samples_leaf、random_state等。回归任务默认的评价准则是squared_error(均方误差),你也可以指定absolute_error、friedman_mse等其他准则。
示例代码:
# 初始化回归模型 regressor = DecisionTreeRegressor(max_depth=3, min_samples_leaf=5, random_state=100) # 训练模型 regressor.fit(x_train, y_train) # 生成预测结果 y_pred = regressor.predict(x_test)
回归模型的评估
回归任务的评估指标和分类任务不同,常用均方误差(MSE)、R²分数来衡量模型性能:
from sklearn.metrics import mean_squared_error, r2_score # 计算均方误差 mse = mean_squared_error(y_test, y_pred) # 计算R²分数 r2 = r2_score(y_test, y_pred) print(f"均方误差: {mse:.2f}") print(f"R²分数: {r2:.2f}")
注意:
DecisionTreeRegressor适用于预测连续数值型标签,所以你的y需要是连续数据,而非分类任务中的离散类别。
内容的提问来源于stack exchange,提问作者Chinedu Okonkwo
相关产品推荐
相关产品推荐

