python - numpy:如何在 np 数组中选择特定索引以进行 k 折交叉验证?

标签 python arrays numpy machine-learning cross-validation

我有一个矩阵形式的训练数据集,尺寸为 5000 x 3027(CIFAR-10 数据集)。在 numpy 中使用 array_split,我将它分成 5 个不同的部分,我只想选择其中一个部分作为交叉验证折叠。但是,当我使用类似的东西时,我的问题就来了 XTrain[[Indexes]] 其中 indexes 是一个数组,如 [0,1,2,3],因为这样做会给我一个尺寸为 4 x 1000 x 3027 的 3D 张量,而不是矩阵。如何将“4 x 1000”折叠成 4000 行,以获得 4000 x 3027 的矩阵?

for fold in range(len(X_train_folds)):
    indexes = np.delete(np.arange(len(X_train_folds)), fold) 
    XTrain = X_train_folds[indexes]
    X_cv = X_train_folds[fold]
    yTrain = y_train_folds[indexes]
    y_cv = y_train_folds[fold]

    classifier.train(XTrain, yTrain)
    dists = classifier.compute_distances_no_loops(X_cv)
    y_test_pred = classifier.predict_labels(dists, k)

    num_correct = np.sum(y_test_pred == y_test)
    accuracy = float(num_correct/num_test)
    k_to_accuracy[k] = accuracy

最佳答案

也许你可以试试这个(numpy 的新手,所以如果我做的事情效率低下/错误,很乐意得到纠正)

X_train_folds = np.array_split(X_train, num_folds)
y_train_folds = np.array_split(y_train, num_folds)
k_to_accuracies = {}

for k in k_choices:
    k_to_accuracies[k] = []
    for i in range(num_folds):
        training_data, test_data = np.concatenate(X_train_folds[:i] + X_train_folds[i+1:]), X_train_folds[i]
        training_labels, test_labels = np.concatenate(y_train_folds[:i] + y_train_folds[i+1:]), y_train_folds[i]
        classifier.train(training_data, training_labels)
        predicted_labels = classifier.predict(test_data, k)
        k_to_accuracies[k].append(np.sum(predicted_labels == test_labels)/len(test_labels))

关于python - numpy:如何在 np 数组中选择特定索引以进行 k 折交叉验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37370369/

相关文章:

python - 根据名称和选项制作一个具有自动值的(类型化)python 枚举

java - 如何根据特定键的值 null 删除 JSON 数组中的 JSON 对象?

python - C++ 类成员函数返回 PyObject* 段错误

python - 如何在Excel中使用python将列拆分为父列下的两个子列

Python:计算两个矩阵的相似元素

python - pandas 拆分行和列以相互匹配

Python attrs/cattrs 使用卡住的 attrs 类作为字典键序列化字典

python - 如何在同一行打印 2 个项目

javascript - 很难将 json 字符串从服务器转换为数组

c - 不明白奇怪的 C 函数定义