Spark 特徵處理之資料離散化

2021-09-07 04:07:51 字數 2066 閱讀 6855

binarizer是將連續型變數根據某個閾值,轉換成二元的分類變數。

小於該閾值的轉換為0,大於該閾值的轉換為1。

要求輸入列必須是double,int都會報錯。

如下:輸入的是0.10.80.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|+--

-+-------

+------

----

-------

+

多了乙個新的列,它就是轉換後產生的新的特徵。

什麼時候會用到二元轉換?

比如使用樸素貝葉斯做分類**的時候,輸入的特徵必須是類別型的,如果在原始的特徵資料集中存在連續型的特徵變數,就需要將它轉換成二元的類別變數。

同樣是連續型變數,如果分成兩類還不夠,同樣也可以分成多類。

二元轉換的時候需要給出乙個閾值,在多元換轉換中,如果要分成n類,就要給出n+1個閾值組成的array,任意乙個數都可以被放在某兩個閾值的區間內,就像把它放進屬於它的桶中,故稱為分桶策略。

比如有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(分位數離散化)也是將一列連續型的資料轉成分型別資料。

通過指定要分為多少類,然後取乙個樣本資料進行fit,並將其分為每個類別的元素個數大致相等,來得到乙個固定閾值array的bucketizer,其閾值array的下限為-infinity(負無重大) ,上限為+infinity(正無重大)。

分級的數量由numbuckets引數決定。

分級的範圍有漸進演算法決定。

漸進的精度由relativeerror引數決定。當relativeerror設定為0時,將會計算精確的分位點(計算代價較高)。

但如果樣本資料只劃分了3個區間,此時設定numbuckets為4,則仍只劃分為3個區間。

特徵處理之資料離散化

二元轉換binarizer binarizer是將連續型變數根據某個閾值,轉換成二元的分類變數。小於該閾值的轉換為0,大於該閾值的轉換為1。要求輸入列必須是double,int都會報錯。如下 輸入的是0.1,0.8,0.2連續型變數,要以0.5為閾值來轉換成二元變數 0,1 列印結果 binariz...

特徵離散化

在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0 1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點 0.離散特徵的增加和減少都很容易,易於模型的快速迭代 1.稀疏向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件 2.離散化後的特徵對異常資料有很強的魯棒性 比如...

特徵工程 資料離散化方法

離散化特徵的增加和減少都很容易,有利於模型的快速迭代 可以有效地避免一些異常資料的干擾,降低資料波動的影響,提高抗雜訊能力,模型結果更穩定 一些演算法的需要,如分類樹 樸素貝葉斯演算法等,是基於離散化資料展開的 減小演算法的空間和時間開銷,起到簡化模型的作用,降低過擬合的風險,提高系統的分類聚類能力...