我目前的精度和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
答案 0 :(得分:1)
数据泄漏源:https://machinelearningmastery.com/data-leakage-machine-learning/
如果不是完全无效的预测模型,数据泄漏会导致您过于乐观。
假设这是一个真实的数据集,则分类得分为1.0相当不现实。因此,这里的数据泄漏似乎是一个合理的解释。
以上来源提出了两种防止数据泄漏的通用技术:
- 在交叉验证折叠内执行数据准备。
- 保留验证数据集,以对开发的模型进行最终完整性检查。
这些是很好的建议。我想添加第三个:
查看数据,考虑数据,然后再次查看。然后从另一个角度看。如果可能,请在文本编辑器中将其打开。打印数据框。绘制数据。做任何您想得到的感受。问自己以下问题:
GroupKFold
。小组可以以许多奇怪的方式输入数据集。例如重复测量,更改的测量设备/方法,在时间或空间上闭合的测量,... 确定数据正确后,即可验证您的处理
我亲切地称其为垃圾测试。它将数据变成垃圾,这几乎是有道理的。如果模型仍然给出“良好”的结果,那就去寻找代码或概念中的错误。