You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有函数可计算时间序列交叉验证全程的总得分?

解决方案

scikit-learn中没有直接返回时间序列交叉验证全程总得分的函数,但可以通过两种方式手动实现,核心思路是收集所有测试折的预测结果,再用完整的测试样本标签和预测结果计算一次得分:

方法1:使用cross_val_predict(简洁版)

cross_val_predict会按照你定义的tscv划分规则,依次对每个测试折做预测,最终返回所有测试样本的预测值数组(保持原始数据顺序),直接用这个数组和真实标签计算总得分即可:

from sklearn.model_selection import cross_val_predict
from sklearn.metrics import precision_score
from sklearn.svm import SVC

# 获取所有测试样本的预测结果
y_pred = cross_val_predict(
    SVC(), 
    X, 
    y, 
    cv=tscv, 
    n_jobs=-1
)

# 计算全程总精度得分(和你之前用的scorer参数一致)
total_precision = precision_score(y, y_pred, zero_division=1)

方法2:手动遍历交叉验证折(灵活版)

如果需要更灵活的控制(比如记录每折的训练细节),可以手动遍历tscv的划分索引,收集所有测试集的真实标签和预测结果:

from sklearn.base import clone
from sklearn.metrics import precision_score
from sklearn.svm import SVC

model = SVC()
y_true_all = []
y_pred_all = []

# 遍历每个交叉验证折
for train_idx, test_idx in tscv.split(X):
    # 划分训练/测试集
    X_train, X_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]
    
    # 克隆模型,避免不同折之间的参数干扰
    clf = clone(model)
    clf.fit(X_train, y_train)
    
    # 预测并收集结果
    y_pred = clf.predict(X_test)
    y_true_all.extend(y_test)
    y_pred_all.extend(y_pred)

# 计算全程总得分
total_precision = precision_score(y_true_all, y_pred_all, zero_division=1)

注意事项

  • 两种方法都严格遵循时间序列交叉验证的规则:训练集始终在测试集的时间区间之前,不会出现数据泄露问题。
  • 计算总得分时的参数(比如zero_division=1)要和你之前make_scorer里的设置保持一致,确保得分标准统一。

内容的提问来源于stack exchange,提问作者OldChi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:40:39