2018年1月27日 星期六

[Spark][ML] Feature Transformers 特徵轉換器

特徵值處理是資料工程中的一個重要環節, 用來將資料轉換為MLlib需要的格式, Feature Transformers為Spark所提供相當方便的工具, 本篇是使用Dataframe格式將官網範例做個測試


這裡結合一些網路上查到的說明

而本篇參考官網範例連結如下
官網MLlib Transformer說明

官網跑出的結果連結, 也可至下列網址看
我的github

StringIndexer

將文字的類別轉成數字index,才能放入分類器等model,按照標籤出現頻率排序,所以出現最頻繁的標籤其指標為0。如果輸入列為數值型,我們先將之映射到字符串然後再對字符串的值進行指標

IndexToString

將轉為index的類別反轉回原來值

VectorIndexer

將欲訓練特徵值欄位(array)轉成Vector丟入如分類器等演算法訓練model

OneHotEncoder

StringIndexer先將類別轉為離散的index,對隨機分佈的類別進行OneHotEncoder,轉換後可以當成連續數值輸入需要連續值的演算當中,轉為SparesVector格式(14,[3],[1.0]) 共14個欄位, 第三個欄位是1其餘是0 = 00010000000000, 因為大部分為0只需指定哪個欄位不為0

word2vec

word2vec 是把每個詞本身用一個多維向量來表示,把詞投影到一個向量空間裡。投影出來的空間有些特殊的性質,比如說相同屬性的詞可能會靠得很近,甚至部份的向量有邏輯上的線性關係等等

Tokenizer & HashingTF

為每個不同的字指派一個「索引,然後將向量傳至機器學習演算法,使每個索引的值包含該字在文字字串中出現的相對頻率,羅吉斯迴歸演算法的輸入應該是一組「標籤-特性向量配對,其中「特性向量」是代表輸入點的數字向量。 因此,我們需要將半結構化且包含許多自然語言評論的「違規情事」資料行,轉換成機器可輕易辨識的實數陣列。
Tokenizer : words為一串文字,將句子文字切成單字
HashingTF : 單字陣列轉換為特性向量,計算字頻,接著可以將它傳遞給羅吉斯迴歸演算法以構建模型

Bucketizer

分箱(分段處理),將連續值轉為離散值,比如特徵是年龄,是一个連續數值,需要將其轉換為離散類别(未成年人、青年人、中年人、老年人,分类的标准是自己定义的,在Spark中为split參数,定義如下: double[] splits = {0, 18, 35,50, Double.PositiveInfinity} 將數值年齡分為四類0-18,18-35,35-50,55+四个段。 如果左右邊界拿不準,就設置為,Double.NegativeInfinity, Double.PositiveInfinity,不會有錯的。

QuantileDiscretizer

同Bucketizer,但只要定義Buckets數目即可

Imputer

補值,預設策略為其他高關聯的column的平均值補到nan,a有一列為nan,就會去找b和其他的column同列取mean補進去

Binarizer

二值化是根據閥值將連續數值特徵轉換為0-1特徵的過程。Binarizer參數有輸入、輸出以及閥值。特徵值大於閥值將映射為1.0,特徵值小於等於閥值將映射為0.0。

Normalizer

Normalizer是一個轉換器,它可以將多行向量輸入轉化為統一的形式。參數為p(默認值:2)來指定正則化中使用的p-norm。正則化操作可以使輸入數據標準化並提高後期學習算法的效果。

StandardScaler

StandardScaler處理Vector數據,標準化每個特徵使得其有統一的標準差以及(或者)均值為零。它需要如下參數:
1. withStd:默認值為真,使用統一標準差方式。
2. withMean:默認為假。此種方法將產出一個稠密輸出,所以不適用於稀疏輸入。
        StandardScaler是一個Estimator ,它可以fit 數據集產生一個StandardScalerModel ,用來計算匯總統計。然後產生的模可以用來轉換向量至統一的標準差以及(或者)零均值特徵。注意如果特徵的標準差為零,則該特徵在向量中返回的默認值為0.0 。

MinMaxScaler

通過重新調節大小將Vector 形式的列轉換到指定的範圍內,通常為[ 0, 1] ,它的參數有:
1. min :默認為0.0 ,為轉換後所有特徵的下邊界。
2. max :默認為1.0 ,為轉換後所有特徵的下邊界。
       MinMaxScaler 計算數據集的匯總統計量,並產生一個MinMaxScalerModel 。該模型可以將獨立的特徵的值轉換到指定的範圍內。

SQLTransformer

假设我们有如下DataFrame包含id,v1,v2列: id |  v1 |  v2
—-|—–|—–
0  | 1.0 | 3.0
2  | 2.0 | 5.0
使用SQLTransformer语句"SELECT *,(v1 + v2) AS v3, (v1 * v2) AS v4 FROM __THIS__"轉換後得到輸出如下:
id |  v1 | v2 |  v3 |  v4
—-|—–|—–|—–|—–
 0  | 1.0| 3.0 | 4.0 | 3.0
 2  | 2.0| 5.0 | 7.0 |10.0

n-gram

一個n-gram是一個長度為整數n的字序列。NGram可以用來將輸入轉換為n-gram。NGram的輸入為一系列字符串(如分詞器輸出)。參數n決定每個n-gram包含的對像個數。結果包含一系列n-gram,其中每個n-gram代表一個空格分割的n個連續字符。如果輸入少於n個字符串,將沒有輸出結果。

ElementwiseProduct

ElementwiseProduct 按提供的“weight” 向量,返回與輸入向量元素級別的乘積。即是說,按提供的權重分別對輸入數據進行縮放,得到輸入向量v 以及權重向量w 的Hadamard 積。 

沒有留言:

張貼留言