首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在比例回归模型上执行约束优化?

如何在比例回归模型上执行约束优化?
EN

Stack Overflow用户
提问于 2020-03-15 18:23:50
回答 1查看 244关注 0票数 6

假设我将高斯过程回归应用于我的数据。在拟合模型之前,我将执行某种特征工程。在模型合适之后,我的目标是在曲线上应用一个最小化,我打算对一些值进行约束,以便找到最优的X。然而,问题来了,如果我对我的数据应用某种特征工程,并将模型拟合到特定的数据集,当我应用约束优化时,我应该如何找出我想约束它的值,因为我改变了我的输入数据。如果这听起来令人困惑,下面对某些代码的解释可能会有所帮助:

假设我有数据:

代码语言:javascript
复制
# 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])

# y
array([4.93483686, 5.66226844, 7.51133372, 7.54435854, 4.92758927,
       5.0955348 , 7.26606153, 6.86027353, 7.36488184, 6.06864003])

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

代码语言:javascript
复制
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)

然后,我将一个模型与我的数据相匹配:

代码语言:javascript
复制
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)

现在,我执行fit模型的约束最小化。注意,我将theta约束为常量值等于9。因此,这篇文章的动机,因为我是设置theta约束为一个基于值的样本,然后拟合曲线之前的特征工程过程。

代码语言:javascript
复制
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),我的最小值被限制在给定的常值之上,那么,我如何处理被拟合成缩放特征的曲线以及根据剥落之前的值设置的约束。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 10:36:32

一旦你安装了scaler,就继续使用它吧。由于您的转换只是在没有旋转的情况下缩放,所以转换后的theta坐标将保持不变。

代码语言:javascript
复制
residual_plant = minimize(lambda x: -model.predict(scaler.transform(x)), scaler.transform(x0), method='SLSQP',bounds=bnds)

顺便说一句,你打算写:

代码语言:javascript
复制
model.fit(X_train_scaled,y_train)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60696211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档