防止随机森林回归量数据泄漏的建议

问题描述 投票:1回答:1

我目前的准确度和f1测量值均为1.00。我怀疑这是数据泄漏的结果。

我正在寻找尽可能减少数据泄漏的技巧。

谢谢。

贝娄是我的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
python pandas dataframe scikit-learn random-forest
1个回答
1
投票

数据泄漏的来源:https://machinelearningmastery.com/data-leakage-machine-learning/

如果不是完全无效的预测模型,数据泄漏可能会导致您创建过于乐观。

假设这是一个真实的数据集,1.0的分类分数是不切实际的。因此,数据泄漏在这里似乎是合理的解释。

上面的来源提出了两种防止数据泄漏的通用技术:

  1. 在交叉验证折叠中执行数据准备。
  2. 阻止验证数据集,以便对您开发的模型进行最终的健全性检查。

这些都是很好的建议。我想补充一点:

  1. 了解你的数据!

查看数据,考虑数据,然后再次查看。然后从不同的角度看。如果可能,请在文本编辑器中打开它。打印数据框。绘制数据。做任何你能想到的事情来感受它。问自己以下问题:

  • 有重复的行吗?你不想要重复。它们完全违背了交叉验证和保留集的目的。
  • 有重复的列吗?有些算法不喜欢共线变量,并且您不希望目标变量潜入特征变量。
  • 这些功能中是否有任何信息不应该存在?例如,如果今天你预测明天会下雨,那么今天就不应该有关于明天的信息。
  • 行不是独立的吗?要么
  • 数据是否在组内具有相关性?如果是,请确保每个组都在测试集或列车集中,但从不在两者中。 Scikit-learn具有相应的功能,例如GroupKFold。组可以以许多奇怪的方式输入数据集;例子是重复测量,改变测量装置/方法,测量时间或空间接近,......

一旦您确定数据正常,请验证您的处理:

  • 随机地移动包含目标变量的列。尽可能早地在处理链中执行此操作(即修改.csv文件,或者在构建列后立即执行此操作)。确保只对该列进行洗牌。

我亲切地称之为垃圾测试。它将数据变成几乎有意义的垃圾。如果模型仍然给出“好”结果,那就去寻找代码或概念中的错误。

© www.soinside.com 2019 - 2024. All rights reserved.