unknown column in field list_tf.feature_column的特征处理探究
1. 背景
tf.estimator是tensorflow的一個高級API接口,它最大的特點在于兼容分布式和單機兩種場景,工程師可以在同一套代碼結構下即實現單機訓練也可以實現分布式訓練,正是因為這樣的特點,目前包括阿里在內的很多公司都在使用這一接口來構建自己的深度學習模型。
特征預處理是幾乎所有機器學習模型所必須的一個過程,常見的特征預處理方法包括:連續變量分箱化、離散變量one-hot、離散指標embedding等,tensorflow給我們提供了一個功能強大的特征處理函數tf.feature_column,它通過對特征處理將數據輸入網絡并交由estimator來進行訓練,本文通過實際的數據輸出來直觀地介紹與展現tf.feature_column的基本用法。
2. 數據處理
特征數據主要包括categorical和dense兩類,處理方法是使用tensorflow中的feature_column接口來進行定義,如下圖,總共有九種不同的函數,分別有五種Categorical function、三種numerical function 加上一種bucketized_column可屬于任何一種,categorical column中的 with_identity其實和 dense column中的indicator_column沒有區別,都是類別特征的one-hot表示,但是其屬于不同的特征類別,前者屬于categorical后者屬于dense,對于estimator編寫的不同網絡而言,其可接受的one-hot類型不同,這里在實際操作中需要注意轉換。
2.1 categorical column
2.1.1 categorical_column_with_identity
- categorical_column_with_identity:把numerical data轉乘one hot encoding
- 只適用于值為整數的類別型變量,實際輸出如下:
- 如圖輸出為birthplace的one-hot結果,num_buckets用于確定每一個one-hot向量的最大特征類別數
2.1.2 categorical_column_with_vocabulary_list or categorical_column_with_vocabulary_file
- categorical_column_with_vocabulary_list or categorical_column_with_vocabulary_file:根據單詞的序列順序,把單詞根據index轉換成one hot encoding
- 主要用于處理非整數型的類別特征,兩個函數的區別在于處理變量類別的多少,數量前者對應類別少的情況,所有可能的類別可以直接輸入,后者對應類別多的情況,所有可能的類別可以存在一個文件中輸入,實際輸出如下:
- 如圖輸出為sex的one-hot結果,其后跟著的list用于定義該變量的所有類別。
2.1.3 categorical_column_with_hash_bucket
- categorical_column_with_hash_bucket:對于處理包含大量文字或數字類別的特征時可使用hash的方式,這能快速地建立對應的對照表,缺點則是會有哈希沖突的問題。
- hash_bucket_size的大小一般設置為總類別數的2-5倍,該函數適用于不能確定所有類別樣式的類別變量,實際輸出如下:
- 如上,輸出為department的one-hot結果,對于不同類的department出現了哈希沖突的情況。
2.1.4 crossed_column
- crossed_column:特征交叉,在有些情況下,特征獨自編碼與多維特征交叉后的特征特性會有不一樣的結果。
- 該函數不能對hash映射之后的特征進行交叉,實際輸出如下:
- 如上,輸出為cross的one-hot結果,hash_bucket_size代表輸出的交叉向量的one-hot維度。
2.1.5 embedding_column
- embedding_column:把categorical的data,借由lookup table的方式找尋對應的feature vector來表示。假設有81個單詞,若使用categorical_column_vocbulary_list,然后轉乘numerical的indicator_column,則需要81維度來描述此些單詞,這樣極易造成數據的稀疏化,對于推薦系統而言,大維度的稀疏數據對于結果的影響較大,因此我們考慮使用embedding_column,來對數據進行壓縮,實際輸出如下:
- 如上,輸出為交叉特征的embading向量,embedding_column的輸入為處理之后的特征變量,可以是categorical也可以是dense的。
2.2 Dense column
2.2.1 numeric_column
- numeric_column:該函數主要用于處理連續型變量,即可以是float類型也可以是int類似,從table中讀取對應的(key)column,并把它轉成dtype的格式,實際情況如下:
2.2.2 bucketized_column
- bucketized_column: 該函數將連續變量進行分桶離散化,輸出one-hot的結果,方便連續值指標與分類變量進行交叉特征構建,
- 實際情況如下:
3. 總結
本文通過直觀的數據輸出來展現tf.feature_column的特征處理過程,方便大家理解這個函數,tensorflow作為目前最常用的深度學習框架,有著很多高級的API,這些接口都可以極大方便我們算法工程師的工作,tf.estimator不僅可以很好地處理特征,同時它將train、evaluatete、predict都集成到了一起,大家平時可以多使用該接口。
總結
以上是生活随笔為你收集整理的unknown column in field list_tf.feature_column的特征处理探究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “其字曰鸣鸿”下一句是什么
- 下一篇: pytorch如何定义损失函数_对比Py