# -*- 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
机器学习笔记04梯度提升树(GBDT)调参
最新推荐文章于 2024-02-10 17:05:02 发布