如何解决 Python 中的“ValueError:找到样本数量不一致的输入变量”问题

Posted

技术标签:

【中文标题】如何解决 Python 中的“ValueError:找到样本数量不一致的输入变量”问题【英文标题】:How to fix the issue "ValueError: Found input variables with inconsistent numbers of samples" in Python 【发布时间】:2021-03-27 18:54:15 【问题描述】:

我有两个文件,即 data [3806, 2] 和 target [4039, 2]。我的目标是将这些文件拆分为训练和测试数据集。我已经尝试过:

from sklearn.model_selection import train_test_split
data_train, data_test, target_train, target_test = train_test_split(data, target, test_size=0.2, random_state=0)

但是,它给出了错误:

ValueError: Found input variables with inconsistent numbers of samples: [3806, 4039]

为了运行分类算法,该问题的最佳解决方案是什么?

【问题讨论】:

【参考方案1】:

train_test_split 的作用存在混淆:它的目标是在训练集和测试集之间拆分数据。通常输入数据由两个数组组成:X 用于特征,y 用于标签,函数随机选择给定比例的行作为测试集,其余的作为训练集。示例:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

用于测试集的行与Xy 中的相同,因此输出数组仍然包含每个实例的正确标签:例如,在两者中都选择了第 3、5、6、8 行数组,并且第 3 行的特征仍然对应于第 3 行的标签。这就是为什么两个输入数组必须具有相同的长度

在您的代码中,您给出了两个长度不同的数组,因此会出现错误。

您希望将其中一个数组用作训练集,将另一个数组用作测试集,在这种情况下,您无需调用train_test_split,因为您的数据已经拆分。 或者你想从这两个数据集的并集中随机选择一个测试集,在这种情况下你应该在调用train_test_split之前连接两个数组的行。

【讨论】:

【参考方案2】:

“训练和测试数据集的大小不相等:”

我假设您已经完成了生成 X 特征和 y 标签集 其中包含相同数量的数据。如果没有再次检查该步骤!

例如:

features = Sample_Set.drop('X', axis=1)
labels = Sample_Set['X']

现在,您将生成 X_train、X_test、y_train、y_test

*** 别忘了 train_test_split 只能将数据集一分为二。 因此,通过这一步,您可以从 33% 的数据生成训练集,剩下的 67% 用于验证和测试集。因此,您将更难拆分它们。

为什么不取 test_size=0.4,这样你就有 60% 用于训练,剩下 40% 用于验证和测试,很容易分成两半?

我们将有 60% 的数据作为“训练集”,40% 的数据作为“测试集”

X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.4, random_state=42)

将 test_size 更改为 50%,这样一半将进入我们的“测试集”,另一半进入我们的“验证测试”

X_test, X_val, y_test, y_val = train_test_split(X_test, y_test, test_size=0.5, random_state=42)

【讨论】:

以上是关于如何解决 Python 中的“ValueError:找到样本数量不一致的输入变量”问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 训练 arima 模型时如何解决 LinAlgError 和 ValueError

如何在没有字符串解析的情况下解析 Python 中的 ValueError?

如何解决以下代码中的 ValueError?

ValueError:pytorch 中的“str”python 维度太多

如何修复'ValueError:shapes(1,3)和(1,1)未对齐:3(dim 1)!= 1(dim 0)'numpy中的错误

Python解决ValueError