猿问

使用 Pipeline 和 TransformedTargetRegressor 在嵌套回归器上处理

我想使用 Pipeline 和 TransformedTargetRegressor 来处理 BaggingRegressor 及其所有估计器上的所有缩放(数据和目标)。

我的第一次尝试效果很好(没有使用 Pipeline 和 TransformedTargetRegressor)

$ cat test1.py

#!/usr/bin/python

# -*- coding: UTF-8 -*-


import numpy as np

import matplotlib.pyplot as plt

from sklearn.ensemble import BaggingRegressor

from sklearn.svm import SVR


def f(x):

    return x*np.cos(x) + np.random.normal(size=500)*2


def main():

    # Generate random data.

    x = np.linspace(0, 10, 500)

    rng = np.random.RandomState(0)

    rng.shuffle(x)

    x = np.sort(x[:])

    y = f(x)


    # Plot random data.

    fig, axis = plt.subplots(1, 1, figsize=(20, 10))

    axis.plot(x, y, 'o', color='black', markersize=2, label='random data')


    # Create bagging models.

    model = BaggingRegressor(n_estimators=5, base_estimator=SVR())

    x_augmented = np.array([x, x**2, x**3, x**4, x**5]).T

    model.fit(x_augmented, y)


    # Plot intermediate regression estimations.

    axis.plot(x, model.predict(x_augmented), '-', color='red', label=model.__class__.__name__)

    for i, tree in enumerate(model.estimators_):

        y_pred = tree.predict(x_augmented)

        axis.plot(x, y_pred, '--', label='tree '+str(i))


    axis.axis('off')

    axis.legend()

    plt.show()


if __name__ == '__main__':

    main()

哪个可以:装袋回归器叠加到所有估计器上

冉冉说
浏览 109回答 1
1回答

慕少森

我认为您的代码没有问题,而是绘图部分有问题。# Plot intermediate regression estimations.    axis.plot(x, treg.predict(x_augmented), '-', color='red', label=model.__class__.__name__)    for i, tree in enumerate(treg.regressor_['model'].estimators_):        y_hat = tree.predict(x_augmented)        y_transformer = preprocessing.MinMaxScaler().fit(y.reshape(-1, 1))        y_pred = y_transformer.inverse_transform(y_hat.reshape(-1, 1))        axis.plot(x, y_pred, '--', label='tree '+str(i))tree这里将是一个,您在上一部分中SVR()预测,并用 a 进行缩放。因此,预测与您的期望不符。x_augmentedx_augmentedStandardScaler因此,通过使用以下代码片段更改代码,就可以了:# Plot intermediate regression estimations.axis.plot(x, treg.predict(x_augmented), '-', color='red', label=model.__class__.__name__)for i, tree in enumerate(treg.regressor_['model'].estimators_):    x_augmented_scaled = treg.regressor_.named_steps['scale'].transform(x_augmented)    y_hat = tree.predict(x_augmented_scaled)    y_transformer = preprocessing.MinMaxScaler().fit(y.reshape(-1, 1))    y_pred = y_transformer.inverse_transform(y_hat.reshape(-1, 1))    axis.plot(x, y_pred, '--', label='tree '+str(i))axis.axis('off')axis.legend()plt.show()
随时随地看视频慕课网APP

相关分类

Python
我要回答