【问题标题】:Stochastic Gradient Boosting giving unpredictable results随机梯度提升产生不可预测的结果
【发布时间】:2013-05-10 21:27:40
【问题描述】:
我正在使用 Python 的 Scikit 模块来实现随机梯度提升。我的数据集有 2700 个实例和 1700 个特征 (x),并且包含二进制数据。我的输出向量是“y”,包含 0 或 1(二进制分类)。我的代码是,
gb = GradientBoostingClassifier(n_estimators=1000,learn_rate=1,subsample=0.5)
gb.fit(x,y)
print gb.score(x,y)
运行一次,准确度为 1.0 (100%),有时准确度约为 0.46 (46%)。知道为什么它的性能差距如此之大吗?
【问题讨论】:
标签:
python
machine-learning
scikit-learn
scikits
【解决方案2】:
先说两句:
现在回答您的问题,GBRT 模型确实是非确定性模型。要获得确定性/可重现的运行,您可以传递 random_state=0 为伪随机数生成器提供种子(或者传递 max_features=None,但不建议这样做)。
您观察到训练误差如此大的变化这一事实很奇怪。如果您的输出信号与极少数的信息特征非常相关,并且大多数其他特征只是噪声,那么也许您的输出信号只是噪声?
您可以尝试将 RandomForestClassifier 模型拟合到您的数据中,并使用计算出的 feature_importance_ 数组来丢弃噪声特征并帮助稳定您的 GBRT 模型。