Рекомендации по предотвращению утечки данных в Random Forest Regressor - PullRequest
1 голос
/ 25 апреля 2019

В настоящее время я получаю 1,00 для точности и измерения f1.Я подозреваю, что это происходит из-за утечки данных.

Я ищу любые советы, чтобы максимально уменьшить утечку данных.

Спасибо.

НижеМой скрипт на python:

import pandas as pd  
import numpy as np  
# Other imports here
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
dataset = pd.read_csv("weather.csv")  

print(len(dataset))

dataset = pd.get_dummies(dataset, columns=["Date", "Location", "WindGustDir", "WindDir9am", "WindDir3pm",])

dataset["RainToday"] = dataset["RainToday"].map({'Yes': 1, 'No': 0})
dataset["RainTomorrow"] = dataset["RainTomorrow"].map({'Yes': 1, 'No': 0})

dataset.dropna(inplace=True)

dataset = dataset.rename_axis(None)

X = dataset.drop('RainTomorrow', axis=1)

y = dataset['RainTomorrow']

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.20, random_state=216037514)

classifier = RandomForestRegressor(n_estimators = 200, random_state = 216037514)
classifier.fit(X_train,y_train)

y_pred = classifier.predict(X_test)

print("Report:\n", classification_report(y_test,y_pred))
print("Accuracy:  ", accuracy_score(y_test,y_pred))

Текущие результаты:

142193
Report:
               precision    recall  f1-score   support

           0       1.00      1.00      1.00      9026
           1       1.00      1.00      1.00      2592

   micro avg       1.00      1.00      1.00     11618
   macro avg       1.00      1.00      1.00     11618
weighted avg       1.00      1.00      1.00     11618

Accuracy:   1.0

1 Ответ

1 голос
/ 25 апреля 2019

Источник утечки данных: https://machinelearningmastery.com/data-leakage-machine-learning/

Утечка данных может привести к созданию чрезмерно оптимистичных, если не полностью неверных прогностических моделей.

Предполагая, что это реальный набор данных, баллы классификации 1.0 довольно нереалистичны. Таким образом, утечка данных представляется правдоподобным объяснением здесь.

Приведенный выше источник предлагает два основных метода защиты от утечки данных:

  1. Выполните подготовку данных в рамках ваших перекрестных проверок.
  2. Сохраните набор проверочных данных для окончательной проверки работоспособности ваших разработанных моделей.

Это хорошие предложения. Я хотел бы добавить третье:

  1. Знай свои данные!

Посмотрите на данные, подумайте о данных, затем посмотрите на них снова. Тогда посмотрите под другим углом. Если возможно, откройте его в текстовом редакторе. Распечатайте фрейм данных. График данных. Делайте все, что можете, чтобы почувствовать это. Задайте себе следующие вопросы:

  • Есть ли повторяющиеся строки? Вам не нужны дубликаты. Они полностью побеждают цели перекрестной проверки и удержания наборов.
  • Есть ли повторяющиеся столбцы? Некоторые алгоритмы не любят коллинеарные переменные, и вы не хотите, чтобы ваша целевая переменная проникла в переменные функции.
  • Есть ли в функциях какая-либо информация, которой не должно быть причинно? Например, если сегодня вы прогнозируете завтрашний дождь, то не должно быть никакой информации о завтрашнем дне, которая недоступна сегодня.
  • Строки не являются независимыми? или
  • Имеют ли данные корреляции внутри групп? Если да, убедитесь, что каждая группа находится либо в наборе испытаний, либо в наборе поездов, но никогда в обоих. Для этого в Scikit-learn предусмотрены такие функции, как GroupKFold. Группы могут вводить набор данных многими странными способами; примерами являются повторные измерения, измененные измерительные приборы / методы, измерения, близкие по времени или пространству, ...

Если вы уверены, что данные в порядке, подтвердите обработку:

  • Произвольно перемешивают столбцы, содержащие целевую переменную. Сделайте это как можно раньше в цепочке обработки (то есть измените файл .csv или сделайте это, как только будет построен столбец). Убедитесь, что только этот столбец перетасован.

Я ласково называю это мусорным тестом. Это превращает данные в мусор, что почти имеет смысл. Если модель все еще дает «хорошие» результаты, ищите ошибку в коде или концепции.

...