機器學習中,特征提取被認為是個體力活,有人形象地稱為“特征工程”,可見其工作量之大。特征提取中數字型和文本型特征的提取最為常見。
數字型特征可以直接作為特征,但是對于一個多元的特征,某一個特征的取值範圍特别大,很可能導緻其他特征對結果的影響被忽略,這時候我們需要對數字型特征進行預處理,常見的預處理方式有以下幾種。
1.标準化:
2.正則化:
3.歸一化:
文本型資料提取特征相對數字型要複雜很多,本質上是做單詞切分,不同的單詞當作一個新的特征,以hash結構為例:
鍵值city具有多個取值,“Dubai”、“London”和“San Fransisco”,直接把每個取值作為新的特征即可。鍵值temperature是數值型,可以直接作為特征使用。
文本特征提取有兩個非常重要的模型。
詞集模型:單詞構成的集合,集合中每個元素都隻有一個,即詞集中的每個單詞都隻有一個。
詞袋模型:如果一個單詞在文檔中出現不止一次,并統計其出現的次數(頻數)。
兩者本質上的差別,詞袋是在詞集的基礎上增加了頻率的次元:詞集隻關注有和沒有,詞袋還要關注有幾個。
假設我們要對一篇文章進行特征化,最常見的方式就是詞袋。
導入相關的函數庫:
執行個體化分詞對象:
将文本進行詞袋處理:
擷取詞袋資料,至此我們已經完成了詞袋化。但是對于程式中的其他文本,如何使用現有的詞袋的特征進行向量化呢?
我們定義詞袋的特征空間叫做詞彙表vocabulary:
針對其他文本進行詞袋處理時,可以直接使用現有的詞彙表:
TensorFlow中有類似實作:
平時處理資料時,CSV是最常見的格式,檔案的每行記錄一個向量,其中最後一列為标記。TensorFlow提供了非常便捷的方式從CSV檔案中讀取資料集。
加載對應的函數庫:
從CSV檔案中讀取資料:
其中各個參數定義為:
filename,檔案名;
target_dtype,标記資料類型;
features_dtype,特征資料類型。
通路資料集合的特征以及标記的方式為: