二元轉換Binarizer
Binarizer是將連續型變量根據某個閾值,轉換成二元的分類變量。
小於該閾值的轉換爲0,大於該閾值的轉換爲1。算法
要求輸入列必須是double,int都會報錯。
以下:輸入的是0.1,0.8,0.2連續型變量,要以0.5爲閾值來轉換成二元變量(0,1)。spa
打印結果:code
Binarizer output with Threshold = 0.5
+---+-------+-----------------+
| id|feature|binarized_feature|
+---+-------+-----------------+
| 0| 0.1| 0.0|
| 1| 0.8| 1.0|
| 2| 0.2| 0.0|
+---+-------+-----------------+
多了一個新的列,它就是轉換後產生的新的特徵。blog
何時會用到二元轉換?
好比使用樸素貝葉斯作分類預測的時候,輸入的特徵必須是類別型的,若是在原始的特徵數據集中存在連續型的特徵變量,就須要將它轉換成二元的類別變量。索引
多元轉換(分桶Bucketizer)
一樣是連續型變量,若是分紅兩類還不夠,一樣也能夠分紅多類。it
二元轉換的時候須要給出一個閾值,在多元換轉換中,若是要分紅n類,就要給出n+1個閾值組成的array,任意一個數均可以被放在某兩個閾值的區間內,就像把它放進屬於它的桶中,故稱爲分桶策略。class
好比有x,y兩個閾值,那麼他們組成的區間是[x,y)的前開後閉區間;
對於最後一個區間是前閉後閉區間。變量
給出的這個閾值array,裏面的元素必須是遞增的。配置
若是在轉換的過程當中有一個數沒有被包含在區間內,那麼就會當成錯誤值(對錯誤值的處理能夠經過參數配置)。若是不肯定特徵值的最小與最大值,那麼就添加Double.NegativeInfinity(負無窮)和Double.PositiveInfinity(正無窮)到array的兩側。方法
Bucketizer output with 4 buckets +--------+----------------+
|features|bucketedFeatures|
+--------+----------------+
| -999.9| 0.0|
| -0.5| 1.0|
| -0.3| 1.0|
| 0.0| 2.0|
| 0.2| 2.0|
| 999.9| 3.0|
+--------+----------------+
第一列爲原始的連續型特徵,第二列爲轉換後的分類索引。
分位數離散化QuantileDiscretizer
與上面兩個方法同樣,QuantileDiscretizer(分位數離散化)也是將一列連續型的數據轉成分類型數據。
經過指定要分爲多少類,而後取一個樣本數據進行fit,並將其分爲每一個類別的元素個數大體相等,來獲得一個固定閾值array的Bucketizer,其閾值array的下限爲-Infinity(負無重大) ,上限爲+Infinity(正無重大)。
分級的數量由numBuckets參數決定。
分級的範圍有漸進算法決定。
漸進的精度由relativeError參數決定。當relativeError設置爲0時,將會計算精確的分位點(計算代價較高)。
但若是樣本數據只劃分了3個區間,此時設置numBuckets爲4,則仍只劃分爲3個區間。