gpt4 book ai didi

python-2.7 - Scikit-learn RandomForestClassifier()特征选择,只选择训练集?

转载 作者:行者123 更新时间:2023-11-30 08:44:18 25 4
gpt4 key购买 nike

我正在使用 scikit-learn 进行机器学习。

我有 800 个样本,具有 2048 个特征,因此我想减少特征,以期获得更好的准确性。

这是一个多类问题(0-5类),特征由10 的:[1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0....,0]

我正在使用集成方法,RandomForestClassifier()

我应该只选择训练数据吗?

是否足够如果我使用此代码:

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

clf = RandomForestClassifier( n_estimators = 200,
warm_start = True,
criterion = 'gini',
max_depth = 13
)

clf.fit( X_train, y_train ).transform( X_train )

predicted = clf.predict( X_test )
expected = y_test
confusionMatrix = metrics.confusion_matrix( expected, predicted )

因为准确率没有提高。代码中一切正常还是我做错了什么?

我将非常感谢您的帮助。

最佳答案

我不确定我是否正确理解了您的问题,所以我会回答我认为我理解的内容 =)

首先,减少特征维度(例如从 2048 到 500)可能不会为您提供更好的结果。这完全取决于模型捕捉数据几何形状的能力。例如,如果通过非线性方法减少维度,捕捉特定的几何形状并将其“线性化”,而不是直接在原始数据上使用此线性模型,则可以使用线性模型获得更好的结果。但这是因为您的数据本质上是非线性的,并且线性模型不好,因此在原始空间中捕获这个几何图形(想象一下二维中的圆)。

在您提供的代码中,您没有减少维度,而是将数据拆分为两个数据集(特征维度相同,2048,仅更改了样本数量)。大多数时候,在较小的数据集上进行训练会导致最差的准确性(数据=信息,当你遗漏一些数据时,你就会丢失信息)。但是分割数据可以让你特别测试过度拟合,这是非常重要的。但是,一旦选择了最佳参数(请参阅交叉验证),您应该学习您拥有的所有数据!

鉴于您的 0.7*800=560 个样本,我认为 13 的深度相当大,您可能会过度拟合。如果您想提高准确性,您可能需要首先使用此参数!

关于python-2.7 - Scikit-learn RandomForestClassifier()特征选择,只选择训练集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com