def score(self, X, y, sample_weight=None): p = self.predict(X) t = y[:, 2] pu, pl = p[:, 0], p[:, 1] picp = picpf(t, pu, pl) pinew = pinewf(pu, pl) cwc = cwcf(picp, pinew, self.mu, self.eta) return cwc
def xxx_cross_validation(t, u, l, xxx_u, xxx_l, mu=0.9, eta=10, cv=3, is_plot=False, plt_no=None): tscv = TimeSeriesSplit(n_splits=cv) cwc_l = [] picp_l = [] pinew_l = [] plt_num = 0 for tr_idx, te_idx in tscv.split(t): tr_u, te_u = u[tr_idx], u[te_idx] tr_l, te_l = l[tr_idx], l[te_idx] tr_t, te_t = t[tr_idx], t[te_idx] pred_u = xxx_predict(tr_u, te_u, xxx_u, range(1, 3)) pred_l = xxx_predict(tr_l, te_l, xxx_l, range(3)) d = max(len(te_t) - len(pred_u), len(te_t) - len(pred_l)) if is_plot: plt.figure(figsize=(8, 6)) plt.subplot(plt_no) rd.plot_ts_ul(te_t[d:], pred_u, pred_l, title='Cross validation %d' % plt_num) plt_no += 1 plt_num += 1 picp = picpf(te_t[d:], pred_u, pred_l) picp_l.append(picp) pinew = pinewf(pred_u, pred_l) pinew_l.append(pinew) cwc = cwcf(picp, pinew, mu, eta) cwc_l.append(cwc) return np.array(cwc_l).mean(), np.array(picp_l).mean(), np.array( pinew_l).mean()
def xxx_test_validation(test, u_train, u_test, l_train, l_test, xxx_u, xxx_l, mu=0.9, eta=10, is_plot=False, plt_num=111): pred_u = xxx_predict(u_train, u_test, xxx_u, range(1, 3)) pred_l = xxx_predict(l_train, l_test, xxx_l, range(3)) d = max(len(test) - len(pred_u), len(test) - len(pred_l)) if is_plot: plt.subplot(plt_num) plt.figure(figsize=(8, 6)) rd.plot_ts_ul(test[d:], pred_u, pred_l) picp = picpf(test[d:], pred_u, pred_l) pinew = pinewf(pred_u, pred_l) cwc = cwcf(picp, pinew, mu, eta) return cwc, picp, pinew
def cross_cwcf(self, gamma_u, C_u, gamma_l, C_l, d_u=None, d_l=None, cv=3, mu=0.6, eta=10, isplt=False): """计算交叉验证的cwc(区间覆盖宽度标准) picp(区间覆盖率) pinew(区间宽度) cv: 折数 mu: 预测置信区间 eta: 惩罚因子,表现算法偏好度。eta增加提升picp;eta减小,提升pinew isplt: 是否将每折画图 """ tscv = TimeSeriesSplit(n_splits=cv) cwc_l = [] picp_l = [] pinew_l = [] i_cv = 0 plot_num = cv * 100 + 3 * 10 for tridx, teidx in tscv.split(self.cv_t): cv_tr_u, cv_te_u = self.cv_u[tridx], self.cv_u[teidx] cv_tr_l, cv_te_l = self.cv_l[tridx], self.cv_l[teidx] cv_tr_t, cv_te_t = self.cv_t[tridx], self.cv_t[teidx] svr_u = svm.SVR(gamma=gamma_u, C=C_u) svr_l = svm.SVR(gamma=gamma_l, C=C_l) pu, pl, d = self.svm_predict(cv_tr_u, cv_te_u, cv_tr_l, cv_te_l, svr_u, svr_l, d_u, d_l) if isplt: plt.figure(figsize=(15, 6)) plt.subplot(plot_num + 1) plt.title('cv train %d' % (i_cv)) plt.plot(cv_tr_u, color='blue', marker='o') plt.plot(cv_tr_l, color='blue', marker='o') plt.plot(cv_tr_t, color='gray', marker='x') plt.subplot(plot_num + 2) plt.title('cv test %d' % (i_cv)) plt.plot(cv_te_u, color='blue', marker='o') plt.plot(cv_te_l, color='blue', marker='o') plt.plot(cv_te_t, color='gray', marker='x') plt.subplot(plot_num + 3) plt.title('cv predict %d' % (i_cv)) plt.plot(pu, color='blue', marker='o') plt.plot(pl, color='blue', marker='o') plt.plot(cv_te_t[d:], color='gray', marker='x') i_cv += 1 plot_num += 3 picp = picpf(cv_te_t[d:], pu, pl) picp_l.append(picp) pinew = pinewf(pu, pl) pinew_l.append(pinew) cwc = cwcf(picp, pinew, mu, eta) cwc_l.append(cwc) return np.array(cwc_l).mean(), np.array(picp_l).mean(), np.array( pinew_l).mean()