5折交叉验证生成的多组训练测试矩阵如何存储以便后续计算调用?
实现方案
注意:原代码中
KFold默认不打乱数据顺序,如果需要每次拆分结果固定可复现,建议开启shuffle=True并指定random_state参数。
方案1:使用字典存储(最推荐)
这种方法结构清晰,不会污染全局变量空间,调用也很方便。
from sklearn.model_selection import KFold from sklearn.cluster import KMeans import numpy as np # 假设你的数据集X已经提前定义好,形状为(351,14) kf = KFold(n_splits=5, shuffle=True, random_state=42) # 固定随机种子保证结果可复现 # 初始化两个字典分别存储训练集和测试集 X_train_dict = {} X_test_dict = {} for idx, (train_index, test_index) in enumerate(kf.split(X), start=1): X_train_dict[f"X_tr{idx}"] = X[train_index] X_test_dict[f"X_te{idx}"] = X[test_index]
调用示例:kmeans = KMeans(n_clusters=3, random_state=0).fit(X_train_dict['X_tr3'])
方案2:动态生成全局变量(直接生成X_tr1/X_te1形式变量)
如果确实需要直接使用X_tr1到X_tr5、X_te1到X_te5的独立变量名,可以通过globals()动态生成全局变量:
from sklearn.model_selection import KFold from sklearn.cluster import KMeans kf = KFold(n_splits=5, shuffle=True, random_state=42) for idx, (train_index, test_index) in enumerate(kf.split(X), start=1): globals()[f"X_tr{idx}"] = X[train_index] globals()[f"X_te{idx}"] = X[test_index]
调用示例和你要求的完全一致:kmeans = KMeans(n_clusters=3, random_state=0).fit(X_tr3)
你可以打印变量形状验证拆分结果是否符合预期:
print(X_tr3.shape)输出为(281, 14)print(X_te3.shape)输出为(70, 14)
内容的提问来源于stack exchange,提问作者Hermi
相关产品推荐
相关产品推荐

