Python ValueError:找到样本数不一致的输入变量:[13185]

Python ValueError:找到样本数不一致的输入变量:[13185],python,python-3.x,scikit-learn,Python,Python 3.x,Scikit Learn,问题在于矢量化,因为它给了我X_列的大小计数[1,1]。我不知道为什么。这就是为什么多项式nb不能执行这个动作,因为y_列的大小是[13185]。 我是机器学习新手。任何帮助都将不胜感激 回溯: # -*- coding: utf-8 -*- """ Created on Sun Jun 3 01:36:10 2018 @author: Sharad """ import numpy as np import pickle import pandas as pd import matplot

问题在于矢量化,因为它给了我X_列的大小计数[1,1]。我不知道为什么。这就是为什么多项式nb不能执行这个动作,因为y_列的大小是[13185]。 我是机器学习新手。任何帮助都将不胜感激

回溯:

# -*- coding: utf-8 -*-
"""
Created on Sun Jun  3 01:36:10 2018

@author: Sharad
"""
import numpy as np
import pickle
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
dbfile=open("D:/df_train_api.pk", 'rb')
df=pickle.load(dbfile)


y=df[['label']]
features=['groups']
X=df[features].copy()
X.columns
y.columns

#for spiliting into training and test data

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=324)
#for vectorizing
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)
X_train_counts.shape

from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
X_train_tfidf.shape

from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB().fit(X_train_tfidf, y_train)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('C:/Users/Sharad/.spyder-py3/hypothizer.py',wdir='C:/Users/Sharad/.spyder-py3')
文件“C:\Users\Sharad\Anaconda3\lib\site packages\spyder\utils\site\sitecustomize.py”,第705行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\Sharad\Anaconda3\lib\site packages\spyder\utils\site\sitecustomize.py”,第102行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Sharad/.spyder-py3/hypothizer.py”,第37行,在
clf=多项式Nb().拟合(X\u列\u tfidf,y\u列)
文件“C:\Users\Sharad\Anaconda3\lib\site packages\sklearn\naive\u bayes.py”,第579行,在fit中
十、 y=检查X(X,y,‘csr’)
文件“C:\Users\Sharad\Anaconda3\lib\site packages\sklearn\utils\validation.py”,第583行,在check\X\u y中
检查长度(X,y)是否一致
文件“C:\Users\Sharad\Anaconda3\lib\site packages\sklearn\utils\validation.py”,第204行,检查长度是否一致
“样本:%r”%[int(l)表示长度为l的样本])
ValueError:找到样本数不一致的输入变量:[13185]
CountVectorizer(通过继承,TfidfTransformer和TfidfVectorizer)需要在
fit()
中包含一个原始文档列表,并且:

因此,在内部,它将这样做:

raw_documents : iterable
    An iterable which yields either str, unicode or file objects.
当您在其中传递pandas DataFrame对象时,
只会为。。。在X中
。因此,只处理单个文档(而不是该列中的数据)

您需要这样做:

for doc in raw_documents:
    do_processing(doc)
否则,请执行以下操作:

X = df[features].values().ravel()
上面的代码与您正在执行的代码有所不同。您正在这样做:

X=df['groups'].copy()
这里的
features
已经是一个列列表。因此,本质上这变成:

X=df[features].copy()
区别在于这里的双括号(返回数据帧)和代码中的单括号(返回序列)

当X是一个系列时,
for value in X
按预期工作,但当X是一个数据帧时,只返回列名


希望这是清楚的。

请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。请包含完整的回溯。目前,我们甚至不知道错误发生在哪一行,更不用说上下文了。@9769953 traceback添加。请看一看。
X=df[features].copy()
X=df[['groups']].copy()