scikit-learn 的 TransformedTargetRegressor 的分数是否正确?
Is the score from TransformedTargetRegressor of scikit-learn correct?
我做了一个简短的 Jupyter notebook 来回答我关于 TransformedTargetRegressor 的问题。
我想在管道中放置一个转换器来玩参数网格,但分数不匹配。
...
model = linear_model.LinearRegression()
lg_tr = preprocessing.FunctionTransformer(func=np.log, inverse_func=np.exp, check_inverse=True)
y_log = lg_tr.transform(y)
score_0 = model.fit(X, y_log).score(X, y_log)
...
model = compose.TransformedTargetRegressor(func=np.log, inverse_func=np.exp, check_inverse=True,
regressor=linear_model.LinearRegression())
score_1 = model.fit(X, y).score(X, y)
score_0
值是正确的。为什么来自 score_1
的不是?
我对运行良好的预测没有问题,只有分数。
我错过了什么吗?
谢谢=)
通常,您应该对模型在预测其原始范围或比例中的实际值时的表现(或得分)有多好感兴趣。然而,这是您用 score_1
和 测量的,而不是 score_0
.
score_0
表示模型在目标变量为对数尺度时的表现,这在大多数情况下不是很有用。
然而,score_1
使用 TransformedTargetRegressor
的 score
方法,在计算任何性能指标之前确保目标变量处于其原始比例。因此,应该根据score_1
.
进行判断
我做了一个简短的 Jupyter notebook 来回答我关于 TransformedTargetRegressor 的问题。
我想在管道中放置一个转换器来玩参数网格,但分数不匹配。
...
model = linear_model.LinearRegression()
lg_tr = preprocessing.FunctionTransformer(func=np.log, inverse_func=np.exp, check_inverse=True)
y_log = lg_tr.transform(y)
score_0 = model.fit(X, y_log).score(X, y_log)
...
model = compose.TransformedTargetRegressor(func=np.log, inverse_func=np.exp, check_inverse=True,
regressor=linear_model.LinearRegression())
score_1 = model.fit(X, y).score(X, y)
score_0
值是正确的。为什么来自 score_1
的不是?
我对运行良好的预测没有问题,只有分数。
我错过了什么吗?
谢谢=)
通常,您应该对模型在预测其原始范围或比例中的实际值时的表现(或得分)有多好感兴趣。然而,这是您用 score_1
和 测量的,而不是 score_0
.
score_0
表示模型在目标变量为对数尺度时的表现,这在大多数情况下不是很有用。
score_1
使用 TransformedTargetRegressor
的 score
方法,在计算任何性能指标之前确保目标变量处于其原始比例。因此,应该根据score_1
.