xgboost中使用dump_model方法的fmap參數來修改導出模型的特徵名稱

當使用xgboost的dump_model方式導出模型時,有時我們希望導出模型中的特徵名與訓練時訓練集的特徵名不一樣,但是如果整個模型重新訓練一遍又很麻煩,這時可以用fmap參數來指定導出模型的特徵名。

下面是dump_model方法在官方文檔中的參數列表解釋。fmap參數輸入的是文件的路徑,我們需要在fmap指定的文件中指定原特徵名與新特徵名的對應關係。

def dump_model(self, fout, fmap='', with_stats=False, dump_format="text"):
    """
    Dump model into a text or JSON file.

    Parameters
    ----------
    fout : string
        Output file name.
    fmap : string, optional
        Name of the file containing feature map names.
    with_stats : bool, optional
        Controls whether the split statistics are output.
    dump_format : string, optional
        Format of model dump file. Can be 'text' or 'json'.
    """

但是fmap文件中的數據格式在官方文檔中沒有給出很詳細的示例,花了很多時間在網上查到了答案,總結在這裏。

fmap文件的結構,文件中每一行都是如下結構(注意:這裏的尖括號是不需要的):
<featureid> <featurename> <q or i or int>\n:
其中:

  • Feature id 從0開始直到特徵的個數爲止,從小到大排列。
  • i 表示是二分類特徵q表示數值變量,如年齡,時間等。
  • q 可以缺省int表示特徵爲整數(when int is hinted, the decision boundary will be integer)

(轉載來自: https://www.zhihu.com/question/61448233/answer/201537678)

示例,假如我的模型總共有5個特徵,原特徵名爲[‘f0’, ‘f1’, ‘f2’, ‘f3’, ‘f4’],現在需要修改導出模型中的特徵名,則fmap文件中的格式如下:

0 f111 q
1 f222 q
2 f333 q
3 f4444 q
4 f5555 q

其中,第1列爲特徵的id,必須是從0開始,依次增大;第2列爲特徵的名稱;第3列爲數據類型。導出模型的特徵名爲[‘f111’, ‘f222’, ‘f333’, ‘f4444’, ‘f5555’]

這裏如果fmap中的行數小於模型總特徵數,比如上面的示例中只寫3行:

0 f111 q
1 f222 q
2 f333 q

則導出的模型就只有前3個特徵被重新命名了,後面的特徵仍然保持原特徵名不變。即導出模型的特徵名爲[‘f111’, ‘f222’, ‘f333’, ‘f3’, ‘f4’]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章