#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:
РЕДАКТИРОВАТЬ: я переработал свой ответ, так как обнаружил несколько проблем. Пожалуйста, скопируйте и вставьте приведенный ниже код, чтобы убедиться, что ошибок не осталось.
Проблемы —
- Вы используете
DecisionTreeClassifier
вместоDecisionTreeRegressor
для задачи регрессии. - Вы удаляете
nans
после выполнения разделения тестовой последовательности, что приведет к искажению количества выборок. Выполнитеdata.dropna()
перед разделением. - Вы
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)