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

来源:https://www.cnblogs.com/wang_yb/archive/2023/12/21/17918354.html
-Advertisement-
Play Games

數據的預處理是數據分析,或者機器學習訓練前的重要步驟。通過數據預處理,可以 提高數據質量,處理數據的缺失值、異常值和重覆值等問題,增加數據的準確性和可靠性 整合不同數據,數據的來源和結構可能多種多樣,分析和訓練前要整合成一個數據集 提高數據性能,對數據的值進行變換,規約等(比如無量綱化),讓演算法更加 ...


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

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

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

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

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明: access_token: 服務端與客戶端通信,有時服務端需要知道客戶端的身份,就會用到access_token來用於驗證身份。 refresh_token: 但為了保證安全token會設置過期時間,如果直接過期,相當於用戶或調用端正在使用產品,突然間就退出登錄了,這種產品體驗很差,於是有了 ...
  • 根據上一篇博客可知,單純的通過求取最大面積而進行定位的局限性,因此我們接下來將通過cv2.moments()和cv2.HuMoments()這兩個方法來在更複雜的環境中去找到我們的目標區域。 cv2.moments(): 參數: array:表示輸入圖像的單通道數組。通常是灰度圖像,可以是8位或浮點 ...
  • 先上代碼: 1 def barcode(image): 2 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 3 blur = cv2.GaussianBlur(gray, (5, 5), cv2.RETR_EXTERNAL, cv2.CHAIN_APPR ...
  • 今日內容 1.什麼是編程 2.電腦組成原理 3.電腦操作系統 4.編程語言是什麼 什麼是編程 什麼是編程語言 編程語言是人與電腦交流的介質 什麼是編程? 編程:用編程語言寫出一個個文件,這堆文件會達到一個目的。 編程有什麼用? 讓電腦幫我們幹活 電腦組成原理 CPU中央處理器 1.幫我們控 ...
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`QStringListModel`字元串映射組件的常用方法及靈活運用。`QStringListModel` 是 ... ...
  • 介紹 作為一名有著大量微服務系統處理經驗的軟體架構師,我經常遇到一個不斷重覆的問題:“我應該使用 RabbitMQ 還是 Kafka?” 出於某種原因,許多開發人員認為這些技術是可以互換的。雖然在某些情況下確實如此,但 RabbitMQ 還是 Kafka 之間存在根本上的差異。 因此,不同的場景需要 ...
  • 在如今這個人工智慧高速發展的時代,每個行業都在被AI技術影響而改變。層出不窮的AI輔助工具,讓我們看到了機器正在取代一部分基礎的日常工作。對於我們開發者而言,當前最炙手可熱的就是GitHub Copilot,市面上最好的開發者輔助工具。GitHub Copilot所提供的代碼補全、建議、解釋等能力非 ...
  • 今天在看文檔的時候,發現支付寶新出了一個 v3 版本的介面調用方式,感覺有點意思,花了點時間研究了下這個版本要怎麼實現自簽名,大家有興趣可以看看。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...