我有一个财务数据集,我试图根据美元金额、一天中的什么时间以及他们是买入还是卖出(货币对)来预测公司类型。它看起来像这样:
我用来预测的特征:
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% 的准确率,这听起来要好得多(或者更真实)。