python机器学习库xgboost的使用
1.数据读取
利用原生xgboost库读取libsvm数据
importxgboostasxgb data=xgb.DMatrix(libsvm文件)
使用sklearn读取libsvm数据
fromsklearn.datasetsimportload_svmlight_file X_train,y_train=load_svmlight_file(libsvm文件)
使用pandas读取完数据后在转化为标准形式
2.模型训练过程
1.未调参基线模型
使用xgboost原生库进行训练
importxgboostasxgb fromsklearn.metricsimportaccuracy_score dtrain=xgb.DMatrix(f_train,label=l_train) dtest=xgb.DMatrix(f_test,label=l_test) param={'max_depth':2,'eta':1,'silent':0,'objective':'binary:logistic'} num_round=2 bst=xgb.train(param,dtrain,num_round) train_preds=bst.predict(dtrain) train_predictions=[round(value)forvalueintrain_preds]#进行四舍五入的操作--变成0.1(算是设定阈值的符号函数) train_accuracy=accuracy_score(l_train,train_predictions)#使用sklearn进行比较正确率 print("TrainAccuary:%.2f%%"%(train_accuracy*100.0)) fromxgboostimportplot_importance#显示特征重要性 plot_importance(bst)#打印重要程度结果。 pyplot.show()
使用XGBClassifier进行训练
#未设定早停止,未进行矩阵变换 fromxgboostimportXGBClassifier fromsklearn.datasetsimportload_svmlight_file#用于直接读取svmlight文件形式,否则就需要使用xgboost.DMatrix(文件名)来读取这种格式的文件 fromsklearn.metricsimportaccuracy_score frommatplotlibimportpyplot num_round=100 bst1=XGBClassifier(max_depth=2,learning_rate=1,n_estimators=num_round,#弱分类树太少的话取不到更多的特征重要性 silent=True,objective='binary:logistic') bst1.fit(f_train,l_train) train_preds=bst1.predict(f_train) train_accuracy=accuracy_score(l_train,train_preds) print("TrainAccuary:%.2f%%"%(train_accuracy*100.0)) preds=bst1.predict(f_test) test_accuracy=accuracy_score(l_test,preds) print("TestAccuracy:%.2f%%"%(test_accuracy*100.0)) fromxgboostimportplot_importance#显示特征重要性 plot_importance(bst1)#打印重要程度结果。 pyplot.show()
2.两种交叉验证方式
使用cross_val_score进行交叉验证
#利用model_selection进行交叉训练 fromxgboostimportXGBClassifier fromsklearn.model_selectionimportStratifiedKFold fromsklearn.model_selectionimportcross_val_score fromsklearn.metricsimportaccuracy_score frommatplotlibimportpyplot param={'max_depth':2,'eta':1,'silent':0,'objective':'binary:logistic'} num_round=100 bst2=XGBClassifier(max_depth=2,learning_rate=0.1,n_estimators=num_round,silent=True,objective='binary:logistic') bst2.fit(f_train,l_train) kfold=StratifiedKFold(n_splits=10,random_state=7) results=cross_val_score(bst2,f_train,l_train,cv=kfold)#对数据进行十折交叉验证--9份训练,一份测试 print(results) print("CVAccuracy:%.2f%%(%.2f%%)"%(results.mean()*100,results.std()*100)) fromxgboostimportplot_importance#显示特征重要性 plot_importance(bst2)#打印重要程度结果。 pyplot.show()
使用GridSearchCV进行网格搜索
#使用sklearn中提供的网格搜索进行测试--找出最好参数,并作为默认训练参数 fromxgboostimportXGBClassifier fromsklearn.model_selectionimportGridSearchCV fromsklearn.metricsimportaccuracy_score frommatplotlibimportpyplot params={'max_depth':2,'eta':0.1,'silent':0,'objective':'binary:logistic'} bst=XGBClassifier(max_depth=2,learning_rate=0.1,silent=True,objective='binary:logistic') param_test={ 'n_estimators':range(1,51,1) } clf=GridSearchCV(estimator=bst,param_grid=param_test,scoring='accuracy',cv=5)#5折交叉验证 clf.fit(f_train,l_train)#默认使用最优的参数 preds=clf.predict(f_test) test_accuracy=accuracy_score(l_test,preds) print("TestAccuracyofgridsearchcv:%.2f%%"%(test_accuracy*100.0)) clf.cv_results_,clf.best_params_,clf.best_score_
3.早停止调参–early_stopping_rounds(查看的是损失是否变化)
#进行提早停止的单独实例 importxgboostasxgb fromxgboostimportXGBClassifier fromsklearn.metricsimportaccuracy_score frommatplotlibimportpyplot param={'max_depth':2,'eta':1,'silent':0,'objective':'binary:logistic'} num_round=100 bst=XGBClassifier(max_depth=2,learning_rate=0.1,n_estimators=num_round,silent=True,objective='binary:logistic') eval_set=[(f_test,l_test)] bst.fit(f_train,l_train,early_stopping_rounds=10,eval_metric="error",eval_set=eval_set,verbose=True)#early_stopping_rounds--当多少次的效果差不多时停止eval_set--用于显示损失率的数据verbose--显示错误率的变化过程 #makeprediction preds=bst.predict(f_test) test_accuracy=accuracy_score(l_test,preds) print("TestAccuracy:%.2f%%"%(test_accuracy*100.0))
4.多数据观察训练损失
#多参数顺 importxgboostasxgb fromxgboostimportXGBClassifier fromsklearn.metricsimportaccuracy_score frommatplotlibimportpyplot num_round=100 bst=XGBClassifier(max_depth=2,learning_rate=0.1,n_estimators=num_round,silent=True,objective='binary:logistic') eval_set=[(f_train,l_train),(f_test,l_test)] bst.fit(f_train,l_train,eval_metric=["error","logloss"],eval_set=eval_set,verbose=True) #makeprediction preds=bst.predict(f_test) test_accuracy=accuracy_score(l_test,preds) print("TestAccuracy:%.2f%%"%(test_accuracy*100.0))
5.模型保存与读取
#模型保存 bst.save_model('demo.model') #模型读取与预测 modelfile='demo.model' #1 bst=xgb.Booster({'nthread':8},model_file=modelfile) #2 f_test1=xgb.DMatrix(f_test)#尽量使用xgboost的自己的数据矩阵 ypred1=bst.predict(f_test1) train_predictions=[round(value)forvalueinypred1] test_accuracy1=accuracy_score(l_test,train_predictions) print("TestAccuracy:%.2f%%"%(test_accuracy1*100.0))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。