2017-08-11 3 views
0

Mon compagnon d'équipe, Vous avez un problème
----------------------type d'étiquette inconnue: 'continue'

Avg.SessionLength TimeonApp TimeonWebsite LengthofMembership Yearly Amount Spent 
    0 34.497268 12.655651 39.577668  4.082621     587.951054 
    1 31.926272 11.109461 37.268959  2.664034     392.204933 
    2 33.000915 11.330278 37.110597  4.104543     487.547505 
    3 34.305557 13.717514 36.721283  3.120179     581.852344 
    4 33.330673 12.795189 37.536653  4.446308     599.406092 
    5 33.871038 12.026925 34.476878  5.493507     637.102448 
    6 32.021596 11.366348 36.683776  4.685017     521.572175 

Vous voulez appliquer KNN

X = df[['Avg. Session Length', 'Time on App','Time on Website', 'Length of Membership']] 
y = df['Yearly Amount Spent'] 

from sklearn.model_selection import train_test_split 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, 
random_state=42) 

from sklearn.neighbors import KNeighborsClassifier 
knn = KNeighborsClassifier(n_neighbors=1) 
knn.fit(X_train,y_train) 

ValueError: type d'étiquette inconnue: 'continue'

+0

S'il vous plaît essayez de bloquer le code correctement - vous pouvez utiliser 4 espaces, merci :) –

+2

Quelle ligne jette l'erreur? L'interpréteur Python fournit une trace de pile détaillée, pointant exactement vers la source de l'erreur. Ne laisse pas ça. –

Répondre

2

Les valeurs dans la colonne Yearly Amount Spent sont des nombres réels, donc ils ne peuvent pas servir des étiquettes pour un problème de classification (voir here):

When doing classification in scikit-learn, y is a vector of integers or strings.

Par conséquent, vous obtenez l'erreur. Si vous voulez construire un modèle de classification, vous devez décider comment vous les transformez en un ensemble fini d'étiquettes.

Notez que si vous voulez juste pour éviter l'erreur, vous pouvez faire

import numpy as np 
y = np.asarray(df['Yearly Amount Spent'], dtype="|S6") 

Cela transformera les valeurs en y en chaînes du format requis. Pourtant, chaque étiquette apparaîtra dans un seul échantillon, de sorte que vous ne pouvez pas vraiment construire un modèle significatif avec un tel ensemble d'étiquettes.

0

Je pense que vous essayez réellement de faire une régression plutôt qu'une classification, puisque votre code ressemble à peu près à ce que vous voulez le montant annuel dépensé en nombre. Dans ce cas, utilisez

from sklearn.neighbors import KNeighborsRegressor 
knn = KNeighborsRegressor(n_neighbors=1) 

à la place. Si vous avez vraiment une tâche de classification, par exemple vous voulez classer dans des classes comme ('le montant annuel dépensé est faible', 'le montant annuel dépensé est élevé', ...), vous devez discrétiser les étiquettes et les convertir en chaînes ou nombres entiers (comme expliqué par @Miriam Farber), en fonction des seuils que vous devez définir manuellement dans ce cas.

+0

Hye ml4294, vous avez raison mate, Maintenant, pouvez-vous m'aider s'il vous plaît avec ça. Je veux faire du clustering KNN sur ces données. comment puis-je faire cela, Cheers –

+0

Je ne suis pas vraiment familier avec cela, mais je pense que vous utilisez 'knn.fit (X_train, y_train)' juste comme avant afin d'interpoler la fonction à partir des données fournies, et vous pourriez prédire une valeur pour un 'x' donné en utilisant' prediction = knn.predict (x) 'pour estimer la valeur de ce' x'. Est-ce que cela répond à votre question? – ml4294