Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sklearn train_test_split-ValueError:发现样本数不一致的输入变量_Python_Tensorflow_Keras_Scikit Learn - Fatal编程技术网

Python sklearn train_test_split-ValueError:发现样本数不一致的输入变量

Python sklearn train_test_split-ValueError:发现样本数不一致的输入变量,python,tensorflow,keras,scikit-learn,Python,Tensorflow,Keras,Scikit Learn,我有一个多标签分类问题,我在网上看到,对于标签的热编码,最好使用MultiLabelBinarizer 我将其用于与数据集本身分离的标签,如下所示: ohe = MultiLabelBinarizer() labels = ohe.fit_transform(labels) train, test, train_labels, test_labels = train_test_split(dataset, labels, test_size=0.2) #80% train split

我有一个多标签分类问题,我在网上看到,对于标签的热编码,最好使用MultiLabelBinarizer

我将其用于与数据集本身分离的标签,如下所示:

ohe = MultiLabelBinarizer()
labels = ohe.fit_transform(labels)
train, test, train_labels, test_labels = train_test_split(dataset, labels, test_size=0.2) #80% train split
             Before             After
dataset      (83292, 15)        (83292, 15)
labels       (83292, 5)         (5, 18)
但它给我带来了以下错误:

Traceback (most recent call last): 
  File "learn.py", line 114, in <module> 
    train, test, train_labels, test_labels = train_test_split(dataset, labels, test_size=0.2) #80% train split
  File "C:\Users\xwb18152\AppData\Roaming\Python\Python38\site-packages\sklearn\model_selection\_split.py", line 2127, 
in train_test_split
    arrays = indexable(*arrays)
  File "C:\Users\xwb18152\AppData\Roaming\Python\Python38\site-packages\sklearn\utils\validation.py", line 293, in indexable
    check_consistent_length(*result)
  File "C:\Users\xwb18152\AppData\Roaming\Python\Python38\site-packages\sklearn\utils\validation.py", line 256, in check_consistent_length
    raise ValueError("Found input variables with inconsistent numbers of"
ValueError: Found input variables with inconsistent numbers of samples: [83292, 5]
由此可见,这是一个多标签多类分类问题。二值化器前后的数据集和标签的形状如下所示:

ohe = MultiLabelBinarizer()
labels = ohe.fit_transform(labels)
train, test, train_labels, test_labels = train_test_split(dataset, labels, test_size=0.2) #80% train split
             Before             After
dataset      (83292, 15)        (83292, 15)
labels       (83292, 5)         (5, 18)

这意味着要拆分的各个元素的长度不匹配。对于X和y,sklearn将采用相同的索引,通常是数据索引的80%的随机样本。因此,长度必须匹配

想象一下,它试图保持这些指数。如果某个索引中没有任何内容,sklearn会怎么做

 0 1 0 0 1 0 1 0 0 1 0 1 0 1
 a b b a b a b a a b b b 
 ^   ^     ^ ^   ^   ^   ^ ^ 
执行此检查以验证长度是否匹配。这是真的吗


这意味着要拆分的各个元素的长度不匹配。对于X和y,sklearn将采用相同的索引,通常是数据索引的80%的随机样本。因此,长度必须匹配

想象一下,它试图保持这些指数。如果某个索引中没有任何内容,sklearn会怎么做

 0 1 0 0 1 0 1 0 0 1 0 1 0 1
 a b b a b a b a a b b b 
 ^   ^     ^ ^   ^   ^   ^ ^ 
执行此检查以验证长度是否匹配。这是真的吗


正如您所说的,标签的原始形状是83292,5,一旦您应用了MultiLabelBinarizer,它就变成了5,18

训练测试分割X,y函数期望X和y应该有相同的行。例如:X中有83292个可用数据点,y变量中应有相应的数据点标签。 因此,在您的例子中,它应该是X,y形状应该是83292,15和83292,18

试试这个: 您的MultiLabelBinarizer输出在此处具有错误的维度。因此,如果标签是dataframe对象,则应应用mlb.fit_transformlabels.values.tolist。 这将产生与此处输出83292相同的行数

标签示例应如下所示格式:

您的y输入可以类似于列表列表或数据框,其中有一列包含值列表。确保X和y的行数相同。您可以像下面的格式一样表示多标签多类y变量。或dataframe.shape不应为任何行,1


正如您所说的,标签的原始形状是83292,5,一旦您应用了MultiLabelBinarizer,它就变成了5,18

训练测试分割X,y函数期望X和y应该有相同的行。例如:X中有83292个可用数据点,y变量中应有相应的数据点标签。 因此,在您的例子中,它应该是X,y形状应该是83292,15和83292,18

试试这个: 您的MultiLabelBinarizer输出在此处具有错误的维度。因此,如果标签是dataframe对象,则应应用mlb.fit_transformlabels.values.tolist。 这将产生与此处输出83292相同的行数

标签示例应如下所示格式:

您的y输入可以类似于列表列表或数据框,其中有一列包含值列表。确保X和y的行数相同。您可以像下面的格式一样表示多标签多类y变量。或dataframe.shape不应为任何行,1


我会在使用MultiLabelBinarizer进行一次热编码之前还是之后执行此比较?之前还是之后都无所谓,因为这不会改变数据的长度。根据MultiLabelBinarizer,一个常见的错误是传递列表。也许这就是您出错的地方?在使用MultiLabelBinarizer之前,通过执行lendataset==lenlabels,它返回True,但之后返回false,数据集和标签的长度分别为83292和5。根据文档,通过执行fit_transform[labels]可以解决经常出现的错误我会在使用MultiLabelBinarizer进行一次热编码之前还是之后执行此比较?之前还是之后都无所谓,因为这不会改变数据的长度。根据MultiLabelBinarizer,一个常见的错误是传递列表。也许这就是您出错的地方?在使用MultiLabelBinarizer之前,通过执行lendataset==lenlabels,它返回True,但之后返回false,数据集和标签的长度分别为83292和5。根据文档,通过执行fit_transform[labels]可以解决经常出现的错误数据集的形状是什么labels@NarendraPrasath在二值化器之前,数据集和标签的形状分别为83292、15和83292、5;在二值化器之后,数据集和标签的形状分别为83292、15和5、18。@NarendraPrasath我已更新OP以包含更多信息。我已给出解决方案。希望对你有用。数据集的形状是什么labels@NarendraPrasath在二值化器之前,数据集和标签的形状分别为83292、15和83292、5;在二值化器之后,数据集和标签的形状分别为83292、15和5、18。@Narendraprash I已更新了操作
包括更多信息。我已经给出了解决方案。希望这对你很有效。谢谢你的解决方案!然而,标签数据集的形状从83292,5变为83292,14。你知道为什么吗?@rshah这个解决方案有效吗?它是每个标签的二进制表示。将有14个独特的课程可供选择。这就是为什么形状是14它通过二值化程序没有错误,但我有5个类,但我想知道为什么现在标签和数据集在对83292的标签进行二值化后具有相同的形状,14@rshah你能检查一下唯一标签的总数吗?我检查了ohe.classes的输出是什么,它不是我所期望的:[ 0 1 2 3 4 5 6 7 10 25 50 100 150 200]感谢您提供的解决方案!但是,标签数据集的形状从83292,5变为83292,14,知道为什么吗?@rshah此解决方案有效吗?它是每个标签的二进制表示形式。将有14个唯一类可用。这就是为什么形状是14。它通过二进制程序时没有错误,但我有5个类,但我想知道为什么现在标签和数据集在对83292的标签进行二值化后具有相同的形状,14@rshah你能检查一下唯一标签的总数吗?我检查了ohe.classes的输出是什么,它不是我期望的:[01 2 3 4 6 7 10 25 100 150 200]