我正计划为我的交叉验证构建一个混淆矩阵,并且由于混淆矩阵仅接受预测,因此有一种方法可以做到这一点。但是,cross_val_predict不能用于时间序列分割CV。我正在使用MultinomialNB解决我的问题。
我尝试了以下代码:
def tn(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 0]
def fp(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 1]
def fn(y_true, y_pred): return confusion_matrix(y_true, y_pred)[1, 0]
def tp(y_true, y_pred): return confusion_matrix(y_true, y_pred)[1, 1]
scoring = {'tp' : make_scorer(tp), 'tn' : make_scorer(tn),'fp' :
make_scorer(fp), 'fn' : make_scorer(fn)}
cv_results = cross_validate(nb, train_data, train_label,scoring=scoring, cv=tss)#10 fold time series split
tp = cv_results['test_tp'].sum()
fn = cv_results['test_fn'].sum()
tn = cv_results['test_tn'].sum()
fp = cv_results['test_fp'].sum()
由此产生的混淆矩阵的总数与火车数据点的总数不匹配,并且对于每个CV折叠,我都在构建一个不是我想要的混淆矩阵。