1

J'ai obtenu mon featuresets comme un dictionnaire contenant des éléments sous la forme:Comment implémenter des ensembles de fonctions de validation croisée et de classeur aléatoire de forêt en tant que dictionnaires?

({0: 0.48447204968944096, 
    1: 0.035093167701863354, 
    2: 0.07453416149068323, 
    3: 0.046583850931677016, 
    4: 0.0, 
    5: 0.09316770186335403, 
    ... 
    162: 1, 
    163: 1.0}, 'male') 

Lorsque je tente la mise en œuvre du cross_val_score ou cross_val_predict de la bibliothèque sklearn, il en résulte toujours montrant une erreur en disant

" les valeurs flottantes ne peuvent pas être dictées ".

Est-ce que quelqu'un pourrait m'aider à implémenter la validation croisée à l'aide de SVC linéaire et d'un classificateur Random-Forest en Python?

Je l'avais essayé avant:

train_set, test_set = featuresets[1:1628], featuresets[1630:3257] 
np.asarray(train_set) 
np.asarray(test_set) 
clf = SVC(kernel='linear', C=5) 
predicted = cross_val_predict(clf, train_set, test_set, cv=10) 
metrics.accuracy_score(test_set, predicted) 

Aussi, je ne reçois pas comment implémenter la validation croisée kfold ici.

+0

convertir vos données en tableaux numpy, c'est tout – lejlot

+0

Les données que vous avez montré ci-dessus est un tuple avec deux éléments: d'abord dict et l'autre est une chaîne. Est-ce que la chaîne est votre variable cible, que vous voulez prédire? Votre utilisation de 'cross_val_predict' est également incorrecte. –

+0

De quel type est 'featuresets'? – Tonechas

Répondre

1

Laissez-nous d'abord importer les modules nécessaires:

import numpy as np 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.model_selection import cross_val_score 

Vous devez créer une instance d'un classificateur forestier au hasard comme ceci:

clf = RandomForestClassifier() 

Ensuite, vous devez charger featuresets (Je ne t avoir ces données afin que je ne pouvais pas tester mon code) et convertir votre variable catégorique en un numérique, par exemple à travers un dictionnaire:

featuresets = # your code here 
gender = {'male': 0, 'female': 1} 

L'étape suivante consiste à mémoriser les caractéristiques et les étiquettes sous forme de tableaux numpy:

X = np.asarray([[i[1] for i in sorted(d.items())] for d, _ in featuresets]) 
y = np.asarray([gender[s] for _, s in featuresets]) 

Maintenant, vous êtes prêt à estimer la précision d'un classificateur forestier au hasard sur votre ensemble de données en divisant les données, adaptation d'un modèle et le calcul du score de 10 fois consécutives (avec différentes divisions chaque fois):

scores = cross_val_score(clf, X, y, cv=10) 
print('Scores =', scores) 

Si vous exécutez les extraits ci-dessus, vous devriez obtenir une liste de 10 partitions imprimées.

+0

Qu'en est-il du classificateur Random Forest? Cela fonctionnerait-il de cette façon? –

+0

J'ai modifié ma réponse pour mieux répondre à votre question – Tonechas

+0

Oui, cela fonctionne. Merci beaucoup pour votre temps et vos efforts :) –