二元轉換binarizer
binarizer是將連續型變數根據某個閾值,轉換成二元的分類變數。
小於該閾值的轉換為0,大於該閾值的轉換為1。
要求輸入列必須是double,int都會報錯。
如下:輸入的是0.1,0.8,0.2連續型變數,要以0.5為閾值來轉換成二元變數(0,1)。
列印結果:
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|
+---+-------+-----------------+
多了乙個新的列,它就是轉換後產生的新的特徵。
什麼時候會用到二元轉換?
比如使用樸素貝葉斯做分類**的時候,輸入的特徵必須是類別型的,如果在原始的特徵資料集中存在連續型的特徵變數,就需要將它轉換成二元的類別變數。
多元轉換(分桶bucketizer)
同樣是連續型變數,如果分成兩類還不夠,同樣也可以分成多類。
二元轉換的時候需要給出乙個閾值,在多元換轉換中,如果要分成n類,就要給出n+1個閾值組成的array,任意乙個數都可以被放在某兩個閾值的區間內,就像把它放進屬於它的桶中,故稱為分桶策略。
比如有x,y兩個閾值,那麼他們組成的區間是[x,y)的前開後閉區間;
對於最後乙個區間是前閉後閉區間。
給出的這個閾值array,裡面的元素必須是遞增的。
如果在轉換的過程中有乙個數沒有被包含在區間內,那麼就會當成錯誤值(對錯誤值的處理可以通過引數配置)。如果不確定特徵值的最小與最大值,那麼就新增double.negativeinfinity(負無窮)和double.positiveinfinity(正無窮)到array的兩側。
bucketizer output with 4buckets
+--------+----------------+
|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個區間。
Spark 特徵處理之資料離散化
binarizer是將連續型變數根據某個閾值,轉換成二元的分類變數。小於該閾值的轉換為0,大於該閾值的轉換為1。要求輸入列必須是double,int都會報錯。如下 輸入的是0.1,0.8,0.2連續型變數,要以0.5為閾值來轉換成二元變數 0,1 列印結果 binarizer output with...
特徵離散化
在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0 1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點 0.離散特徵的增加和減少都很容易,易於模型的快速迭代 1.稀疏向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件 2.離散化後的特徵對異常資料有很強的魯棒性 比如...
特徵工程 資料離散化方法
離散化特徵的增加和減少都很容易,有利於模型的快速迭代 可以有效地避免一些異常資料的干擾,降低資料波動的影響,提高抗雜訊能力,模型結果更穩定 一些演算法的需要,如分類樹 樸素貝葉斯演算法等,是基於離散化資料展開的 減小演算法的空間和時間開銷,起到簡化模型的作用,降低過擬合的風險,提高系統的分類聚類能力...