我是靠谱客的博主 背后糖豆,这篇文章主要介绍xgboost 案例分析,现在分享给大家,希望可以做个参考。

xgboost 使用Dmatrix格式 转换

复制代码
1
2
3
4
5
6
安装xghoost包:pip install xgboost -i https://pypi.tuna.tsinghua.edu.cn/simple import numpy as np import pandas as pd import pickle #pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上 import xgboost as xgb from sklearn.model_selection import train_test_split
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#皮马印第安人糖尿病数据集 包含很多字段:怀孕次数 口服葡萄糖耐量试验中血浆葡萄糖浓度 舒张压(mm Hg) 三头肌组织褶厚度(mm)  #2小时血清胰岛素(μU/ ml) 体重指数(kg/(身高(m)^2) 糖尿病系统功能 年龄(岁) # 基本例子,从csv文件中读取数据,做二分类 # 用pandas读入数据 data = pd.read_csv('pima-indians-diabetes.csv') ''' Pregnancies:怀孕次数 Glucose:葡萄糖 BloodPressure:血压 (mm Hg) SkinThickness:皮层厚度 (mm) Insulin:胰岛素 2小时血清胰岛素(mu U / ml BMI:体重指数 (体重/身高)^2 DiabetesPedigreeFunction:糖尿病谱系功能 Age:年龄 (岁) Outcome:类标变量 (0或1) ''' data.head()
 PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
061487235033.60.627501
11856629026.60.351310
28183640023.30.672321
318966239428.10.167210
40137403516843.12.288331
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
data.info() #没有缺失值 ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 768 entries, 0 to 767 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Pregnancies 768 non-null int64 1 Glucose 768 non-null int64 2 BloodPressure 768 non-null int64 3 SkinThickness 768 non-null int64 4 Insulin 768 non-null int64 5 BMI 768 non-null float64 6 DiabetesPedigreeFunction 768 non-null float64 7 Age 768 non-null int64 8 Outcome 768 non-null int64 dtypes: float64(2), int64(7) memory usage: 54.1 KB '''
复制代码
1
data.describe()
 PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
count768.000000768.000000768.000000768.000000768.000000768.000000768.000000768.000000768.000000
mean3.845052120.89453169.10546920.53645879.79947931.9925780.47187633.2408850.348958
std3.36957831.97261819.35580715.952218115.2440027.8841600.33132911.7602320.476951
min0.0000000.0000000.0000000.0000000.0000000.0000000.07800021.0000000.000000
25%1.00000099.00000062.0000000.0000000.00000027.3000000.24375024.0000000.000000
50%3.000000117.00000072.00000023.00000030.50000032.0000000.37250029.0000000.000000
75%6.000000140.25000080.00000032.000000127.25000036.6000000.62625041.0000001.000000
max17.000000199.000000122.00000099.000000846.00000067.1000002.42000081.0000001.000000
复制代码
1
data.groupby(['Outcome']).count()
 PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAge
Outcome        
0500500500500500500500500
1268268268268268268268268
复制代码
1
data.corr()
 PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
Pregnancies1.0000000.1294590.141282-0.081672-0.0735350.017683-0.0335230.5443410.221898
Glucose0.1294591.0000000.1525900.0573280.3313570.2210710.1373370.2635140.466581
BloodPressure0.1412820.1525901.0000000.2073710.0889330.2818050.0412650.2395280.065068
SkinThickness-0.0816720.0573280.2073711.0000000.4367830.3925730.183928-0.1139700.074752
Insulin-0.0735350.3313570.0889330.4367831.0000000.1978590.185071-0.0421630.130548
BMI0.0176830.2210710.2818050.3925730.1978591.0000000.1406470.0362420.292695
DiabetesPedigreeFunction-0.0335230.1373370.0412650.1839280.1850710.1406471.0000000.0335610.173844
Age0.5443410.2635140.239528-0.113970-0.0421630.0362420.0335611.0000000.238356
Outcome0.2218980.4665810.0650680.0747520.1305480.2926950.1738440.2383561.000000
复制代码
1
2
# 做数据切分 train,test = train_test_split(data) #把数据划分成训练集和测试集
复制代码
1
2
3
4
5
6
7
8
9
10
11
#转换成Dmatrix格式。是Xgboost特有的 # 特征列 feature_columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age'] #目标列 target_column = 'Outcome' xgtrain = xgb.DMatrix(train[feature_columns].values,train[target_column].values) #训练集 xgtest = xgb.DMatrix(test[feature_columns].values,test[target_column].values) #测试集 #Xgboost自带的读取格式DMatrix() #XGBoost可以加载libsvm格式的文本数据,加载的数据格式可以为Numpy的二维数组和XGBoost的二进制的缓存文件。 #加载的数据存储在对象DMatrix中。
复制代码
1
2
3
4
5
6
7
#参数设定 param = {'max_depth':5, #树最大深度 'eta':0.1, #学习率 'silent':1, # 训练的过程中是否打印训练的信息 'subsample':0.7, # 行采样百分比 'colsample_bytree':0.7, # 列采样 'objective':'binary:logistic' } # 用logistic逻辑回归做分类器
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#设定watchlist 用于查看模型状态 watchlist = [(xgtest,'eval'),(xgtrain,'train')] bst = xgb.train(param,xgtrain,10,watchlist) #参数设定,训练集数据,10次,查看状态 # 使用模型预测 preds = bst.predict(xgtest) ''' [0] eval-logloss:0.66464 train-logloss:0.65518 [1] eval-logloss:0.64236 train-logloss:0.62582 [2] eval-logloss:0.62212 train-logloss:0.60128 [3] eval-logloss:0.60074 train-logloss:0.57535 [4] eval-logloss:0.58476 train-logloss:0.55096 [5] eval-logloss:0.56853 train-logloss:0.53070 [6] eval-logloss:0.55099 train-logloss:0.50928 [7] eval-logloss:0.54226 train-logloss:0.49490 [8] eval-logloss:0.53426 train-logloss:0.47898 [9] eval-logloss:0.52509 train-logloss:0.46670 '''
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
# 判断准确率 labels = xgtest.get_label() #预测的标签要和正确的做对比 print ('错误类为%f' % #preds[i]>0.5 做为预测为1的阈值 (sum(1 for i in range(len(preds)) if int(preds[i]>0.5)!=labels[i]) /float(len(preds))) # 模型存储 bst.save_model('1.model') 错误类为0.21354166666666666

 

使用xgboost的sklearn包

Joblib是一组用于在Python中提供轻量级流水线的工具。特点:·透明的磁盘缓存功能和懒惰的重新评估(memoize模式)·简单的并行计算

Joblib可以将模型保存到磁盘并可在必要时重新运行

复制代码
1
2
3
4
5
6
7
8
import warnings warnings.filterwarnings("ignore") import numpy as np import pandas as pd import pickle import xgboost as xgb from sklearn.model_selection import train_test_split import joblib
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 用pandas读入数据 data = pd.read_csv('Pima-Indians-Diabetes.csv') # 做数据切分 train, test = train_test_split(data) # 取出特征X和目标y的部分 feature_columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age'] target_column = 'Outcome' train_X = train[feature_columns].values train_y = train[target_column].values test_X = test[feature_columns].values test_y = test[target_column].values # 初始化模型 xgb_classifier = xgb.XGBClassifier(n_estimators=20, max_depth=4, learning_rate=0.1, subsample=0.7, colsample_bytree=0.7) # 拟合模型 xgb_classifier.fit(train_X, train_y) # 使用模型预测 preds = xgb_classifier.predict(test_X) # 判断准确率 print ('错误类为%f' %((preds!=test_y).sum()/float(test_y.shape[0]))) #错误类为0.270833 # 模型存储 #joblib.dump(xgb_classifier, '2.model')

XGBoost 和GBDT 区别

  • 相同点: 基本原理都是一样的

    • xgboost 也是串行训练 一棵树一棵树训练

    • 特征的处理是并行的

  • 对比GBDT优点

    • 训练速度快

    • 支持自定义损失函数

    • 传统的GBDT是以CART树作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑回归(分类问题)或者线性回归(回归问题),泛化能力更强

    • 可以调节的参数更多

最后

以上就是背后糖豆最近收集整理的关于xgboost 案例分析的全部内容,更多相关xgboost内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部