sklearn loocv.split 返回比预期更小的测试和训练数组

苦参

因为我有一个小数据集,所以我LOOCVsklearn.

当我运行分类器时,收到以下错误:

"Number of labels=41 does not match number of samples=42".

我使用以下代码生成了测试集和训练集:

otu_trans = test_train.transpose()
# transpose otu table 
merged = pd.concat([otu_trans, metadata[status]], axis=1, join='inner')
# merge phenotype column from metadata file with transposed otu table

X = merged.drop([status],axis=1)

# drop status from X 
y = merged[status]


encoder = LabelEncoder()
y = pd.Series(encoder.fit_transform(y),
index=y.index, name=y.name)
# convert T and TF lables to 0 and 1 respectively

loocv = LeaveOneOut()
loocv.get_n_splits(X)

for train_index, test_index in loocv.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    print(X_train, X_test, y_train, y_test)

输入数据

当我检查它的形状时X_trainX_test42,41不是41,257我认为应该的样子,因此似乎数据沿错误的轴进行了分区。

谁能向我解释为什么会发生这种情况?

谢谢

塞拉鲁克

首先,初始矩阵X根本不会受到影响。它仅用于生成索引和拆分数据。

首字母的形状X将始终相同。

现在,这是一个使用拆分简单示例LOOCV

import numpy as np
from sklearn.model_selection import LeaveOneOut

# I produce fake data with same dimensions as yours.
#fake data
X = np.random.rand(41,257)
#fake labels
y = np.random.rand(41)

#Now check that the shapes are correct:
X.shape
y.shape

这会给你:

(41, 257)
(41,)

现在拆分

loocv = LeaveOneOut()
loocv.get_n_splits(X)

for train_index, test_index in loocv.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    #classifier.fit(X_train, y_train)
    #classifier.predict(X_test)


X_train.shape
X_test.shape

这打印:

(40, 257)
(1, 257)

如您所见,X_train包含40样本和X_test仅包含1样本。这是正确的,因为我们使用LOOCV拆分。

初始 X 矩阵共有 42 个样本,因此我们使用 41 个用于训练,1 个用于测试。

这个循环会产生很多X_trainX_test矩阵。具体来说,它会产生N矩阵 where N= number of samples(在我们的例子中:)N = 41

N等于loocv.get_n_splits(X)

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

R中的LOOCV返回错误

在train_test_split sklearn中随机定义训练大小

Python Sklearn train_test_split():如何设置要训练的数据?

sklearn.model_selection import train_test_split和sklearn.cross_validation import train_test_split有什么区别

使用sklearn train_test_split的“ TypeError:单例数组不能被视为有效集合”

sklearn DecisionTreeClassifier中的min_samples_split和min_samples_leaf之间的差异

sklearn shuffle train_test_split不改组标签和输入以匹配

sklearn train_test_split 混淆

sklearn:在训练和测试集之间组合混淆矩阵

Sklearn训练数据和测试数据的大小不同

无法使用sklearn创建测试和训练集

拆分数据帧以进行训练和测试 SKlearn

在sklearn.cross_validation中使用train_test_split和cross_val_score之间的区别

sklearn导入返回错误

sklearn的train_test_split中的random_state参数

在train_test_split sklearn python上设置种子

缩放数组(sklearn)-Python

导入sklearn.model_selection.train_test_split与导入sklearn.model_selection为sm

用于test_train_split的包装器,可为任意数量的输入数组生成训练,验证和测试拆分

使用 sklearn 的 cross_val_score 和不同的训练和测试数据集

PySpark和Sklearn TFIDF

在 sklearn 中预测训练数据

与sklearn并行训练多个模型?

Laravel split() 返回数组和对象的混合

如何使用MinMaxScaler sklearn归一化训练和测试数据

如何在sklearn的平衡训练集和测试集上拆分数据

如何使用内置的tensorflow方法对特征张量和标签张量执行sklearn样式训练测试拆分?

使用管道在 sklearn 中从训练测试拆分到交叉验证

Sklearn中的训练/测试/验证分层集拆分