首页 > 编程知识 正文

scikit-learn中文社区,scikitlearn怎么读

时间:2023-05-04 01:57:55 阅读:135156 作者:3288

在梯度提升树(GBDT )原理的文章中介绍了GBDT的原理。 本文介绍了GBDT算法类库在scikit-learn中的使用与协调。

在33558www.Sina.com/scikit-learn中,GBDT类库包含GradientBoostingClassifier和GradientBoostingRegressor。 其中gradientboostingclasssor是gradientbooostingclassssor。这些参数完全相同,但某些参数(如损失函数loss )的选择不同。 我们把重要参数分为两类,第一类是Boosting框架的重要参数,第二类是弱学习器CART回归决策树的重要参数。 本节介绍了这些参数的使用和参数的调整。 介绍33558www.Sina.com/Boosting框架的重要参数。 GradientBoostingClassifier和GradientBoostingRegressor的大多数参数相同,但在下表中有详细说明。 参数gradientboostingclassifiergradientboostingregressorn _ estimators弱学习器的最大迭代次数或最大弱学习器数。 通常,n_estimators太小,难以拟合,而n_estimators太大,容易拟合过度,因此通常需要选择合适的值。 默认值为50。 在实际的参数调整中,经常与参数learning_rate一起考虑。 learning_rate弱学习器的权重削减系数是在原来的强学习器的反复式上加上正则化项后得到的。 的取值范围为01。 对于同一个训练集拟合效果,小意味着需要更多的弱学习器迭代次数。 通常,算法的拟合效果由步长和迭代最大次数决定。 因此,参数n_estimators和learning_rate必须一起调整参数。 一般来说,可以从小开始调参,其默认值为1。 subsample在梯度提升树(GBDT )原理文中正则化一章所述的子采样比例取(0,1 )的值。 与随机林不同,此处的子采样不同,随机林使用无再生采样,此处使用无再生采样。 值为1表示使用了所有采样,且未使用子采样。 值小于1时,仅一部分样本适合GBDT的决策树。 如果选择小于1的值,则会减少方差,可以防止过度拟合,但会增加样本拟合的偏差,因此请不要将值设定得太低。 建议在[ 0.5,0.8 ]之间选择。 init初始化的弱学习器在梯度提升树(GBDT )原理文中,如果不输入则利用训练集样本进行样本集的初始化分类回归预测,否则利用init参数提供的学习器进行初始化分类回归预测。 一般来说,在我们对数据有先验知识时,或者以前进行过拟合时使用。 否则,就不需要考虑这个参数了。 lossGradientBoostingClassifier类的损失函数有两个选项:对数似然损失函数' deviance '和指数损失函数' exponential '。 默认值为对数似然损失函数“deviance”。 一般而言,建议使用默认对数似然损失函数“deviance”。 这对二元分类和多元分类都有很好的优化效果。 指数损失函数' exponential '相当于运行了Adaboost算法。 GradientBoostingRegressor类的损失函数包括均方误差损失函数“ls”、绝对损失函数“lad”、Huber损失函数“Huber”和分位数损失函数“quantile”。 默认值为平均方差损失函数' ls '。 通常,在数据的噪声点较少的情况下,可使用缺省均方误差损失函数’ls’。 噪声点较多时,建议使用抗干扰能力强的Huber损失函数' Huber '。 如果需要逐步预测训练集,建议使用分数损失函数' quantile '。 alphagradientboostingclassifier类没有此参数。 如果使用Huber损失函数' Huber '和分位数损失函数' quantile ',则必须指定分位数的值。 默认值为0.9。 如果有很多噪波点,可以适当降低此参数的值。1. scikit-learn GBDT类库概述接下来介绍GradientBoostingClassifier和GradientBoostingRegressor的弱学习器参数。 因为GBDT使用CART回归决策树作为弱学习器,所以其参数基本上来自决策树类,也就是决策树类

在scikit-learn(sklearn )决策树算法类库的介绍文章中,详细介绍了这两个类的参数。 在此,让我强调其中需要注意的几个最重要的参数。 1 )分割时考虑的最大特征数max_features :可以使用多种类型的值。 缺省值为“None”,表示分割时考虑所有特征数。 对于“log2”,“sqrt”或“auto”表示在划分时最多考虑log2 (以2为底的n的对数)个特征;对于整数,“sqrt”或“auto”表示考虑到n的平方根个特征进行划分浮点数时,表示考虑特征数的百分比,即考虑以(百分比xN )整形的特征数。 其中n是每个样本的总特征数。 一般来说,在样本特征数不多的情况下,例如小于50时,使用标记

认值"None"就可以了,如果特征数非常多,则可以灵活地使用上述其它取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。   2) 决策树的最大深度max_depth:默认可以不输入,如果不输入,则不会限制决策树的深度。一般来说,数据少或者特征少的时候可以不用管这个值。如果训练集样本量大,特征多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取10-100之间。   3) 内部节点再划分所需最小样本数min_samples_split:这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会再进行划分,默认值是2。如果样本量不大,不需要管这个值;如果样本数量级非常大,则推荐增大这个值。   4) 叶子节点最少样本数min_samples_leaf:这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于该值,则会和兄弟节点一起被剪枝。 默认值是1,可以输入最少样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本数量级非常大,则推荐增大这个值。   5) 叶子节点最小的样本权重和min_weight_fraction_leaf:这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认值是0,就是不考虑样本权重。一般来说,如果较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要考虑这个参数了。   6) 最大叶子节点数max_leaf_nodes:通过限制最大叶子节点数,可以防止过拟合,默认值是"None",即不限制最大的叶子节点数。如果增加了限制,算法会创建在最大叶子节点数内最优的决策树。如果特征不多,可以不用考虑这个值,但是如果特征多的话,需要加以限制,具体的值可以通过交叉验证得到。   7) 节点划分最小不纯度min_impurity_split:这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,均方差)小于这个阈值,则该节点不再生成子节点,也就是说,该节点将成为叶子节点 。一般不推荐改动默认值1e-7。   4. 使用Mnist数据集测试scikit-learn的GradientBoostingClassifier 代码如下所示: --------------------------------------------------------------------------------------------------- from sklearn.ensemble import GradientBoostingClassifier from sklearn.model_selection import GridSearchCV from sklearn.metrics import accuracy_score from time import time import numpy as np import mnist import roc   if __name__ == "__main__":    # 读取Mnist数据集, 测试GBDT的分类模型    mnistSet = mnist.loadLecunMnistSet()    train_X, train_Y, test_X, test_Y = mnistSet[0], mnistSet[1], mnistSet[2], mnistSet[3]      m, n = np.shape(train_X)    idx = range(m)    np.random.shuffle(idx)      print "n**********测试GradientBoostingClassifier类**********"    t = time()    model = GradientBoostingClassifier(max_features=90, max_depth=40, min_samples_split=8, min_samples_leaf=3,                                 n_estimators=1200, learning_rate=0.05, subsample=0.95)    # 拟合训练数据集    model.fit(train_X, train_Y)    # 预测训练集    train_Y_hat = model.predict(train_X[idx])    print "训练集精确度: ", accuracy_score(train_Y[idx], train_Y_hat)    # 预测测试集    test_Y_hat = model.predict(test_X)    print "测试集精确度: ", accuracy_score(test_Y, test_Y_hat)    print "总耗时:", time() - t, "秒"    # 绘制ROC曲线    n_class = len(np.unique(train_Y))    roc.drawROC(n_class, test_Y, test_Y_hat) ---------------------------------------------------------------------------------------------------   5. 使用CCPP数据集测试scikit-learn的GradientBoostingRegressor 代码如下所示: --------------------------------------------------------------------------------------------------- from sklearn.ensemble import GradientBoostingRegressor from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error from time import time import numpy as np import pandas as pd   if __name__ == "__main__":    # 读取CCPP数据集, 测试GBDT的回归模型    data = pd.read_excel("data/CCPP/Folds5x2_pp.xlsx")    # AT:温度, V:压力, AP:湿度, RH:压强, PE:输出电力    # 样本特征X    X = data[['AT', 'V', 'AP', 'RH']]    # 数据归一化    X = StandardScaler().fit_transform(X)    # 样本输出Y    Y = data[['PE']]    # 划分训练集和测试集,将数据集的70%划入训练集,30%划入测试集    train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.3, random_state=1)      m, n = np.shape(train_X)    idx = range(m)    np.random.shuffle(idx)      print "n**********测试GradientBoostingRegressor类**********"    t = time()    model = GradientBoostingRegressor(learning_rate=0.1, n_estimators=1500, max_depth=5, min_samples_split=9,                                min_samples_leaf=2, subsample=0.95)    # 拟合训练数据集    model.fit(train_X, train_Y.values.ravel())    # 预测测试集    test_Y_pred = model.predict(test_X)    print "测试集MSE:", mean_squared_error(test_Y, test_Y_pred)    print "测试集RMSE:", np.sqrt(mean_squared_error(test_Y, test_Y_pred))    print "总耗时:", time() - t, "秒" ---------------------------------------------------------------------------------------------------   代码:https://github.com/haidawyl/Mnist/blob/master/gbdt.py 参考:http://www.cnblogs.com/pinard/p/6143927.html 来源: http://blog.sina.com.cn/s/blog_62970c250102xg5j.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。