Получение 100% точности в моей модели дерева решений

#python #pandas #machine-learning #scikit-learn #decision-tree

#python #панды #машинное обучение #scikit-learn #дерево решений

Вопрос:

Вот мой код, и он всегда возвращает 100% точность, независимо от того, насколько велик размер теста. Я использовал метод train_test_split, поэтому я не считаю, что должны быть какие-либо дубликаты данных. Может ли кто-нибудь проверить мой код?

 from sklearn.tree import DecisionTreeClassifier
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


data = pd.read_csv('housing.csv')

prices = data['median_house_value']
features = data.drop(['median_house_value', 'ocean_proximity'], axis = 1)

prices.shape
(20640,)

features.shape
(20640, 8)


X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=42)

X_train = X_train.dropna()
y_train = y_train.dropna()
X_test = X_test.dropna()
y_test = X_test.dropna()

model = DecisionTreeClassifier()
model.fit(X_train, y_train)

y_train.shape
(16512,)

X_train.shape
(16512, 8)


predictions = model.predict(X_test)
score = model.score(y_test, predictions)
score 
 

Комментарии:

1. Что вы подразумеваете под «независимо от того, насколько велик размер теста»? Я сомневаюсь, что если вы установите размер теста, скажем, на 90% данных, модель все равно даст вам 100% точность. Более того, получение 100% точности для простого набора данных не так уж и важно. Меня беспокоит то, почему вы используете Decision tree classifier вместо Decision tree regressor классификации цен на жилье. Возможно, это ваш ответ.

2. Почему DecisionTreeClassifier() ? Разве это не проблема регрессии?

3. Пожалуйста, обратите внимание, что это не переоснащение. Переобучение — это когда ваша точность обучения довольно высока, но точность проверки сравнительно намного ниже. Это признак того, что ваша модель очень хорошо подходит для ваших обучающих данных, но не обобщает невидимые данные.

Ответ №1:

РЕДАКТИРОВАТЬ: я переработал свой ответ, так как обнаружил несколько проблем. Пожалуйста, скопируйте и вставьте приведенный ниже код, чтобы убедиться, что ошибок не осталось.

Проблемы —

  1. Вы используете DecisionTreeClassifier вместо DecisionTreeRegressor для задачи регрессии.
  2. Вы удаляете nans после выполнения разделения тестовой последовательности, что приведет к искажению количества выборок. Выполните data.dropna() перед разделением.
  3. Вы model.score(X_test, y_test) неправильно используете его, передавая (X_test, predictions) . Пожалуйста, используйте accuracy_score(X_test, predictions) с этими параметрами вместо этого или исправьте синтаксис.
 from sklearn.tree import DecisionTreeRegressor #<---- FIRST ISSUE
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


data = pd.read_csv('housing.csv')

data = data.dropna() #<--- SECOND ISSUE

prices = data['median_house_value']
features = data.drop(['median_house_value', 'ocean_proximity'], axis = 1)

X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=42)

model = DecisionTreeRegressor()
model.fit(X_train, y_train)

predictions = model.predict(X_test)
score = accuracy_score(y_test, predictions) #<----- THIRD ISSUE
score
 

Комментарии:

1. Это все равно возвращает 100% точность

2. Не могли бы вы изменить размер тестовых данных на 0,9 и рассказать мне, что происходит?

3. Он по-прежнему возвращает 100% точность с тестовыми данными 0.9.

4. Неважно, я нашел вашу проблему. Пожалуйста, проверьте инструкцию model.score. вы используете его неправильно. Проверьте мой обновленный комментарий. Дайте мне знать, если это исправит это.

5. Он возвращает ошибку значения: y_true и y_pred имеют разное количество выходных данных (8! = 1)