Je ne sais pas comment réparer. Toute aide apprécie beaucoup. J'ai vu thi Vectorisation: collection non valide mais je ne suis pas sûr de l'avoir comprise
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)
erreur ci-dessous:
----> 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.
____
Je ne sais pas comment réparer. Toute aide apprécie beaucoup. J'ai vu thi Vectorisation: collection non valide mais je ne suis pas sûr de l'avoir comprise
Cette erreur survient parce que votre fonction train
masque votre variable train
et qu'elle est donc transmise à elle-même.
Explication:
Vous définissez un train variable comme ceci:
train = df1.iloc[:,[4,6]]
Après quelques lignes, vous définissez un train de méthodes comme ceci:
def train(classifier, X, y):
Donc, ce qui se passe réellement, c'est que votre version précédente de train
est mise à jour avec la nouvelle version. Cela signifie que la variable train
ne pointe pas maintenant vers l'objet Dataframe comme vous le souhaitez, mais pointe vers la fonction que vous avez définie. Dans l'erreur, il est effacé.
array(<function train at 0x7f3a311320d0>, dtype=object)
Voir le train de fonctions à l'intérieur de la déclaration d'erreur.
Solution:
Renommez l'un d'eux (la variable ou la méthode). Suggestion: renommez la fonction en utilisant un autre nom tel que training
ou training_func
ou quelque chose du genre.
J'ai eu la même erreur dans un autre contexte (sklearn train_test_split
) et la raison était simplement que j'avais passé un argument de position en tant qu'argument mot-clé, ce qui avait entraîné une mauvaise interprétation de la fonction appelée.
Une variante de la première réponse - une autre raison pour laquelle vous pourriez l'obtenir est si un nom de colonne dans vos données est identique à un attribut/une méthode de l'objet contenant les données.
Dans mon cas, j'essayais d'accéder à la colonne "count" dans le dataframe "df" avec la syntaxe apparemment légale df.count.
Cependant, le compte est considéré comme un attribut des objets de la base de données pandas. La collision de noms résultante crée l'erreur (plutôt confuse).