如何在缩放回归模型上执行约束优化?

假设我正在对我的数据应用高斯过程回归。在拟合模型之前,我将进行一些特征工程。模型拟合后,我的目标是现在进行最小化,我打算对某些值进行约束,以在曲线上找到最优的X。然而,这里引出了一个问题,如果我对数据进行了一些特征工程,并且将模型拟合到那特定的一组数据上,当我应用约束优化时,我应该如何找出我要约束的那些值,因为我已经改变了输入数据。如果这听起来很 confusing,以下带有一些代码的解释可能会有所帮助:

假设我有以下数据:

# X (theta, alpha1, alpha2)array([[ 9.07660169,  0.61485493,  1.70396493],       [ 9.51498486, -5.49212002, -0.68659511],       [10.45737558, -2.2739529 , -2.03918961],       [10.46857663, -0.4587848 ,  0.54434441],       [ 9.10133699,  8.38066374,  0.66538822],       [ 9.17279647,  0.36327109, -0.30558115],       [10.36532505,  0.87099676, -7.73775872],       [10.13681026, -1.64084098, -0.09169159],       [10.38549264,  1.80633583,  1.3453195 ],       [ 9.72533357,  0.55861224,  0.74180309])# yarray([4.93483686, 5.66226844, 7.51133372, 7.54435854, 4.92758927,       5.0955348 , 7.26606153, 6.86027353, 7.36488184, 6.06864003])

然后我应用某种特征工程,在这种情况下,使用简单的MinMaxScaler:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)           scaler = MinMaxScaler()           scaler.fit(X_train)            X_train_scaled = scaler.transform(X_train)X_test_scaled = scaler.transform(X_test)

然后,我将模型拟合到我的数据上:

kernel = C(1.0, (1e-4, 1e4))*RBF(10,(1e-3,1e3))model = GaussianProcessRegressor(kernel = kernel, n_restarts_optimizer = 5,optimizer='fmin_l_bfgs_b')           model.fit(X_train,y_train)

现在,我对拟合模型进行约束最小化。请注意,我将theta约束为一个常数值等于九。因此,本文的动机是,我在拟合曲线之前根据特征工程前的样本设定了theta的约束值。

bnds = np.array([(theta_bin,theta_bin),(data_alpha1_bin.min(),data_alpha1_bin.max()),                 (data_alpha2_bin.min(), data_alpha2_bin.max())])        x0 = [theta_bin,0,0]residual_plant = minimize(lambda x: -model.predict(np.array([x])), x0, method='SLSQP',bounds=bnds)

总之,我需要最小化我的机器学习拟合模型,然而,我在拟合之前也需要对其进行特征缩放,因为高斯过程需要这样做。问题是,我的最小化对其中一个特征(theta)设置了一个给定的常数值的约束,那么,当曲线拟合到缩放的特征上,而我根据缩放前的值设置的约束,我该如何处理?


回答:

一旦你有了拟合好的scaler,就继续使用它。因为你的转换只是缩放而没有旋转,转换后的theta坐标将保持不变。

residual_plant = minimize(lambda x: -model.predict(scaler.transform(x)), scaler.transform(x0), method='SLSQP',bounds=bnds)

顺便问一下,你原本想写的是:

model.fit(X_train_scaled,y_train)

对吗?否则你是在没有缩放的原始坐标上进行训练。这在这种情况下似乎也是合法的。我看不出真正需要缩放的理由。但我认为你需要在GPR中添加normalize_y=True,因为它假设观测目标值的均值为零,而根据你提供的数据样本并非如此。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注