【scikit-learn基礎】--『預處理』之 離散化

2023-12-21 12:00:26

資料的預處理是資料分析,或者機器學習訓練前的重要步驟。
通過資料預處理,可以

  • 提高資料質量,處理資料的缺失值、異常值和重複值等問題,增加資料的準確性和可靠性
  • 整合不同資料,資料的來源和結構可能多種多樣,分析和訓練前要整合成一個資料集
  • 提高資料效能,對資料的值進行變換,規約等(比如無量綱化),讓演演算法更加高效

本篇介紹的離散化處理,是一種資料預處理技術,用於將連續的、連續的數值型資料轉換為離散的、分類的標籤。
這種處理方式主要應用於一些需要轉化為分類問題的資料集,如機器學習和資料探勘中的輸入變數。

1. 原理

離散化的原理主要是通過將連續的數值屬性轉化為離散的數值屬性來實現資料的轉化。

這個過程通常會採用分箱(Binning)的方法。
在分箱中,原始資料的值被分配到一些離散的、預定義的類別中,這些類別通常被稱為「箱子」或「桶」,
箱子的數量和大小可以根據資料的分佈和實際需求進行調整。

我們平時常用的離散化處理有兩種:

1.1. 二值化處理

二值化就是根據閾值將一系列連續的資料分為兩種類別。
二值化處理的實際應用場景很多,比如垃圾郵件的判定,信用卡欺詐的判定,還有各種的醫療檢測結果(陰性陽性)。

使用scikit-learn中的Binarizer對資料進行二值化處理:

from sklearn import preprocessing as pp
import numpy as np

data = np.random.randint(0, 100, size=(3, 3))
b = pp.Binarizer(threshold=80)
result = b.fit_transform(data)

print("原始資料: {}".format(data))
print("二值化後資料: {}".format(result))

# 執行結果
原始資料: 
[[12 28 84]
 [ 2 18 81]
 [74 92 74]]

二值化後資料: 
[[0 0 1]
 [0 0 1]
 [0 1 0]]

Binarizer的引數threshold就是分類的閾值。
上面的例子中,threshold=80,則大於80的值為1小於等於80的值為0

1.2. K-bins處理

K-bins離散化處理則可以控制資料分成多個類別。

它在實際中的應用比如電商領域,根據使用者的購買行為將使用者分為不同的消費類別;在統計學習成績時,按照成績分為不同的等級(優/良/中/差)等等。
這些場景下,不能簡單的進行二值化,需要離散化為多個分類。

對於K-bins離散化,可以使用scikit-learn中的KBinsDiscretizer

data = np.random.randint(0, 100, 10).reshape(-1, 1)
b = pp.KBinsDiscretizer(n_bins=3, encode="ordinal")
result = b.fit_transform(data)

print("原始資料: {}".format(data))
print("K-bins離散化後資料: {}".format(result))

# 執行結果
原始資料: [[12]
 [82]
 [19]
 [32]
 [81]
 [84]
 [92]
 [25]
 [61]
 [31]]
K-bins離散化後資料: [[0.]
 [2.]
 [0.]
 [1.]
 [2.]
 [2.]
 [2.]
 [0.]
 [1.]
 [1.]]

KBinsDiscretizer的引數n_bins表示分為幾類,上面的範例中設定分為了3類
另一個引數encode表示離散化後的資料編碼,上面的範例中"ordinal"表示用順序的整數來編碼。

可以設定encodeonehot,使得離散化的資料變為獨熱編碼。

2. 作用

資料離散化的主要作用有:

  1. 降低計算量和複雜度:連續的數值資料轉化為離散的類別資料後,簡化了資料,從而降低計算量和複雜度,特別是在處理大規模資料集時效果更為顯著。
  2. 解決異常值和缺失值問題:將連續的數值資料中的異常值和缺失值進行合理的處理,從而避免對後續的影響。
  3. 提高模型的解釋性:連續的數值資料轉化為離散的類別資料後,使模型結果更加直觀和易於解釋。
  4. 克服資料中的缺陷:將連續的數值資料轉化為離散的類別資料,能夠有效地克服資料中隱藏的缺陷,使模型結果更加穩定。
  5. 提高演演算法效率和精度:將連續的數值資料進行分段,並採用優化方法進行離散化處理,從而可以提高演演算法的效率和精度。

當然,離散化處理簡化了資料,可能會導致原始資料中的一些細節資訊的丟失。
其次,離散化處理可能會引入一些主觀性和不穩定性,因為分類的數量和大小通常是基於經驗和實際需求進行調整的,不同的決策可能會導致不同的結果。

3. 總結

總之,關注離散化處理給我們帶來的種種好處之時,在實際應用中也需要注意其侷限性,如可能會造成資料的丟失和失真等問題。

因此,在具體的實踐中,需要根據實際情況和需求進行合理的選擇和應用。