python Sklearn實現xgboost的二分類和多分類
阿新 • • 發佈:2019-02-07
二分類:
train2.txt的格式如下:
import numpy as np import pandas as pd import sklearn from sklearn.cross_validation import train_test_split,cross_val_score from xgboost.sklearn import XGBClassifier from sklearn.metrics import precision_score,roc_auc_score min_max_scaler = sklearn.preprocessing.MinMaxScaler(feature_range=(-1,1)) resultX = [] resultY = [] with open("./train_data/train2.txt",'r') as rf: train_lines = rf.readlines() for train_line in train_lines: train_line_temp = train_line.split(",") train_line_temp = map(float, train_line_temp) line_x = train_line_temp[1:-1] line_y = train_line_temp[-1] resultX.append(line_x) resultY.append(line_y) X = np.array(resultX) Y = np.array(resultY) X = min_max_scaler.fit_transform(X) X_train,X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.3) xgbc = XGBClassifier() xgbc.fit(X_train,Y_train) pre_test = xgbc.predict(X_test) auc_score =roc_auc_score(Y_test,pre_test) pre_score = precision_score(Y_test,pre_test) print("xgb_auc_score:",auc_score) print("xgb_pre_score:",pre_score)
多分類:有19種分類其中正常0,異常1~18種。資料格式如下:
# -*- coding:utf-8 -*- from sklearn import datasets from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import LinearSVC from sklearn.cross_validation import train_test_split,cross_val_score from sklearn.svm import SVC from sklearn.linear_model import LogisticRegression from xgboost.sklearn import XGBClassifier import sklearn import numpy as np from sklearn.preprocessing import OneHotEncoder from sklearn.metrics import precision_score,roc_auc_score min_max_scaler = sklearn.preprocessing.MinMaxScaler(feature_range=(-1,1)) resultX = [] resultY = [] with open("../train_data/train_multi_class.txt",'r') as rf: train_lines = rf.readlines() for train_line in train_lines: train_line_temp = train_line.split(",") train_line_temp = map(float, train_line_temp) # 轉化為浮點數 line_x = train_line_temp[1:-1] line_y = train_line_temp[-1] resultX.append(line_x) resultY.append(line_y) X = np.array(resultX) Y = np.array(resultY) #fit_transform(partData)對部分資料先擬合fit,找到該part的整體指標,如均值、方差、最大值最小值等等(根據具體轉換的目的),然後對該partData進行轉換transform,從而實現資料的標準化、歸一化等等。。 X = min_max_scaler.fit_transform(X) #通過OneHotEncoder函式將Y值離散化成19維,例如3離散成000000···100 Y = OneHotEncoder(sparse = False).fit_transform(Y.reshape(-1,1)) X_train,X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.2) model = OneVsRestClassifier(XGBClassifier(),n_jobs=2) clf = model.fit(X_train, Y_train) pre_Y = clf.predict(X_test) test_auc2 = roc_auc_score(Y_test,pre_Y)#驗證集上的auc值 print ("xgb_muliclass_auc:",test_auc2)