gpt4 book ai didi

machine-learning - scikit-learn RandomForestClassifier 产生 'unexpected' 结果

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

我正在尝试使用 sk-learn 的 RandomForestClassifier 进行二元分类任务(正例和负例)。我的训练数据包含 1.177.245 个示例,具有 40 个特征,采用 SVM-light 格式(稀疏向量),我使用 sklearn.dataset 的 load_svmlight_file 加载这些数据。它生成一个“特征值”稀疏矩阵 (1.177.245 * 40) 和一个“目标类”数组(1 和 0,其中 1.177.245)。我不知道这是否令人担忧,但训练数据有 3552 个正值,其余均为负值。

由于 sk-learn 的 RFC 不接受稀疏矩阵,因此我使用 .toarray() 将稀疏矩阵转换为密集数组(如果我说得对吗?缺少的特征有很多 0)。我在转换为数组之前和之后打印了矩阵,看起来一切顺利。

当我启动分类器并开始将其拟合到数据时,需要很长时间:

[Parallel(n_jobs=40)]: Done   1 out of  40 | elapsed: 24.7min remaining: 963.3min
[Parallel(n_jobs=40)]: Done 40 out of 40 | elapsed: 27.2min finished

(这个输出对吗?这 963 分钟大约需要 2 分半......)

然后我使用 joblib.dump 转储它。当我重新加载它时:

RandomForestClassifier: RandomForestClassifier(bootstrap=True, compute_importances=True,
criterion=gini, max_depth=None, max_features=auto,
min_density=0.1, min_samples_leaf=1, min_samples_split=1,
n_estimators=1500, n_jobs=40, oob_score=False,
random_state=<mtrand.RandomState object at 0x2b2d076fa300>,
verbose=1)

并在真实的训练数据(由 750.709 个示例组成,与训练数据的格式完全相同)上进行测试,我得到了“意外”结果。准确地说;测试数据中只有一个示例被分类为 true。当我对一半的初始训练数据进行训练并对另一半进行测试时,我根本没有得到任何积极结果。

现在我没有理由相信正在发生的事情有什么问题,只是我得到了奇怪的结果,而且我认为这一切都完成得非常快。可能无法进行比较,但使用 rt-rank 对相同数据训练 RFClassifier(同样进行 1500 次迭代,但使用一半的核心)需要超过 12 个小时......

谁能告诉我我是否有理由相信某些东西没有按预期方式工作?难道是训练数据中正例与负例的比率吗?干杯。

最佳答案

事实上,这个数据集非常非常不平衡。我建议您对负面示例进行二次采样(例如,随机选择其中的 n_positive_samples)或对正面示例进行过采样(后者更昂贵,但可能会产生更好的模型)。

此外,您确定您的所有特征都是数字特征(较大的值在现实生活中意味着某些东西)?如果其中一些是分类整数标记,则这些特征应该分解为 k 之一 bool 编码,而不是因为随机森林的 scikit-learn 实现无法直接处理分类数据。

关于machine-learning - scikit-learn RandomForestClassifier 产生 'unexpected' 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12358965/

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