web-dev-qa-db-de.com

Ein Singleton-Array-Array (<Funktionszug bei 0x7f3a311320d0>, dtype = object) kann nicht als gültige Auflistung betrachtet werden

Nicht sicher, wie Sie das Problem beheben können. Jede Hilfe sehr zu schätzen. Ich sah diese Vektorisierung: Keine gültige Sammlung , aber nicht sicher, ob ich das verstanden habe

    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)

fehler unten:

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

 ____

Nicht sicher, wie Sie das Problem beheben können. Jede Hilfe sehr zu schätzen. Ich sah diese Vektorisierung: Keine gültige Sammlung , aber nicht sicher, ob ich das verstanden habe

7
manisha

Dieser Fehler tritt auf, weil Ihre Funktion train Ihre Variable train maskiert und daher an sich selbst übergeben wird.

Erklärung :

Sie definieren einen variablen Zug wie folgt:

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

Nach einigen Zeilen definieren Sie einen Methodenzug wie folgt:

def train(classifier, X, y):

Was also tatsächlich passiert, ist, dass Ihre vorherige Version von train mit einer neuen Version aktualisiert wurde. Das bedeutet, dass train jetzt nicht wie gewünscht auf das Dataframe-Objekt zeigt, sondern auf die von Ihnen definierte Funktion. Im Fehlerfall wird es gelöscht.

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

Siehe die Funktion train in der Fehleranweisung.

Lösung :

Benennen Sie eine davon um (die Variable oder die Methode). Vorschlag : Benennen Sie die Funktion in einen anderen Namen wie training oder training_func oder ähnliches um.

5
Vivek Kumar

Ich habe den gleichen Fehler in einem anderen Kontext (sklearn train_test_split) erhalten und der Grund war einfach, dass ich ein Positionsargument als Schlüsselwortargument übergeben hatte, das zu einer Fehlinterpretation in der aufgerufenen Funktion führte.

7
dopexxx

Eine Variation der ersten Antwort - ein weiterer Grund dafür könnte sein, dass ein Spaltenname in Ihren Daten mit einem Attribut/einer Methode des Objekts übereinstimmt, das die Daten enthält. 

In meinem Fall habe ich versucht, auf die Spalte "count" im Dataframe "df" mit der angeblich legalen Syntax df.count zuzugreifen. 

Count wird jedoch als ein Attribut von Pandas-Dataframe-Objekten betrachtet. Die resultierende Namenskollision verursacht den (eher verwirrenden) Fehler.

1
Info5ek

Ich habe den gleichen Fehler in sklearn.model_selection train_test_split, aber in meinem Fall war der Grund, dass ich ein Array bereitgestellt habe, das von spark data frame für die Funktion abgeleitet wurde, und kein Array aus einem Pandas data frame Als ich meine Daten mit der Funktion toPandas () von in pandas= data frame konvertierte und dann Pandas df für train_test_split bereitstellte, war das Problem Fest.

pandas_df=spark_df.toPandas()

error:

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)

fest:

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)
0
Orhan Celik