Je reçois une précision de 100% pour mon arbre de décision. Qu'est-ce que je fais mal?
Ceci est mon code:
import pandas as pd
import json
import numpy as np
import sklearn
import matplotlib.pyplot as plt
data = np.loadtxt("/Users/Nadjla/Downloads/allInteractionsnum.csv", delimiter=',')
x = data[0:14]
y = data[-1]
from sklearn.cross_validation import train_test_split
x_train = x[0:2635]
x_test = x[0:658]
y_train = y[0:2635]
y_test = y[0:658]
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(x_train.astype(int), y_train.astype(int))
from sklearn.metrics import accuracy_score
y_predicted = tree.predict(x_test.astype(int))
accuracy_score(y_test.astype(int), y_predicted)
machine-learning
python
cart
accuracy
Nadjla
la source
la source
Réponses:
Votre échantillon de test est un sous - ensemble de votre échantillon de formation:
Cela signifie que vous évaluez votre modèle sur une partie de vos données de formation, c'est-à-dire que vous effectuez une évaluation intra-échantillon. La précision intra-échantillon est un indicateur notoirement médiocre de la précision hors échantillon, et maximiser la précision intra-échantillon peut conduire à un surajustement. Par conséquent, il faut toujours évaluer un modèle sur un échantillon réel réel complètement indépendant des données d'apprentissage.
Assurez-vous que votre entraînement et vos données de test sont disjoints, par exemple:
la source
sklearn.model_selection.train_test_split
comme le suggère Juan Ignacio Gil, dans la mesure où cela mélange également les ensembles et évite les problèmes si le jeu de données n’est pas aléatoire. C'est aussi plus clair car cela montre l'intention et gère automatiquement les changements dans la taille du jeu de données.GridSearchCV
des données d'entraînement, je vérifie à 100% l'exactitude des testsKNeighborsClassifier
. J'ai utilisétest_train_split
pour scinder le jeu de données. Qu'est-ce que j'aurais pu faire de mal ici?Vous obtenez une précision de 100% parce que vous utilisez une partie des données d'entraînement pour les tests. Au moment de la formation, l’arbre décisionnel a acquis la connaissance de ces données, et si vous donnez les mêmes données pour les prédire, elles donneront exactement la même valeur. C'est pourquoi l'arbre de décision produit des résultats corrects à chaque fois.
Pour tout problème d’apprentissage automatique, les ensembles de données de formation et d’essai doivent être séparés. La précision du modèle ne peut être déterminée que lorsque nous examinons comment il prévoit des valeurs inconnues.
la source
Comme d'autres utilisateurs vous l'ont dit, vous utilisez comme ensemble de test un sous-ensemble de trains et un arbre de décision est très sujet aux surajustements.
Vous avez presque eu quand vous avez importé
Mais alors vous n'utilisez pas la fonction. Vous auriez dû faire:
obtenir des ensembles de tests et de trains aléatoires
la source
Comme l'ont souligné @Stephan Kolassa et @Sanjay Chandlekar, cela est dû au fait que votre échantillon de test est un sous-ensemble de votre échantillon de formation.
Cependant, pour la sélection de ces échantillons, un échantillonnage aléatoire serait plus approprié pour s'assurer que les deux échantillons sont représentatifs. En fonction de la structure de vos données, vous pouvez également envisager un échantillonnage aléatoire stratifié.
Je ne parle pas couramment Python, mais tout logiciel statistique devrait permettre un échantillonnage aléatoire. Quelques astuces sont également disponibles sur SO .
la source
Je veux juste expliquer l' intuition de la raison pour laquelle vous avez besoin de scinder la formation et de tester les échantillons de manière explicite.
C'est ce qu'on appelle l'overfitting, car il est extrêmement peu probable que ce processus de scission prédit des points de données pertinents pour votre problème, mais que vous n'avez pas encore observés .
Bien entendu, l’intérêt de la construction de ces plates-formes de prévision est de créer des outils pouvant être appliqués à des données inédites; Fractionner les données dont nous disposons en échantillons d’entraînement et d’essai est une tentative de simulation de cet aveuglement automatique et de prévention de la sur-adaptation de nos modèles.
la source
Vous n'avez pas besoin de 100% de précision pour suréquiper. Avec suffisamment de seaux, vous pouvez obtenir des résultats non reproductibles (quelque chose qui pourrait sembler terrible en dehors de l'échantillon).
Voir cet article extrait du Lancet, décrivant la méthode de découpage d’un échantillon en seaux beaucoup trop fins. Grille statistique de Munchausen Il est également la base pour le dessin animé XKCD important
Atteindre une précision de 100% n’est qu’à un pas de la recherche d’un classificateur qui fonctionne faussement bien.
la source