【scikit-learn基础】--『预处理』之 离散化
數(shù)據(jù)的預(yù)處理是數(shù)據(jù)分析,或者機(jī)器學(xué)習(xí)訓(xùn)練前的重要步驟。
通過數(shù)據(jù)預(yù)處理,可以
- 提高數(shù)據(jù)質(zhì)量,處理數(shù)據(jù)的缺失值、異常值和重復(fù)值等問題,增加數(shù)據(jù)的準(zhǔn)確性和可靠性
- 整合不同數(shù)據(jù),數(shù)據(jù)的來源和結(jié)構(gòu)可能多種多樣,分析和訓(xùn)練前要整合成一個(gè)數(shù)據(jù)集
- 提高數(shù)據(jù)性能,對(duì)數(shù)據(jù)的值進(jìn)行變換,規(guī)約等(比如無量綱化),讓算法更加高效
本篇介紹的離散化處理,是一種數(shù)據(jù)預(yù)處理技術(shù),用于將連續(xù)的、連續(xù)的數(shù)值型數(shù)據(jù)轉(zhuǎn)換為離散的、分類的標(biāo)簽。
這種處理方式主要應(yīng)用于一些需要轉(zhuǎn)化為分類問題的數(shù)據(jù)集,如機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘中的輸入變量。
1. 原理
離散化的原理主要是通過將連續(xù)的數(shù)值屬性轉(zhuǎn)化為離散的數(shù)值屬性來實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)化。
這個(gè)過程通常會(huì)采用分箱(Binning)的方法。
在分箱中,原始數(shù)據(jù)的值被分配到一些離散的、預(yù)定義的類別中,這些類別通常被稱為“箱子”或“桶”,
箱子的數(shù)量和大小可以根據(jù)數(shù)據(jù)的分布和實(shí)際需求進(jìn)行調(diào)整。
我們平時(shí)常用的離散化處理有兩種:
1.1. 二值化處理
二值化就是根據(jù)閾值將一系列連續(xù)的數(shù)據(jù)分為兩種類別。
二值化處理的實(shí)際應(yīng)用場景很多,比如垃圾郵件的判定,信用卡欺詐的判定,還有各種的醫(yī)療檢測結(jié)果(陰性陽性)。
使用scikit-learn中的Binarizer對(duì)數(shù)據(jù)進(jìn)行二值化處理:
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("原始數(shù)據(jù): {}".format(data))
print("二值化后數(shù)據(jù): {}".format(result))
# 運(yùn)行結(jié)果
原始數(shù)據(jù):
[[12 28 84]
[ 2 18 81]
[74 92 74]]
二值化后數(shù)據(jù):
[[0 0 1]
[0 0 1]
[0 1 0]]
Binarizer的參數(shù)threshold就是分類的閾值。
上面的例子中,threshold=80,則大于80的值為1,小于等于80的值為0。
1.2. K-bins處理
K-bins離散化處理則可以控制數(shù)據(jù)分成多個(gè)類別。
它在實(shí)際中的應(yīng)用比如電商領(lǐng)域,根據(jù)用戶的購買行為將用戶分為不同的消費(fèi)類別;在統(tǒng)計(jì)學(xué)習(xí)成績時(shí),按照成績分為不同的等級(jí)(優(yōu)/良/中/差)等等。
這些場景下,不能簡單的進(jìn)行二值化,需要離散化為多個(gè)分類。
對(duì)于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("原始數(shù)據(jù): {}".format(data))
print("K-bins離散化后數(shù)據(jù): {}".format(result))
# 運(yùn)行結(jié)果
原始數(shù)據(jù): [[12]
[82]
[19]
[32]
[81]
[84]
[92]
[25]
[61]
[31]]
K-bins離散化后數(shù)據(jù): [[0.]
[2.]
[0.]
[1.]
[2.]
[2.]
[2.]
[0.]
[1.]
[1.]]
KBinsDiscretizer的參數(shù)n_bins表示分為幾類,上面的示例中設(shè)置分為了3類。
另一個(gè)參數(shù)encode表示離散化后的數(shù)據(jù)編碼,上面的示例中"ordinal"表示用順序的整數(shù)來編碼。
可以設(shè)置encode為onehot,使得離散化的數(shù)據(jù)變?yōu)楠?dú)熱編碼。
2. 作用
數(shù)據(jù)離散化的主要作用有:
- 降低計(jì)算量和復(fù)雜度:連續(xù)的數(shù)值數(shù)據(jù)轉(zhuǎn)化為離散的類別數(shù)據(jù)后,簡化了數(shù)據(jù),從而降低計(jì)算量和復(fù)雜度,特別是在處理大規(guī)模數(shù)據(jù)集時(shí)效果更為顯著。
- 解決異常值和缺失值問題:將連續(xù)的數(shù)值數(shù)據(jù)中的異常值和缺失值進(jìn)行合理的處理,從而避免對(duì)后續(xù)的影響。
- 提高模型的解釋性:連續(xù)的數(shù)值數(shù)據(jù)轉(zhuǎn)化為離散的類別數(shù)據(jù)后,使模型結(jié)果更加直觀和易于解釋。
- 克服數(shù)據(jù)中的缺陷:將連續(xù)的數(shù)值數(shù)據(jù)轉(zhuǎn)化為離散的類別數(shù)據(jù),能夠有效地克服數(shù)據(jù)中隱藏的缺陷,使模型結(jié)果更加穩(wěn)定。
- 提高算法效率和精度:將連續(xù)的數(shù)值數(shù)據(jù)進(jìn)行分段,并采用優(yōu)化方法進(jìn)行離散化處理,從而可以提高算法的效率和精度。
當(dāng)然,離散化處理簡化了數(shù)據(jù),可能會(huì)導(dǎo)致原始數(shù)據(jù)中的一些細(xì)節(jié)信息的丟失。
其次,離散化處理可能會(huì)引入一些主觀性和不穩(wěn)定性,因?yàn)榉诸惖臄?shù)量和大小通常是基于經(jīng)驗(yàn)和實(shí)際需求進(jìn)行調(diào)整的,不同的決策可能會(huì)導(dǎo)致不同的結(jié)果。
3. 總結(jié)
總之,關(guān)注離散化處理給我們帶來的種種好處之時(shí),在實(shí)際應(yīng)用中也需要注意其局限性,如可能會(huì)造成數(shù)據(jù)的丟失和失真等問題。
因此,在具體的實(shí)踐中,需要根據(jù)實(shí)際情況和需求進(jìn)行合理的選擇和應(yīng)用。
總結(jié)
以上是生活随笔為你收集整理的【scikit-learn基础】--『预处理』之 离散化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女生最霸气的网名65个
- 下一篇: 神经网络优化篇:详解dropout 正则