七、集成学习代码二

XGBoost回归
import xgboost as xgb
from xgboost import plot_importance,plot_tree
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt

# 加载数据集
boston = load_boston()
# 获取特征值和目标值
x,y = boston.data, boston.target
# 获取特征名称
feature_name = boston.feature_names

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)

# 参数设置
# 训练算法参数设置
params = {
    # 通用参数
    'booster': 'gbtree', #使用的弱学习器,有两种选择gbtree(默认)和gbliner,gbtree是基于
                        #树模型的提升计算,gbliner是基于线性模型的提升计算
    # 任务参数
    'objective': 'reg:gamma',#回归的损失函数,gamma回归
    # 提升参数
    'gamma': 0.1,#叶子节点进行划分时需要损失函数减少的最小值
    'max_depth': 5,#树的最大深度,缺省值为5,可设置其他值
    'lambda': 3,#正则化权重
    'subsample': 0.7,#训练模型的样本占总样本的比例,用于防止过拟合
    'colsample_bytree': 0.7,#建立树时对特征进行采样的比例
    'min_child_weight': 3,#叶子节点继续划分的最小样本权重和
    'eta': 0.1,#加法模型中使用的收缩步长
    'seed': 1000,#随机数种子
    'nthread':4,
}
plst = params.items()

# 数据集格式转化
dtrain = xgb.DMatrix(x_train, y_train, feature_names = feature_name)
dtest = xgb.DMatrix(x_test, feature_names = feature_name)

# 模型训练
num_rounds = 30
model = xgb.train(plst, dtrain, num_rounds)

# 模型预测
y_pred = model.predict(dtest)

# 显示重要特征
plot_importance(model, importance_type="weight")
plt.show()

# 可视化树的生成情况,num_tree是树的索引
plot_tree(model, num_trees=17)
plt.show()

# 将基学习器输出到txt文件中
model.dump_model('model2.txt')

图片:


QQ截图20200409170505.png
QQ截图20200409170515.png
sklearn-XGBoost回归
import xgboost as xgb
from xgboost import plot_importance,plot_tree
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt

# 加载数据集
boston = load_boston()
# 获取特征值和目标值
x,y = boston.data, boston.target
# 获取特征名称
feature_name = boston.feature_names

# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)

# 模型训练
model = xgb.XGBRFRegressor(max_depth=5, learning_rate=0.1, n_estimators=50, silent=True, objective='reg:gamma')
model.fit(x_train,y_train)

# 模型预测
y_pred = model.predict(x_test)

# 显示重要特征
plot_importance(model)
plt.show()

# 可视化树的生成情况,num_tree是树的索引
plot_tree(model, num_trees=17)
plt.show()
XGBoost分类
import time
import numpy as np
import xgboost as xgb
from xgboost import plot_importance,plot_tree
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_boston
import matplotlib
import matplotlib.pyplot as plt
import os

iris = load_iris()
x,y = iris.data,iris.target
x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=0.2, random_state=1234565)

# 训练算法参数设置
params = {
    # 通用参数
    'booster': 'gbtree', #使用的弱学习器,有两种选择gbtree(默认)和gbliner,gbtree是基于
                        #树模型的提升计算,gbliner是基于线性模型的提升计算
    'ntread': 4,#XGBoost运行时的线程数,缺省时是当前系统获得的最大线程数
    'silent': 0,#0:表示打印运行时的信息,1:表示以缄默方式运行,默认为0
    'num_feature': 4,#boosting过程中使用的特征维数
    'seed': 1000,#随机数种子
    # 任务参数
    'objective': 'multi:softmax',#多分类的softmax,objective用来定义学习任务及相应的损失函数
    'num_class': 3,#类别总数
    # 提升参数
    'gamma': 0.1,#叶子节点进行划分时需要损失函数减少的最小值
    'max_depth': 6,#树的最大深度,缺省值为6,可设置其他值
    'lambda': 2,#正则化权重
    'subsample': 0.7,#训练模型的样本占总样本的比例,用于防止过拟合
    'colsample_bytree': 0.7,#建立树时对特征进行采样的比例
    'min_child_weight': 3,#叶子节点继续划分的最小样本权重和
    'eta': 0.1#加法模型中使用的收缩步长
}
plst = params.items()

# 数据集格式转换
dtrain = xgb.DMatrix(x_train, y_train)
dtest = xgb.DMatrix(x_test)

# 迭代次数,对于分类问题,每个类别的迭代次数,所以,总的基学习器个数 = 迭代次数 * 类别个数
num_rounds = 50
model = xgb.train(plst, dtrain, num_rounds)#xgboost模型训练

# 对测试集进行预测
y_pred = model.predict(dtest)

# 计算准确率
accuracy = accuracy_score(y_test,y_pred)
print("accuracy: %.2f%%" % (accuracy*100.0))

# 显示重要特征
plot_importance(model)
plt.show()

# 可视化树的生成情况,num_tree是树的索引
plot_tree(model, num_trees=5)
plt.show()

# 将基学习器输出到txt文件中
model.dump_model('model.txt')

图片:


QQ截图20200409170800.png
QQ截图20200409170809.png
QQ截图20200409170857.png
sklearn-XGBoost分类
import xgboost as xgb
from xgboost import plot_importance,plot_tree
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

iris = load_iris()
x,y = iris.data,iris.target
feature_name = iris.feature_names
x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=0.2, random_state=3)

# 模型训练
model = xgb.XGBClassifier(max_depth=5, n_estimators=50, silent = True,objective='multi:softmax',feature_names=feature_name)
model.fit(x_train,y_train)
# 预测
y_pred = model.predict(x_test)

# 计算准确率
accuracy = accuracy_score(y_test,y_pred)
print("accuracy: %.2f%%" % (accuracy*100.0))

# 显示重要特征
plot_importance(model)
plt.show()

# 可视化树的生成情况,num_tree是树的索引
plot_tree(model, num_trees=5)
plt.show()

图片:


QQ截图20200409171015.png
QQ截图20200409171023.png
QQ截图20200409171030.png
LightGBM
import datetime
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

# 加载数据集
breast = load_breast_cancer()
# 获取特征值和目标值
x,y = breast.data,breast.target
# 获取特征名称
feature_name = breast.feature_names

# 数据集划分
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0)

# 数据格式转换
lgb_train = lgb.Dataset(x_train,y_train)
lgb_eval = lgb.Dataset(x_test,y_test,reference=lgb_train)

# 参数设置
boost_round = 50#迭代次数
early_stop_rounds = 10#验证数据在early_stop_rounds轮中未提高,则提前停止

params = {
    'boosting_type':'gbdt',#设置提mu'bia'han'shu升类型
    'objective':'regression',#目标函数
    'metric':{'12','auc'},#评估函数
    'num_leaves':31,#叶子节点数
    'learning_rate':0.05,#学习速率
    'feature_fraction':0.9,#建树的特征选择比例
    'bagging_fraction':0.8,#建树的样本采集比例
    'bagging_freq':5,#k意味着每k次迭代执行bagging
    'verbose':1#<0,显示致命的,=0显示错误(警告),>0显示信息
}

# 训练模型,加入提前停止的功能
results = {}
gbm = lgb.train(
    params,
    lgb_train,
    num_boost_round=boost_round,
    valid_sets=(lgb_eval,lgb_train),
    valid_names=('validate','train'),
    early_stopping_rounds=early_stop_rounds,
    evals_result=results
)

# 模型预测
y_pred = gbm.predict(x_test,num_iteration=gbm.best_iteration)
print(y_pred)

lgb.plot_metric(results)
plt.show()

# 绘制重要的特征
lgb.plot_importance(gbm,importance_type='split')
plt.show()

图片:


QQ截图20200409171234.png

QQ截图20200409171226.png
QQ截图20200409171306.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • Boosting 每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的...
    leon_kbl阅读 515评论 0 0
  • 本文主要简要的比较了常用的boosting算法的一些区别,从AdaBoost到LightGBM,包括AdaBoos...
    南宫萧言阅读 1,396评论 0 5
  • 博客园:梯度提升树(GBDT)原理小结博客园:一步一步理解GB、GBDT、xgboost知乎:机器学习算法中GBD...
    闫阿佳阅读 5,049评论 0 5
  • 疏雨乍翻小帘窗 底事伤神 晚风堪惆怅 半缕残香幽梦枕 一宵冷雨花落尘 笛弦素韵凄伤景 梦里泪滋 慵起问前生 问罢生...
    通往天上地下阅读 145评论 0 0
  • 我是一名在校大学生,曾和所有大一刚来的新生一样计划着未来的生活,不挂科和做兼职养自己,最好可以不向家里伸手要钱...
    花开不白阅读 163评论 4 1