params, args=(yhat, X, y), method='trust-constr') # print(mthd, optResult) if optResult['success']: bestParams = optResult['x'] print('\n最优参数:\n', bestParams) else: print('训练失败!method可能不合适!') # 4.评估模型 y_pred = yhat(bestParams, X) # from common import displayRegressionMetrics displayRegressionMetrics(y, y_pred) # 5.最优算法选取method(假定你不知道的话) methods = [ 'Nelder-Mead', 'CG', 'BFGS', 'Newton-CG', 'dogleg', 'trust-ncg', 'trust-crylov', 'trust-exact', 'COBYLA', 'SLSQP', 'trust-constr', #有约束 'Powell',
# print(sr) sr.drop('Intercept', inplace=True) cond = sr < 0.05 cols = sr[cond].index.tolist() print('显著影响因子:', cols) # 3)模型评估指标(拟合程度) # 拟合程度(越接近于1表示模型越好) print('R2={:.4}, adjR2={:.4}'.format(results.rsquared, results.rsquared_adj)) # 信息准则指标(带惩罚项,越小表示模型越好) print('AIC={}, BIC={}'.format(results.aic, results.bic)) #信息准则指标 y_pred = results.fittedvalues displayRegressionMetrics(y, y_pred) # 4) 共线性检验: # results.condition_number值过大,有可能存在共线性 # 5)残差检验 # results.resid #残差 = y - y_pred # 5、模型优化 # 6、应用模型 # 1)预测历史数据 y_pred = results.fittedvalues # 2)预测新数据 XX = df.loc[10:11, :]
results = mdl.fit(smoothing_level=alpha, optimized=False) print(results.summary()) #打印模型信息 print('模型参数:\n', results.params) #返回参数字典 # 4.模型评估 # 1)查看评估指数 print('AIC=', results.aic) print('AICC=', results.aicc) print('BIC=', results.bic) # print('SSE=', results.sse) # resid = results.resid # 残差resid = ts - y_pred y_pred = results.fittedvalues # 预测历史值 y_true = ts[y_pred.index] displayRegressionMetrics(y_true, y_pred) # 2)可视化图形:对比 plt.plot(range(len(y_pred)), y_pred, 'b', label='一次指数平滑') plt.plot(range(len(y_true)), y_true, 'g', label='实际值') plt.legend(loc='upper right') title = 'Holt线性趋势(alpha={})'.format(alpha) plt.title(title) plt.show() # 5.自行选取最优平滑系数 mdl = SimpleExpSmoothing(ts) results = mdl.fit() #默认optimized=True print(results.summary()) #打印模型信息
print('最优超参:', grid.best_params_) print('最优得分:', grid.best_score_) bestParams = fixedParams bestParams.update(grid.best_params_) mdl = grid.best_estimator_ #保存最优模型 #奇怪:mdl.intercept_返回的是一个数组,而不是单个值 sr = pd.Series(data=mdl.intercept_.tolist() + mdl.coef_.tolist(), index=['常数'] + cols) print(sr) # 4、评估 # 1)训练集评估 y_pred = mdl.predict(X) displayRegressionMetrics(y, y_pred, X.shape) # 2)测试集评估 y_pred = mdl.predict(X_test) displayRegressionMetrics(y_test, y_pred, X_test.shape) # 6、应用模型 XX = [[10, 22]] pred = mdl.predict(XX) print(pred) ###################################################################### ######## Part2、大规模数据集的随机梯度下降回归 示例 ###################################################################### # 每次读取部分数据放入内存(而不是一次性) # 递归训练模型