GradientBoostingClassifier(1.11.4.1)
Gradient Boosting for classification,梯度提升分类。
参数:
1、loss : {‘deviance’,‘exponential’}, optional (default=‘deviance’),优化的损失函数,‘deviance’,代表分类的概率输出的偏差。对于‘exponential’损失的梯度上升,还原成AdaBoost算法。
2、learning_rate : float, optional (default=0.1),学习率。学习率通过“learning_rate”来减少每棵树的贡献,需要在learning_rate和n_estimators之间权衡,通常来说learning_rate越小,n_estimators越大。
3、n_estimators : int (default=100),梯度提升的迭代次数,也是弱学习器的数目。梯度提升对于过拟合是相当可靠的,所以一个大的数字通常会带来更好的性能。
4、max_depth : integer, optional (default=3),个体回归估计器的最大深度,最大深度限制了树中节点的数量。调优该参数以获得最佳性能;最好的值取决于输入变量的相互作用。
5、criterion : string, optional (default=”friedman_mse”),衡量分割质量的函数。支持的标准有Friedman的“friedman_mse”即改进分数的均方误差;“mse”均方误差;“mae”平均绝对误差。默认值“friedman_mse”通常是最好的,因为它可以在某些情况下提供更好的近似值。
6、min_samples_split : int, float, optional (default=2),分割一个内部结点所需要的最小样本数。如果是int,则最小值是min_samples_split。如果是float,则最小值是(min_samples_split * n_samples)。
7、min_samples_leaf : int, float, optional (default=1),一个叶子节点所需要的最小样本数。如果是int,则最小值是min_samples_leaf。如果是float,则最小值是(min_samples_leaf * n_samples)。
8、min_weight_fraction_leaf : float, optional (default=0.),一个叶子节点所需要的最小权重占所有权重(全部输入)的分数。当sample_ weight不提供的时候,样本权重相等。取值范围[0.0,0.5]
9、subsample : float, optional (default=1.0),用于拟合独立基学习器的样本的比例。如果比1.0小,将导致随机梯度提升。subsample和n_estimators之间相互作用。选择subsample<1.0,导致了方差减少,偏差增加。
10、max_features : int, float, string or None, optional (default=None),在寻找最佳分割时需要考虑的特性数量:如果是int,每次分割时,都考虑max_features个特征;如果是float,则max_features是百分比,每次分割时考虑int(max_features * n_features) 个特征;如果“auto”,则max_features=sqrt(n_features);如果是“sqrt”,则max_features=sqrt(n_features);如果是“log2”,则max_features= log2(n_features);如果是None则max_features=n_features。
选择max_features < n_features会引起,方差减少,偏差增加。
11、max_leaf_nodes : int or None, optional (default=None),以最佳优先的方式构成max_leaf_nodes个节点的树。最优节点被定义为,不纯度相对低的减少率。如果是None,则不限制叶子结点的数目。
12、min_impurity_split : float,树生成的过程中早期停止的阈值。一个节点的不纯度如果高于阈值,它将会被分裂,否则它就是一个叶子结点。
13、min_impurity_decrease : float, optional (default=0.),如果分裂导致的不纯度减少大于等于这个值,那么一个节点将会被分裂。
加权的不纯度减少的公式如下:
N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)
N是所有的样本数,N_t是当前节点的样本数,N_t_L是左子树的样本数,N_t_R是右子树的样本数。
如果sample_weight被传值,N, N_t, N_t_R and N_t_L也适用于加权和。
14、init : BaseEstimator, None, optional (default=None),一个估计器对象,被用于计算最初的预测值。init提供fit和predict,如果为None,它就调用loss.init_estimator。
15、verbose : int, default: 0,冗长输出。
16、warm_start : bool, default: False,热启动。
17、random_state : int, RandomState instance or None,optional (default = None),随机数种子。
18、presort : bool or ‘auto’, optional (default=’auto’),是否对数据进行预分类,以加快在拟合过程中找到最佳分割的结果。在默认情况下“auto”模式,会在密集的数据集上使用预分类,在稀疏的数据集上使用正常的分类。在稀疏数据集上设置为True为导致错误。
属性:
1、feature_importances_ : array, shape = [n_features],特征重要性,值越大,特征越重要。
2、oob_improvement_ : array, shape = [n_estimators],在包外样本上的损失的提升 (= deviance),和上次迭代有关联。oob_improvement_[0]是初始估计器(init ),第一步的损失提升。
3、train_score_:array,shape=[n_estimators],第i个分数train_score_[i]是模型的偏差(=loss),在包内样本的第i次迭代中。如果subsample == 1,这就是训练数据中的异常值。
4、loss_ : LossFunction,具体的LossFunction对象。
5、init : BaseEstimator,提供初始预测的估计量。通过init或者loss.init_estimator设置。
6、estimators_:ndarray of DecisionTreeRegressor,shape= [n_estimators,loss_.K],子估计器的集合,loss_.K为1则是二分类,否则就是n_classes。
方法:
1、apply(X[, check_input]),返回每个样本所预测的叶子的索引。
2、decision_path(X[, check_input]),返回树中的决策路径。
3、fit(X, y[, sample_weight, check_input, …]),拟合。
4、get_params([deep]),得到参数。
5、predict(X[, check_input]),预测。
6、predict_log_proba(X),预测输入样本X的对数概率。
7、predict_proba(X[, check_input]),预测输入样本X的概率。
8、score(X, y[, sample_weight]),返回给定测试数据和标签的平均精度。
9、set_params(**params),设置参数。
10、staged_decision_function(X),计算每次迭代的X的决策函数。
11、staged_predict(X),在每个阶段对X的类别进行预测。
12、staged_predict_proba(X),预测X的每个阶段的类概率。
实验数据是手写数字识别的数据。在调参的过程中:
1、learning_rate的修改会对acc有较大的影响,默认0.1,这里使用了默认值。
2、n_estimators是弱学习器的数量,值越大,时间越长,默认100,在一定范围内,增大这个数据会提升正确率,但是到一定程度以后再增大数据,对正确率的提升影响不大,还会使得运行时间很长。
3、subsample是基学习器的样本比例,在一定范围内值的增加会提升正确率,但是超过这个阈值之后又会有所下降。总体来说对正确率的影响不大。
4、criterion,有三种评价指标,还是friedman_mse的效果最好,note里面也提到了,保持默认。
5、min_samples_split,修改数值对acc的影响不大,较小的值效果较好,请保持默认值。
6、min_samples_leaf,同上。
7、min_weight_fraction_leaf,[0.0,0.5],值越小,正确率越高,请保持默认。
8、max_depth,修改数值对acc影响不大,请保持默认值。
9、min_impurity_decrease,较小的值,效果较好,但总体变化不大,请保持默认值。
10、min_impurity_split,这个参数会在0.21版本中被删除,由min_impurity_decrease代替,实际上这两个参数的意义差不多,变化规律也差不多,请保持默认值。
11、max_feature,可以这样调节,先使用None,“auto”,“log2”,“sqrt”,看一下哪个最大,取值为多少,比如,我的属性值为65个,选择sqrt时的正确率最高,因此sqrt(65)约为8,尝试8和9以及sqrt相对比哪个最大。结果9时正确率最高。
12、max_leaf_nodes,默认None是不限制,在一定范围内,随着参数取值的增大,acc会变大,到达某一取值时,acc的结果开始在几个取值之间震荡,然后到达最大值,紧接着会过拟合,值会略微减小,过拟合之后的acc值就不变了。选择None时,可以找到最大值,因此请保持默认。
13、warm_start和presort都请保持默认值。