xgboost官方給的二分類問題的例子是區別蘑菇有無毒,資料集和**都可以在xgboost中的demo資料夾對應找到,我是用的anaconda安裝的xgboost,實現起來比較容易。唯一的梗就是在終端中執行所給命令: ../../xgboost mushroom.conf 時會報錯,是路徑設定的問題,所以我乾脆把xgboost資料夾下的xgboost.exe拷到了mushroom.conf配置檔案所在資料夾下,這樣直接定位到該資料夾下就可以執行: xgboost mushroom.conf。二分類資料預處理,也就是data wraggling部分的**有一定的借鑑意義,值得一看。
[python]view plain
copy
#! /usr/bin/python
import
numpy as np
import
xgboost as xgb
# label need to be 0 to num_class -1
# if col 33 is '?' let it be 1 else 0, col 34 substract 1
data = np.loadtxt('./dermatology.data'
, delimiter=
',',converters= )
sz = data.shape
train = data[:int(sz[0
] *
0.7), :]
# take row 1-256 as training set
test = data[int(sz[0
] *
0.7):, :]
# take row 257-366 as testing set
train_x = train[:,0:33
] train_y = train[:, 34
] test_x = test[:,0:33
] test_y = test[:, 34
] xg_train = xgb.dmatrix( train_x, label=train_y)
xg_test = xgb.dmatrix(test_x, label=test_y)
# setup parameters for xgboost
param = {}
# use softmax multi-class classification
param['objective'
] =
'multi:softmax'
# scale weight of positive examples
param['eta'
] =
0.1param['max_depth'
] =
6param['silent'
] =
1param['nthread'
] =
4param['num_class'
] =
6watchlist = [ (xg_train,'train'
), (xg_test,
'test'
) ]
num_round = 5
bst = xgb.train(param, xg_train, num_round, watchlist );
# get prediction
pred = bst.predict( xg_test );
('predicting, classification error=%f'
% (sum( int(pred[i]) != test_y[i]
fori
inrange(len(test_y))) / float(len(test_y)) ))
# do the same thing again, but output probabilities
param['objective'
] =
'multi:softprob'
bst = xgb.train(param, xg_train, num_round, watchlist );
# note: this convention has been changed since xgboost-unity
# get prediction, this is in 1d array, need reshape to (ndata, nclass)
yprob = bst.predict( xg_test ).reshape( test_y.shape[0
], 6
) ylabel = np.argmax(yprob, axis=1
) # return the index of the biggest pro
('predicting, classification error=%f'
% (sum( int(ylabel[i]) != test_y[i]
fori
inrange(len(test_y))) / float(len(test_y)) ))
結果如下:
[python]view plain
copy
[0] train-merror:
0.011719
test-merror:
0.127273
[1] train-merror:
0.015625
test-merror:
0.127273
[2] train-merror:
0.011719
test-merror:
0.109091
[3] train-merror:
0.007812
test-merror:
0.081818
[4] train-merror:
0.007812
test-merror:
0.090909
predicting, classification error=0.090909
[0] train-merror:
0.011719
test-merror:
0.127273
[1] train-merror:
0.015625
test-merror:
0.127273
[2] train-merror:
0.011719
test-merror:
0.109091
[3] train-merror:
0.007812
test-merror:
0.081818
[4] train-merror:
0.007812
test-merror:
0.090909
predicting, classification error=0.090909
不管是直接返回診斷型別,還是返回各型別的概率,然後取概率最大的那個對應的型別的index,結果都是一樣的。
邏輯回歸解決多分類問題
第二種方法 從演算法入手 傳統的邏輯回歸只能處理二分類問題,對於多分類任務,主要有如下兩種方案。某個分類演算法有n類,將某一類和另一模擬較作為二分類問題,總共可分為cn2 c cn 2 種不同的二分類模型,給定乙個新的樣本點,求出每種二分類對應的概率,概率最高的一類作為新樣本的 結果。某個分類演算法...
Tensorflow 多分類問題
import requests import numpy as np 複製 r requests.get 複製 with open iris.data w as f f.write r.text 複製 import pandas as pd 複製 data pd.read csv iris.data...
SVM多分類問題,解決方案
svm本身是乙個二值分類器 svm演算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器。目前,構造svm多類分類器的方法主要有兩類 1 直接法,直接在目標函式上進行修改,將多個分類面的引數求解合併到乙個最優化問題中,通過求解該最優化問題 一次性 實現多類分類。這種方法看似簡...