2017-10-13 63 views
1

我有一个简单的模型,包含两个需要“调整”的参数。使用参数“a”和“b”,该模型公式为:Scikit-Learn或其他用于参数优化的Python工具

model = (a * temp) + (b * rad) 

temprad被测量的数据集(在这种情况下,温度和辐射)。这些数据集是熊猫日期时间索引系列,为一天(24小时)频率。

temp数据是这样的:

TIMESTAMP 
2014-07-17 1.399556 
2014-07-18 1.492743 
2014-07-19 1.865306 
2014-07-20 2.478098 
       ... 
2016-08-23 2.327437 
2016-08-24 3.065250 
2016-08-25 2.427021 
2016-08-26 1.365833 
Name: AirTC_2, Length: 213, dtype: float64 

rad数据是这样的:

TIMESTAMP 
2014-07-17 2292.717541 
2014-07-18 2228.255459 
2014-07-19 2166.962811 
2014-07-20 2803.802975 
       ...  
2016-08-23  696.327810 
2016-08-24 1431.858289 
2016-08-25 1083.182916 
2016-08-26  542.908838 
Name: CNR_Wm2, Length: 213, dtype: float64 

我也有,该模型试图逼近测量数据。该measured数据集是这样的:

TIMESTAMP 
2014-07-17 0.036750 
2014-07-18 0.045892 
2014-07-19 0.041919 
2014-07-20 0.044640 
      ... 
2016-08-23 0.029696 
2016-08-24 0.033997 
2016-08-25 0.032872 
2016-08-26 0.012204 
Name: melt_sonic, Length: 213, dtype: float64 

我已经做了使用标准回归技术模型参数的初步优化:最大限度地减少modelmeasured之间的平方差(误差)的总和。我为ab测试了一系列参数空间,运行10,000个独特参数组合的模型(其中ab的阵列长度均为100)。

a = np.arange(0.00000009,0.00001,0.0000001) 
b = np.arange(0.0115,0.0125,0.00001) 

我只是编码数学做这个分析,我想通过独立优化使用封装的方法从适当的库中的参数来仔细检查我的结果。

什么是使用Scikit-Learn或其他Python库优化这些参数的最合适的方法?

回答

1

这被称为“线性回归”,你不需要尝试不同的参数组合来找到好的参数。我们可以用直接的数学公式分析解决这个问题,所以你甚至不需要猜测好参数的范围。

在代码内,你可以使用scikit学习的LinearRegression估计:

from sklearn.linear_model import LinearRegression 

X = pd.concat([rad, temp], axis=1) # the input of the model 
y = measured # the output of the model 

estimator = LinearRegression() # create the estimator object 
estimator.fit(X, y) # optimize the parameters of the model on the data 
a, b = estimator.coef_ # the obtained parameters 

欲了解更多信息,请参见例如this example用于线性回归的教程。

+0

是的我认为这是一个简单的线性回归问题。我想我正在测试一大堆不必要的参数组合,但我应该得到一个接近分析的解决方案(受np.arange()'中的步长限制)。我会尝试你的代码。对于'y =测量#模型的输出',我不确定评论是否准确。在我的例子中,变量'model'是模型的输出....但是,我认为你就在这里,我们想要使用'y = measured'。该评论更适合作为“测量数据”,并且代表了该模型的理想近似值。 – PJW

+0

或者从文档中,'y = measured'是'目标值'。 – PJW

+0

使用'a'和'b'作为使用您的答案计算的结果,我得到的值与我原来的方法非常相似。以前,a和b的优化值(使用值范围)分别为0.0121和4.99e-06。你的方法给出了0.0108和2.59e-06。虽然解析解应该是最准确的,但使用新参数的模型结果给出了建模/测量之间的求和平方误差的略高的值。不知道该怎么做,但你的答案正是我所期待的。谢谢! – PJW