机器学习笔记04梯度提升树(GBDT)调参

# -*- coding: utf-8 -*-

'''
数据: train_modified
'''

'''
scikit-learn 梯度提升树(GBDT)算法类库
GBDT分类类: GradientBoostingClassifier; GBDT回归类: GradientBoostingRegressor

GBDT类库boosting框架参数
(1)n_estimators(最大的弱学习器个数/弱学习器最大迭代次数): 100(默认)
(2)learning_rate(每个弱学习器的权重缩减系数v, 步长): 1(默认)
        n_estimators与 learning_rate一起调参,共同决定算法的拟合效果
(3)subsample(子采样,不放回抽样):1(默认,即不使用子采样,建议取0,5~0.8)
(4)loss(损失函数)
    分类模型GradientBoostingClassifier: 1.对数似然损失函数(deviance) 默认
                                        2.指数损失函数(exponential) 等同于AdaBoosting
                                        
    回归模型GradientBoostingRegressor:  1.均方差(ls) 默认
                                        2.绝对损失(lad)
                                        3.Huber损失(huber)
                                        4.分位数损失(quantile)

决策树参数:
(1)criterion(特征选择标准):
        分类决策树DecisionTreeClassifier:'gini'(,默认,基尼系数,即CART算法), 备选'entropy'(熵,ID3/C4.5)
        回归决策树DecisionTreeRegressor: 'mse'(默认, 均方误差), 'mae'(和均值之差的绝对值之差)
(2)max_features(划分时考虑的最大特征数): 
        'None'( 默认,划分时考虑所有的特征数,特征数 < 50,建议采用默认的'None')
        'log2'(划分时最多考虑log2N个特征)
        'sqrt'/'auto'(划分时最多考虑N开根号个特征)
        'int'(考虑的特征的绝对数)
        'float'(考虑的特征百分比,即百分比*N取整后的特征数)
(3)max_depth(决策树的最大深度):
        不输入(默认, 决策树在建立时不会限制子树的深度)
        10~100(模型样本量多, 特征多)
(4)min_samples_split(内部节点再划分所需最小样本数):
        限制子树继续划分的条件,如果某节点的样本数<min_samples_split,则不会继续选取最优特征来进行划分
        2(默认,样本量小,建议采用默认值2,样本量数量级非常大,建议增大此值)
(5)min_samples_leaf(叶子节点最小样本数):
        限制叶子节点最少的样本数,如果某叶子节点数少于样本数,则会和兄弟节点一起被剪枝
        1(默认,样本量小,建议采用默认值1,样本量数量级非常大,建议增大此值)
'''

import os
import pandas as pd
import numpy as np

#读取数据
os.chdir(r'F:\python_data_mining\train_modified')
data = pd.read_csv('train_modified.csv')
data = data.drop(['ID'], axis=1)
print('数据预览: \n{}'.format(data.head()))

X = data.iloc[:, 1:]
y = data.iloc[:, 0]

print('目标变量y的样本分布: \n{}'.format(y.value_counts()))
print('=================================')

# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=12345)
# 建立梯度提升树模型GBDT
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV
import sklearn.metrics as metrics
gbc = GradientBoostingClassifier(random_state=12345)

gbc.fit(X_train, y_train)
pred_test = gbc.predict(X_test)
proba_test = gbc.predict_proba(X_test)[:, 1]
# 计算accuracy和AUC
print('GBDT模型参数无调优时:')
print('accuracy = {}'.format(metrics.accur
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值