数值错误:当n_samples=0,test_size=0.2且train_size=None时,训练集将为空。请调整上述参数中的任意一个。

7
我写了一个文本分类程序。当我运行这个程序时,它会崩溃并显示如下截图中的错误信息:

as seen in this screenshot

数值错误:当n_samples=0,test_size=0.2且train_size=None时,生成的训练集将为空。请调整上述任何参数。

这是我的代码:

from sklearn.model_selection import train_test_split
from gensim.models.word2vec import Word2Vec
from sklearn.preprocessing import scale
from sklearn.linear_model import SGDClassifier
import nltk, string, json
import numpy as np

def cleanText(corpus):
    reviews = []
    for dd in corpus:
        #for d in dd:
        try:
            words = nltk.word_tokenize(dd['description'])
            words = [w.lower() for w in words]
            reviews.append(words)
            #break
        except:
            pass
    return reviews

with open('C:\\NLP\\bad.json') as fin:
    text = json.load(fin)
    neg_rev = cleanText(text)

with open('C:\\NLP\\good.json') as fin:
    text = json.load(fin)
    pos_rev = cleanText(text)

#1 for positive sentiment, 0 for negative
y = np.concatenate((np.ones(len(pos_rev)), np.zeros(len(neg_rev))))

x_train, x_test, y_train, y_test = train_test_split(np.concatenate((pos_rev, neg_rev)), y, test_size=0.2)

我使用的数据在这里可用:

  1. 坏的链接;

  2. 好的链接

我该如何解决这个错误?


1
你检查过你连接的评论和你的y变量的shape了吗? - G. Anderson
1
打印(y) = [ ]。 - Silver
1
这就解释了你在错误中的 n_samples=0。所以从那里开始倒推,弄清楚在 pos_revneg_rev 中实际上是什么被解析出来的,因为如果没有错误,那么每个的 len() 似乎都是 0 - G. Anderson
df.shape给出的输出为 Out[48]: (1, 67501) - emeralddove
以下代码行仍然导致 ValueError 错误:x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=77, stratify=y) - emeralddove
哎呀!它的Python缩进出问题了。在重构和引入一个函数时发生了这个问题。还要检查这种错误,以及其他错误。 - emeralddove
6个回答

15

遇到了相同的错误:ValueError: 当n_samples=0、test_size=0.2且train_size=None时,得到的训练集为空。调整上述任一参数。

在我的情况下,数据路径无效。请检查加载文件的路径是否存在,或者读取文件的变量是否包含任何数据。


1

我认为下面的代码片段可以帮助你解决问题。

ad_data=pd.read_csv("advertising.csv")from sklearn.model_selection import train_test_split
x=ad_data[['Daily Time Spent on Site', 'Age', 'Area Income','Daily Internet Usage', 'Male']]
y=ad_data['Clicked on Ad']
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)

0

得到了同样的错误:ValueError:将n_samples = 0,test_size = 0.2和train_size = None与结果为空的train集合一起使用。 调整上述任何参数。 错误是因为找不到数据文件导致的。如果您正在使用jupyter笔记本电脑,则不能使用Dataframe来定义X和y。因此,使用Dataframe定义x和y可以解决问题。在其他情况下,它是由于找不到数据而发生的。因此,请检查在给定路径中是否存在数据。


0
我曾经遇到过同样的问题。在我的情况下,问题出在文件扩展名上。我只需更改文件扩展名就解决了这个错误。因此,对于这个错误:ValueError: With n_samples=0, test_size=0.2 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters,也可以检查文件扩展名。

0
在我的情况下,路径是正确的,但我正在使用bert进行文本分类,这时我注意到X和y变量的形状,我只有一个句子的输入数据,所以model_selection无法将其拆分,当我将其重塑为多个句子时,它就可以工作了。

-1
#x_train, x_test, y_train, y_test = train_test_split(X, Y, random_state=0)
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=42)
slr = LinearRegression()
slr.fit(x_train.reshape(-1,1), y_train)

我一直在使用n_samples=0、test_size=0.33和train_size=None时出现错误,导致训练集为空。请调整上述任何参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接