# Python 軟件包介紹
本文檔給出了有關 xgboost python 軟件包的基本演練.
**_其他有用的鏈接列表_**
* [Python 演練代碼集合](https://github.com/tqchen/xgboost/blob/master/demo/guide-python)
* [Python API 參考](python_api.html)
## 安裝 XGBoost
要安裝 XGBoost, 請執行以下步驟:
* 您需要在項目的根目錄下運行 `make` 命令
* 在 `python-package` 目錄下運行
```
python setup.py install
```
```
import xgboost as xgb
```
## 數據接口
XGBoost python 模塊能夠使用以下方式加載數據:
* libsvm txt format file(libsvm 文本格式的文件)
* Numpy 2D array, and(Numpy 2維數組, 以及)
* xgboost binary buffer file. (xgboost 二進制緩沖文件)
這些數據將會被存在一個名為 `DMatrix` 的對象中.
* 要加載 ligbsvm 文本格式或者 XGBoost 二進制文件到 `DMatrix` 對象中. 代碼如下:
```
dtrain = xgb.DMatrix('train.svm.txt')
dtest = xgb.DMatrix('test.svm.buffer')
```
* 要加載 numpy 的數組到 `DMatrix` 對象中, 代碼如下:
```
data = np.random.rand(5,10) # 5 entities, each contains 10 features
label = np.random.randint(2, size=5) # binary target
dtrain = xgb.DMatrix( data, label=label)
```
* 要加載 scpiy.sparse 數組到 `DMatrix` 對象中, 代碼如下:
```
csr = scipy.sparse.csr_matrix((dat, (row, col)))
dtrain = xgb.DMatrix(csr)
```
* 保存 `DMatrix` 到 XGBoost 二進制文件中后, 會在下次加載時更快:
```
dtrain = xgb.DMatrix('train.svm.txt')
dtrain.save_binary("train.buffer")
```
* 要處理 `DMatrix` 中的缺失值, 您可以通過指定缺失值的參數來初始化 `DMatrix`:
```
dtrain = xgb.DMatrix(data, label=label, missing = -999.0)
```
* 在需要時可以設置權重:
```
w = np.random.rand(5, 1)
dtrain = xgb.DMatrix(data, label=label, missing = -999.0, weight=w)
```
## 設置參數
XGBoost 使用 pair 格式的 list 來保存 [_參數_](../parameter.html). 例如:
* Booster(提升)參數
```
param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }
param['nthread'] = 4
param['eval_metric'] = 'auc'
```
* 您也可以指定多個評估的指標:
```
param['eval_metric'] = ['auc', 'ams@0']
# alternativly:
# plst = param.items()
# plst += [('eval_metric', 'ams@0')]
```
* 指定驗證集以觀察性能
```
evallist = [(dtest,'eval'), (dtrain,'train')]
```
## 訓練
有用參數列表和數據以后, 您現在可以訓練一個模型了.
* 訓練
```
num_round = 10
bst = xgb.train( plst, dtrain, num_round, evallist )
```
* 保存模型 訓練之后,您可以保存模型并將其轉儲出去.
```
bst.save_model('0001.model')
```
* 轉儲模型和特征映射 您可以將模型轉儲到 txt 文件并查看模型的含義
```
# 轉存模型
bst.dump_model('dump.raw.txt')
# 轉儲模型和特征映射
bst.dump_model('dump.raw.txt','featmap.txt')
```
* 加載模型 當您保存模型后, 您可以使用如下方式在任何時候加載模型文件
```
bst = xgb.Booster({'nthread':4}) #init model
bst.load_model("model.bin") # load data
```
## 提前停止
如果您有一個驗證集, 你可以使用提前停止找到最佳數量的 boosting rounds(梯度次數). 提前停止至少需要一個 `evals` 集合. 如果有多個, 它將使用最后一個.
`train(..., evals=evals, early_stopping_rounds=10)`
該模型將開始訓練, 直到驗證得分停止提高為止. 驗證錯誤需要至少每個 `early_stopping_rounds` 減少以繼續訓練.
如果提前停止,模型將有三個額外的字段: `bst.best_score`, `bst.best_iteration` 和 `bst.best_ntree_limit`. 請注意 `train()` 將從上一次迭代中返回一個模型, 而不是最好的一個.
這與兩個度量標準一起使用以達到最小化(RMSE, 對數損失等)和最大化(MAP, NDCG, AUC). 請注意, 如果您指定多個評估指標, 則 `param ['eval_metric']` 中的最后一個用于提前停止.
## 預測
當您 訓練/加載 一個模型并且準備好數據之后, 即可以開始做預測了.
```
# 7 個樣本, 每一個包含 10 個特征
data = np.random.rand(7, 10)
dtest = xgb.DMatrix(data)
ypred = bst.predict(xgmat)
```
如果在訓練過程中提前停止, 可以用 `bst.best_ntree_limit` 從最佳迭代中獲得預測結果:
```
ypred = bst.predict(xgmat,ntree_limit=bst.best_ntree_limit)
```
## 繪圖
您可以使用 plotting(繪圖)模塊來繪制出 importance(重要性)以及輸出的 tree(樹).
要繪制出 importance(重要性), 可以使用 `plot_importance`. 該函數需要安裝 `matplotlib`.
```
xgb.plot_importance(bst)
```
輸出的 tree(樹)會通過 `matplotlib` 來展示, 使用 `plot_tree` 指定 target tree(目標樹)的序號. 該函數需要 `graphviz` 和 `matplotlib`.
```
xgb.plot_tree(bst, num_trees=2)
```
當您使用 `IPython` 時, 你可以使用 `to_graphviz` 函數, 它可以將 target tree(目標樹)轉換成 `graphviz` 實例. `graphviz` 實例會自動的在 `IPython` 上呈現.
```
xgb.to_graphviz(bst, num_trees=2)
```