随机梯度增强提供了不可预测的结果

los*_*_19 0 python machine-learning scikits scikit-learn

我正在使用用于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%)。知道为什么其性能如此巨大的差距吗?

ogr*_*sel 5

首先,有几点要点:

  • 该算法的名称为Gradient Boosting(回归树或机器),与随机梯度下降没有直接关系

  • 您永远不要在训练数据上评估机器学习算法的准确性,否则您将无法检测到模型的过度拟合。用途:sklearn.cross_validation.train_test_split分裂XyX_trainy_train用于安装和X_testy_test对得分来代替。

现在回答您的问题,GBRT模型确实是非确定性模型。为了获得确定性/可重复的运行,您可以传递random_state=0给伪随机数生成器作为种子(或者传递max_features=None但是不建议这样做)。

但是,您在训练错误中观察到如此大的变化这一事实很奇怪。也许您的输出信号与少量信息功能非常相关,而大多数其他功能仅仅是噪音?

您可以尝试将RandomForestClassifier模型拟合到数据中,并使用计算所得的feature_importance_数组丢弃嘈杂的特征并帮助稳定GBRT模型。