21

Not sure how to fix . Any help much appreciate. I saw thi Vectorization: Not a valid collection but not sure if i understood this

train = df1.iloc[:,[4,6]]
target =df1.iloc[:,[0]]

def train(classifier, X, y):
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)
    classifier.fit(X_train, y_train)
    print ("Accuracy: %s" % classifier.score(X_test, y_test))
    return classifier

trial1 = Pipeline([
         ('vectorizer', TfidfVectorizer()),
         ('classifier', MultinomialNB()),])

train(trial1, train, target)

error below :

    ----> 6 train(trial1, train, target)

    <ipython-input-140-ac0e8d32795e> in train(classifier, X, y)
          1 def train(classifier, X, y):
    ----> 2     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)
          3 
          4     classifier.fit(X_train, y_train)
          5     print ("Accuracy: %s" % classifier.score(X_test, y_test))

    /home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/model_selection/_split.py in train_test_split(*arrays, **options)
       1687         test_size = 0.25
       1688 
    -> 1689     arrays = indexable(*arrays)
       1690 
       1691     if stratify is not None:

    /home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in indexable(*iterables)
        204         else:
        205             result.append(np.array(X))
    --> 206     check_consistent_length(*result)
        207     return result
        208 

    /home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
        175     """
        176 
    --> 177     lengths = [_num_samples(X) for X in arrays if X is not None]
        178     uniques = np.unique(lengths)
        179     if len(uniques) > 1:

    /home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in <listcomp>(.0)
        175     """
        176 
    --> 177     lengths = [_num_samples(X) for X in arrays if X is not None]
        178     uniques = np.unique(lengths)
        179     if len(uniques) > 1:

    /home/manisha/anaconda3/lib/python3.5/site-packages/sklearn/utils/validation.py in _num_samples(x)
        124         if len(x.shape) == 0:
        125             raise TypeError("Singleton array %r cannot be considered"
    --> 126                             " a valid collection." % x)
        127         return x.shape[0]
        128     else:

    TypeError: Singleton array array(<function train at 0x7f3a311320d0>, dtype=object) cannot be considered a valid collection.

 ____

Not sure how to fix . Any help much appreciate. I saw thi Vectorization: Not a valid collection but not sure if i understood this

4

6 回答 6

18

出现此错误是因为您的函数train掩盖了您的变量train,因此它被传递给自身。

说明

您可以像这样定义一个变量 train:

train = df1.iloc[:,[4,6]]

然后在几行之后,你定义了一个这样的方法 train:

def train(classifier, X, y):

所以实际发生的是,您以前的版本train更新为新版本。这意味着trainnow 不会像您想要的那样指向 Dataframe 对象,而是指向您定义的函数。在错误中它被清除。

array(<function train at 0x7f3a311320d0>, dtype=object)

请参阅错误语句中的函数 train 。

解决方案

重命名其中之一(变量或方法)。 建议:将函数重命名为其他名称,例如trainingortraining_func或类似的名称。

于 2017-04-05T07:16:17.840 回答
17

sklearn train_test_split在另一个上下文(

于 2018-07-08T10:22:39.910 回答
4

第一个答案的变体-您可能会得到此答案的另一个原因是,如果数据中的列名与包含数据的对象的属性/方法相同。

就我而言,我试图使用表面上合法的语法 df.count 访问数据框“df”中的“count”列。

但是 count 被认为是 pandas 数据框对象的属性。由此产生的名称冲突会产生(相当令人困惑的)错误。

于 2019-02-06T09:16:54.220 回答
0

就我而言,我只是通过转到 File -> open 来重新打开项目。

不知何故,一切都重新加载并重新开始工作。

于 2020-09-08T21:18:49.477 回答
0

对于那些使用 pyTorch DataLoaders 的人 - 使用数据集功能:

for idx1, idx2 in kfold.split(train_dl.dataset)

这里 train_dl 是一个 DataLoader

于 2020-10-27T07:34:20.743 回答
0

我遇到了同样的错误,sklearn.model_selection train_test_split但在我的情况下,原因是我向函数提供了一个从 spark 数据帧派生的数组,而不是来自 Pandas 数据帧的数组。当我使用如下 toPandas() 函数将我的数据转换为 pandas 数据框,然后将 Pandas df 提供给 train_test_split 时,问题得到解决。

pandas_df=spark_df.toPandas()

错误:

features_to_use = ['Feature1', 'Feature2']
x5D = np.array(spark_df[ features_to_use ])
y5D = np.array(spark_df['TargetFeature'])
X_train, X_test, y_train, y_test = train_test_split(x5D, y5D, train_size=0.8)

固定的:

pandas_df=spark_df.toPandas()
features_to_use = ['Feature1', 'Feature2']
x5D = np.array(pandas_df[ features_to_use ])
y5D = np.array(pandas_df['TargetFeature'])
X_train, X_test, y_train, y_test = train_test_split(x5D, y5D, train_size=0.8)
于 2019-04-15T19:56:02.690 回答