설치
더 나은 수 없습니다에 직접 설치 가능
PIP xgboost 설치
로컬 설치 후 다운로드 할 수없는 경우
설치 패키지를 다운로드 여기에 패키지가 무엇을 원하는
데이터 집합
PIMA - 인디언 - diabetes.csv 파일
인도의 조사 자료에 당뇨병을 가진 일부 사람들은, 최종 결과는 아픈 여부를 예측하는 것입니다
# 시간 임신 1. 번호 # 2, 혈당치 경구 당부 하 시험에서 2시간 # 3. 확장기 혈압 (mmHg에서) # 4 삼두근 피부 두께 (mm)를 접어 # 5 2 시간 혈청 인슐린 (MU U / ㎖) # 6 체질량 지수 (kg의 체중 / (m 높이) ^ 2) # 7 당뇨병 유래 함수 # 8 연령 (세) # 9 클래스 변수 (0 또는 1)
팔 개 기능 변수의 전체뿐만 아니라 분류 라벨
Xgboost 사용
사용 기본 프레임 워크
발 NumPy와 오기 loadtxt 에서 xgboost 오기 XGBClassifier 에서 sklearn.model_selection 오기 train_test_split 에서 sklearn.metrics 오기 accuracy_score # 다운로드 데이터 세트를 데이터 세트 loadtxt = ( ' 피마 인디언 - diabetes.csv ' , DELIMITER = ' , ' ) #의 분할 기능 태그 X 데이터 집합 = : 0 :. 8 ] 은 Y = 데이터 세트 [:. 8 ] #에 슬라이싱 트레이닝 세트 테스트 세트 . SEED 7 = test_size = 0.33 X_train, X_test, y_train, y_test = train_test_split (X, Y, test_size = test_size, random_state = 시드) # 模型创建训练 모델 = XGBClassifier () model.fit (X_train, y_train) # 预测模型 y_pred = model.predict (X_test) 예측 [라운드 (I) = 대한 I 에서 y_pred] # 精度计算 정확도 = accuracy_score (y_test, 예측) 인쇄 ( " 정확도 % .2f %% " % (정확도 * 100))
정확도 : 77.95 %
프로세스 쇼의 중앙
Xgboost 원리는 나무를 추가하여 모델의 리프팅을 달성하기 위해 나무에 기반
다음과 같이 작동 할 수 업그레이드 프로세스의 중간에보고 싶다면
발 NumPy와 오기 loadtxt 에서 xgboost 오기 XGBClassifier 에서 sklearn.model_selection 오기 train_test_split 에서 sklearn.metrics 오기 accuracy_score # 다운로드 데이터 세트를 데이터 세트 loadtxt = ( ' 피마 인디언 - diabetes.csv ' , DELIMITER = ' , ' ) #의 분할 기능 태그 X 데이터 집합 = : 0 :. 8 ] 은 Y = 데이터 세트 [:. 8 ] #에 슬라이싱 트레이닝 세트 테스트 세트 . SEED 7 = test_size = 0.33 X_train, X_test, y_train, android.permission.FACTOR. = Train_test_split (X 방향은 Y-, test_size = test_size, random_state = 시드) #의 모델 생성 훈련 모델 = XGBClassifier () eval_set = [(X_test, android.permission.FACTOR.)] Model.fit (X_train, y_train, #의 패스 훈련 데이터 early_stopping_rounds = 10, # 횟수가 잃어버린 가치 하락에없는 모델 중지 eval_metric = ' logloss ' , # 손실 평가 기준 eval_set = eval_set, # 테스트를 실시하는 것 가입하지 않은 테스트 세트를 구성을 = TRUE 자세한 # 자세한 데이터가 중간에 인쇄 표시 여부 ) #의 예측 모델 y_pred =을model.predict (X_test) 예측 [라운드 (I) = 대한 I 에서 y_pred] # 精度计算 정확도 = accuracy_score (y_test, 예측) 인쇄 ( " 정확도 % .2f %% " % (정확도 * 100))
변경 프로세스 손실 값을 반영합니다 인쇄 중
[0] validation_0 - logloss는 : 0.660186는 validation_0 때까지 훈련 것인가 -logloss hasn ' t은 10 라운드에서 개선되었다. [1] validation_0-logloss : 0.634854 [ 2] validation_0-logloss : 0.61224 [ 3] validation_0-logloss : 0.593118 [ 4] validation_0-logloss : 0.578303 [ 5] validation_0-logloss : 0.564942 [ 6] validation_0-logloss : 0.555113 [ 7 ] validation_0-logloss : 0.54499 [ 8] validation_0-logloss : 0.539151 [ 9] validation_0-logloss : 0.531819 [ 10] validation_0-logloss : 0.526065 [ 11] validation_0-logloss : 0.519769 [ 12] validation_0-logloss : 0.514979 [ 13] validation_0-logloss : 0.50927 [ 14] validation_0-logloss : 0.506086 [ 15] validation_0-logloss : 0.503565 [ 16] validation_0-logloss : 0.503591 [ 17] validation_0-logloss : 0.500805 [ 18 ] validation_0-logloss : 0.497605 [ 19] validation_0-logloss : 0.495328 [ 20] validation_0-logloss : 0.494777 [ 21] validation_0-logloss : 0.494274 [ 22] validation_0-logloss : 0.493333 [ 23] validation_0-logloss은 : 0.492211 [ 24] validation_0 -logloss : 0.491936 [25] validation_0-logloss : 0.490578 [ 26] validation_0-logloss : 0.490895 [ 27] validation_0-logloss : 0.490646 [ 28] validation_0-logloss : 0.491911 [ 29] validation_0-logloss : 0.491407 [ 30] validation_0-logloss : 0.488828 [ 31] validation_0-logloss : 0.487867 [ 32] validation_0-logloss : 0.487297 [ 33] validation_0-logloss : 0.487562 [ 34] validation_0-logloss : 0.487789 [ 35] validation_0-logloss : 0.487962 [ 36] validation_0-logloss은 : 0.488218 [ 37] validation_0- logloss : 0.489582 [38] validation_0-logloss : 0.489334 [ 39] validation_0-logloss : 0.490968 [ 40] validation_0-logloss : 0.48978 [ 41] validation_0-logloss : 0.490704 [ 42] validation_0-logloss : 0.492369 중지 중. 베스트 반복 : [ 32] validation_0-logloss : 0.487297 정확도 : 77.56 %
기능의 중요성을 보여
발 NumPy와 오기 loadtxt 에서 xgboost 오기 XGBClassifier 에서 xgboost 오기 plot_importance 행 하기 matplotlib 오기 pyplot # 다운로드 데이터 세트를 데이터 세트 = loadtxt ( ' 피마 인디언 - diabetes.csv ' , DELIMITER = ' , ' ) #의 분할 기능 태그 X = 데이터 세트 [: 0 : 8 ] Y- = 데이터 세트 [: 8 ] #의 모델 생성하는 트레이닝 모델 = XGBClassifier () model.fit (X 방향은 Y-) #의 쇼의 중요성을 갖추고 plot_importance (모델) pyplot.show ()
参数调节
Xgboost 有很多的参数可以调节
常见参数
学习率
learning rate 一般设置在 0.1 以下
tree 相关参数
max_depth 最大深度
min_child_weight 最小叶子权重
subsample 随机选择比例
colsample_bytree 速记特征比例
gamma 损失率相关的一个参数
正则化参数
lambda
alpha
其他参数示例
更详细的的参数可以参考官方文档
xgb1 = XGBClassifier( learning_rate= 0.1, n_estimators=1000, max_depth=5, min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8, objective='binary:logistic', # 指定出是用什么损失函数, 一阶导还是二阶导 nthread=4, # scale_pos_weight=1, seed=27 # 随机种子 )
参数选择示例
from numpy import loadtxt from xgboost import XGBClassifier from sklearn.model_selection import GridSearchCV from sklearn.model_selection import StratifiedKFold # 下载数据集 datasets = loadtxt('pima-indians-diabetes.csv', delimiter=',') # 切分 特征 标签 X = datasets[:,0:8] Y = datasets[:,8] # 模型创建 训练 model = XGBClassifier() # 学习率备选数据 learning_rate = [0.0001, 0.001, 0.01, 0.1, 0.2, 0.3] param_grid = dict(learning_rate=learning_rate) # 格式要求转换为字典格式 # 交叉验证 kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7) # 训练模型最佳学习率选择 grid_serarch = GridSearchCV(model, param_grid, scoring='neg_log_loss', n_jobs=-1, # 当前所有 cpu 都跑这个事 cv=kfold) grid_serarch = grid_serarch.fit(X, Y) # 打印结果 print("Best: %f using %s" % (grid_serarch.best_score_, grid_serarch.best_params_)) means = grid_serarch.cv_results_['mean_test_score'] params = grid_serarch.cv_results_['params'] for mean, param in zip(means, params): print("%f with: %r" % (mean, param))
打印结果
Best: -0.483304 using {'learning_rate': 0.1} -0.689811 with: {'learning_rate': 0.0001} -0.661827 with: {'learning_rate': 0.001} -0.531155 with: {'learning_rate': 0.01} -0.483304 with: {'learning_rate': 0.1} -0.515642 with: {'learning_rate': 0.2} -0.554158 with: {'learning_rate': 0.3}