기계 학습 - 알고리즘 예 - Xgboost

설치

 더 나은 수 없습니다에 직접 설치 가능

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}

 

 

 

추천

출처www.cnblogs.com/shijieli/p/11958815.html