我正在尝试一个练习,我被要求“评估测试数据集的每个模型准确性,以使 max_depth 参数值从 2 变为 5”。
这里的模型是DecisionTreeRegressor。我只是想知道计算 DecisionTreeRegressor 模型的准确度的指标是什么。
我的理解是它与分数相同,可以简单地计算为regressor.score(X_test, Y_test)
请让我知道应该使用什么来计算 DecisionTreeRegressor 模型的准确性。
我正在尝试一个练习,我被要求“评估测试数据集的每个模型准确性,以使 max_depth 参数值从 2 变为 5”。
这里的模型是DecisionTreeRegressor。我只是想知道计算 DecisionTreeRegressor 模型的准确度的指标是什么。
我的理解是它与分数相同,可以简单地计算为regressor.score(X_test, Y_test)
请让我知道应该使用什么来计算 DecisionTreeRegressor 模型的准确性。
ML 词汇表中的准确性主要用于分类问题,即正确预测占总数的计数。
在通用语言中,这将意味着模型 esp 的预测正确性。关于测试数据。
我的理解是它与分数相同,可以简单地计算为
regressor.score(X_test, Y_test)
我假设您正在使用 SciKit-Learn, DecisionTreeRegressor 的score方法将返回R-square coefficient。官方链接
score(self, X, y[, sample_weight])
返回预测的决定系数 R^2。
你应该怎么做 -
你应该计算两个指标- R-square 和 MAE/MSE。
原因是 - 对于最终用户/业务人员来说,MAE 会很有用,例如说模型的预测平均会偏离正确值约 250 美元。
MAE/MSE 面临的挑战是,除非您对基础数据有所了解,否则它不会说它是否是好的模型。例如,在 2 个不同城市(波士顿/东京)的定价数据上创建两个模型,MSE 为 1000 1500。
从这些数据中,您无法得出前者是更好的模型的结论。
R-square 在这里有帮助。
Adjusted R-square (Another regression metrics) - 如果你的特征集是固定的,那么你不需要检查这个指标。当不同模型的特征集不同时,它旨在解决 R-square 的问题。
获取 RMSE、R-square、Adjusted R-square 的片段
#https://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
def reg_metrics(y_test, y_pred, X_train):
from sklearn.metrics import mean_squared_error, r2_score
rmse = np.sqrt(mean_squared_error(y_test,y_pred))
r2 = r2_score(y_test,y_pred)
# Scikit-learn doesn't have adjusted r-square, hence custom code
n = y_pred.shape[0]
k = X_train.shape[1]
adj_r_sq = 1 - (1 - r2)*(n-1)/(n-1-k)
print(rmse, r2, adj_r_sq)
学习链接 -
Jim
Wikipedia的统计数据
目前主要有 3 种机器学习模型是聚类、分类和回归。他们每个人都有不同的计算精度的方法。在回归的情况下,以下是 scikit learn 包中可用的指标。有关更多指标,请查看此链接
mean_absolute_error
mean_squared_error
mean_squared_log_error
中值绝对误差
r2_score
在回归情况下,最好的选择是使用或 Adjusted。
此外,您可以使用其他技术来查看模型的行为是否与用于构建模型的数据点的残差(实际 y 值和预测 y 值之间的差异)分析相关,例如均方误差 (MSE)、均方根误差 (RMSE) 和平均绝对误差 (MAE)。
有一种方法可以衡量回归任务的准确性。也就是将其转化为分类任务。
第一种方法是让模型输出预测区间而不是数字。这对于决策树尤其可能,但最好使用分位数决策树。然后,您可以为模型的每个输出设置 95% 的预测区间,并通过将预测区间内的真实 y 值视为正确预测来计算准确度。您可以将此库用于分位数树。
第二种方法是手动将输出范围划分为多个区间,并将这些区间视为类。您可以在 y 值的最低分布点处选择区间边界。或者使用模糊分类边界,其中边界周围的模糊间隔被认为对于两个相邻类都是正确的。