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|+--
-+-------
+------
----
-------
+
多了乙個新的列,它就是轉換後產生的新的特徵。
什麼時候會用到二元轉換?
比如使用樸素貝葉斯做分類**的時候,輸入的特徵必須是類別型的,如果在原始的特徵資料集中存在連續型的特徵變數,就需要將它轉換成二元的類別變數。
同樣是連續型變數,如果分成兩類還不夠,同樣也可以分成多類。
二元轉換的時候需要給出乙個閾值,在多元換轉換中,如果要分成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.離散化後的特徵對異常資料有很強的魯棒性 比如...
特徵工程 資料離散化方法
離散化特徵的增加和減少都很容易,有利於模型的快速迭代 可以有效地避免一些異常資料的干擾,降低資料波動的影響,提高抗雜訊能力,模型結果更穩定 一些演算法的需要,如分類樹 樸素貝葉斯演算法等,是基於離散化資料展開的 減小演算法的空間和時間開銷,起到簡化模型的作用,降低過擬合的風險,提高系統的分類聚類能力...