随机森林分类器在测试集上给出了非常高的准确度——过度拟合?

数据挖掘 分类
2021-10-06 04:09:02

我有一个财务数据集,我试图根据美元金额、一天中的什么时间以及他们是买入还是卖出(货币对)来预测公司类型。它看起来像这样:

我用来预测的特征:

X.head():

Dollars   | Hours      | Buy | Sell
-0.761916   0.364838     1     0
-0.924413   0.377558     1     0
-0.573336   0.397836     0     1
-0.561639   0.399144     0     1
-1.164036   0.423715     1     0

我想预测的特征可能如下所示:

y.head()
Bank  Tech  Fund  Holding  Defence  Financial Services  Pharma 
1     0     0     0        0        0                   0   
1     0     0     0        0        0                   0   
1     0     0     0        0        0                   0   
1     0     0     0        0        0                   0   
1     0     0     0        0        0                   0   

Agriculture  Commodities  Energi  Pension  
0            0            0       0  
0            0            0       0  
0            0            0       0  
0            0            0       0  
0            0            0       0  

在这个片段中,前五家公司是银行。

使用 0.25 的训练/测试比率,我得到 0.99 的准确度,这似乎好得令人难以置信:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

rand_forest = RandomForestClassifier(max_depth = None, random_state = 0)

rand_forest.fit(X,y)

predictions = rand_forest.predict(X_test)

结果classification_report

         precision    recall  f1-score   support

      0       0.98      0.95      0.97      5074
      1       0.98      0.91      0.94      2292
      2       0.98      0.82      0.89       572
      3       0.99      0.83      0.90       235
      4       0.98      0.91      0.94       261
      5       0.99      0.81      0.89       411
      6       0.98      0.83      0.90       239
      7       1.00      0.70      0.82       144
      8       1.00      0.81      0.89       384
      9       0.99      0.81      0.89       200
     10       1.00      0.81      0.90       232

avg / total   0.98      0.90      0.94     10044

调整max_depth分类器的参数虽然会显着改变这个数字,但我仍在阅读该参数的实际后果。

值得一提的是,这个数据集中只有 50,000 个条目,跨越 11 种不同的公司类型,这可能太少了?

使用更简单DecisionTreeClassifier的方法可以产生大约 50% 的准确度。

更新:

我使用整个数据集进行训练,而不是实际的训练集。切换这两个输出可以得到 54% 的准确率,这听起来要好得多(或者更真实)。

1个回答

rand_forest.fit(X,y)

为什么要使用整个数据集进行训练?您正在使用测试集进行训练,然后再次评估其性能?

在您的代码中,我没有看到您实际使用了您创建的训练集。