classification - 如何解决 Python 中的“ValueError:找到样本数量不一致的输入变量”问题
问题描述
我有两个文件,即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]
为了运行分类算法,这个问题的最佳解决方案是什么?
解决方案
关于做什么有一个困惑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)
用于测试集的行与X
和相同y
,因此输出数组仍然包含每个实例的正确标签:例如,在两个数组中都选择了第 3、5、6、8 行,第 3 行的特征仍然对应于第 3 行的标签。这就是为什么两个输入数组必须具有相同的长度。
在您的代码中,您给出了两个长度不同的数组,因此会出现错误。
- 要么你想使用其中一个数组作为训练集,另一个作为测试集,在这种情况下你不需要调用
train_test_split
,因为你的数据已经被分割了。 - 或者您想从这两个数据集的并集中随机选择一个测试集,在这种情况下,您应该在调用
train_test_split
.
推荐阅读
- c# - 使用复杂的 XML 数据将 XML 转换为 JSON
- javascript - 将未定义的加上 JavaScript 中的值扔给 PHP
- keyboard-shortcuts - 到达一行代码的末尾
- php - 将旧的格式化 URL 重写为新的格式化 URL
- c++ - 如何制作一个范围以使用基于范围的范围(以取代传统的 for)?
- jquery - 用于测试 SpreadJS 的 Selenium 驱动程序
- java - android studio中滚动条下按钮中的文本调整
- javascript - 我按两次提交后,Ajax 工作
- node.js - 在 Sails.JS 中调用多个控制器
- node.js - Mac安装openssl,找不到环境