1. 程式人生 > >python Sklearn實現xgboost的二分類和多分類

python Sklearn實現xgboost的二分類和多分類

二分類:

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)