日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【scikit-learn基础】--『预处理』之 离散化

發布時間:2023/12/24 windows 54 coder
生活随笔 收集整理的這篇文章主要介紹了 【scikit-learn基础】--『预处理』之 离散化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

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. 總結

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

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

總結

以上是生活随笔為你收集整理的【scikit-learn基础】--『预处理』之 离散化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。