单例数组数组(<函数列在0x7f3a311320d0>,dtype = object)不能被视为有效集合

man*_*sha 9 python pipeline pandas scikit-learn train-test-split

不知道如何解决.任何帮助非常感谢.我看到了矢量化:不是一个有效的集合,但不确定我是否理解这一点

    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)
Run Code Online (Sandbox Code Playgroud)

错误如下:

    ----> 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.

 ____
Run Code Online (Sandbox Code Playgroud)

不知道如何解决.任何帮助非常感谢.我看到了矢量化:不是一个有效的集合,但不确定我是否理解这一点

dop*_*xxx 10

我在另一个context(sklearn train_test_split)中得到了同样的错误,原因很简单,我已经将一个位置参数作为关键字参数传递,这导致了被调用函数的误解.

  • 奇怪的是 sklearn 没有 Exception 来捕捉这个。 (2认同)

Viv*_*mar 6

出现此错误是因为您的函数会train屏蔽您的变量train,因此会将其传递给自身.

说明:

你可以像这样定义一个变量列车:

train = df1.iloc[:,[4,6]]
Run Code Online (Sandbox Code Playgroud)

然后在一些行之后,你定义一个这样的方法训练:

def train(classifier, X, y):
Run Code Online (Sandbox Code Playgroud)

所以实际发生的是,你的train旧版本更新了新版本.这意味着trainnow现在不指向您想要的Dataframe对象,而是指向您定义的函数.在错误中它被清除.

array(<function train at 0x7f3a311320d0>, dtype=object)
Run Code Online (Sandbox Code Playgroud)

请参阅错误语句中的函数列.

方案:

重命名其中一个(变量或方法). 建议:重命名功能一些其他名称,如trainingtraining_func或类似的东西.


Inf*_*5ek 5

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

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

然而 count 被认为是 pandas dataframe 对象的一个​​属性。由此产生的名称冲突会产生(相当令人困惑的)错误。