Я получаю 100% точность для своего дерева решений. Что я делаю не так?
Это мой код:
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
источник
источник
Ответы:
Ваш тестовый образец является подмножеством вашего тренировочного образца:
Это означает, что вы оцениваете свою модель на части ваших данных обучения, т.е. вы проводите оценку в выборке. Точность в выборке является общеизвестно плохим показателем точности вне выборки, а максимальная точность в выборке может привести к переоснащению. Следовательно, всегда следует оценивать модель на истинной выборке, которая полностью независима от данных обучения.
Убедитесь, что ваши тренировки и ваши данные тестирования не пересекаются, например,
источник
sklearn.model_selection.train_test_split
как предлагает Хуан Игнасио Гил, так как это также перетасовывает наборы и позволяет избежать проблем, если набор данных не является случайным при упорядочении. Это также более понятно, потому что показывает намерение и автоматически обрабатывает изменения в размере набора данных.GridSearchCV
с данными тренировок, для точности тестирования я получаю 100%KNeighborsClassifier
. Я использовалtest_train_split
для разделения набора данных. Что я мог сделать не так здесь?Вы получаете 100% -ную точность, потому что вы используете часть данных обучения для тестирования. Во время обучения дерево решений получило знания об этих данных, и теперь, если вы дадите те же данные, чтобы предсказать, они дадут точно такое же значение. Вот почему дерево решений каждый раз дает правильные результаты.
Для любой проблемы машинного обучения, обучающий и тестовый набор данных должны быть разделены. Точность модели можно определить только тогда, когда мы рассмотрим, как она прогнозирует неизвестные значения.
источник
Как говорили другие пользователи, вы используете в качестве тестового набора подмножество набора поездов, и дерево решений очень подвержено переобучению.
У вас почти было это, когда вы импортировали
Но тогда вы не используете функцию. Вы должны были сделать:
чтобы получить случайный поезд и тестовые наборы
источник
Как указали @Stephan Kolassa и @Sanjay Chandlekar, это связано с тем, что ваш тестовый образец является подмножеством вашего тренировочного образца.
Однако для выбора этих выборок случайная выборка будет более подходящей, чтобы гарантировать, что обе выборки являются репрезентативными. В зависимости от вашей структуры данных, вы также можете рассмотреть стратифицированную случайную выборку.
Я не свободно владею Python, но любое статистическое программное обеспечение должно разрешать случайную выборку; некоторые подсказки также доступны на SO .
источник
Просто хочу вмешаться в интуицию о том, почему вам нужно явно разделить обучение и тестировать образцы.
Это называется переоснащением, потому что этот процесс разделения крайне маловероятен для прогнозирования точек данных, которые имеют отношение к вашей проблеме, но которые вы еще не наблюдали .
Конечно, весь смысл создания этих платформ прогнозирования заключается в создании инструментов, которые можно применять к никогда ранее не замеченным данным; Разделение данных, которые мы имеем, на тренировочные и тестовые образцы - это попытка смоделировать это ослепление и защитить наши модели от переоснащения вышеуказанным способом.
источник
Вам не нужна 100% точность, чтобы получить переоснащение. С достаточным количеством сегментов вы можете получить невоспроизводимые результаты (что-то, что выглядело бы ужасно вне выборки).
Смотрите эту выдержку из ланцета, описывающую метод нарезки образца на ведра, которые слишком хороши. Мюнхгаузен Статистическая Сетки Она также является основой для XKCD мультфильма Значимого
Достижение 100% точности - это всего лишь короткий шаг от поиска классификатора, который работает обманчиво хорошо.
источник