[英]Is it possible to manually set values of model parameters without extending computational graph in TensorFlow?
[英]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_params))
您可以將 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.