簡體   English   中英

是否可以在線性模型中手動設置參數並獲得 R 平方等?

[英]Possible to manually set parameters in linear model and get R Squared, etc?

我正在求解具有參數界限的線性模型。 簡單的 statsmodels OLS 方法不允許擬合參數的界限,因此為此,我使用 scipy.optimize.minimize 最大化似然函數。 由此,我得到了一組線性模型的參數。 到目前為止一切都很好。

我現在需要實現的只是能夠訪問我的模型的統計信息,例如 R^2、F-Stat 等。對於 OLS,這些東西都隨由 model.fit() 返回的對象以及其他不錯的功能。

我想知道是否可以創建這個對象,從有界擬合中手動分配我的參數,並讓它計算擬合結果對象上的數據字段? 顯然,我可以手動計算這些東西,但我想要它,無論我是調用有界還是無界擬合,我都會返回相同的對象類型,並且下游的生活很容易。

偽代碼:

bounded_params = fitBoundedLinear(x, y) # solution to bounded problem - a list of floats
model = statsmodels.api.OLS(y, x)
unbounded_fitResult = model.fit()       # solution to unbounded problem - a regression results object

想做類似的事情:

aFitResult.params = bounded_params  # manually set the parameters
aFitResult.calculate()              # force it to compute data fields based on these params
rsq = aFitResult.rsquared # etc... 

我有一些有用的東西 - 但它可能不是一個理想的解決方案:

aFitResult = statsmodels.regression.linear_model.RegressionResultsWrapper(statsmodels.regression.linear_model.OLSResults(model, bounded_pa​​rams))

您可以將 upper_bound 和 lower_bound 添​​加到 elastic_net.py 中的 fit_elasticnet 為:

def fit_elasticnet(model, method="coord_descent", maxiter=100,
         alpha=0., L1_wt=1., start_params=None, cnvrg_tol=1e-7,
         zero_tol=1e-8, refit=False, check_step=True,
         loglike_kwds=None, score_kwds=None, hess_kwds=None, upper_bound=None, lower_bound=None):

然后在以下行之后的該函數中:

params[k] = _opt_1d(func, grad, hess, model_1var, params[k], alpha[k]*L1_wt,
                                tol=btol, check_step=check_step)

添加:

        if upper_bound is not None:
            params[k] = min(params[k], upper_bound[k])

        if lower_bound is not None:                
            params[k] = max(params[k], lower_bound[k])

然后調用類似於以下內容的函數:

model = lm.OLS(y, x)
results_fu = model.fit()
#results_fu.summary()
results_fr = model.fit_regularized(alpha=0.001
                                   ,start_params=results_fu.params
                                   ,upper_bound=(.60,0,0,1,1,1,1,1)
                                   ,lower_bound=(-1, 0,0,0,-1,1,1,1,-10) )

通過start_params=將模型的初始參數設置為所需的值,然后使用maxiter=0擬合它們以進行 0 步擬合(即不擬合,但仍運行所有初始化和度量計算)。

result = model.fit(start_params=your_parameters_here, maxiter=0)
result.rsquared  # or any other fit index

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM