SMOTE與SMOGN演算法R語言代碼

来源:https://www.cnblogs.com/fkxxgis/p/18302987
-Advertisement-
Play Games

本文介紹基於R語言中的UBL包,讀取.csv格式的Excel表格文件,實現SMOTE演算法與SMOGN演算法,對機器學習、深度學習回歸中,訓練數據集不平衡的情況加以解決的具體方法~ ...


  本文介紹基於R語言中的UBL包,讀取.csv格式的Excel表格文件,實現SMOTE演算法與SMOGN演算法,對機器學習、深度學習回歸中,訓練數據集不平衡的情況加以解決的具體方法。

  在之前的文章SMOGN演算法Python實現:解決回歸分析中的數據不平衡中,我們介紹了基於Python語言中的smogn包,實現SMOGN演算法,對機器學習、深度學習回歸中訓練數據集不平衡的情況加以解決的具體方法;而我們也在上述這一篇文章中提到了,SMOGN演算法的Python實現實在是太慢了,且Python還無法較為方便地實現回歸數據的SMOTE演算法。因此,我們就在本文中介紹一下基於R語言中的UBL包,實現SMOTE演算法與SMOGN演算法的方法。對於這兩種演算法的具體介紹與對比,大家參考上述提到的這一篇文章即可,這裡就不再贅述了。

  首先,我們配置一下所需用到的R語言UBL包。包的下載方法也非常簡單,我們輸入如下的代碼即可。

install.packages("UBL")

  輸入代碼後,按下回車鍵,運行代碼;如下圖所示。

image

  接下來,我們即可開始代碼的撰寫。在這裡,我們最好通過如下的方式新建一個R語言腳本(我這裡是用的RStudio);因為後期執行演算法的時候,我們往往需要對比多種不同的參數搭配效果,通過腳本來運行代碼會比較方便。

  其中,我們需要的代碼如下所示。

library(UBL)
csv_path <- r"(E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\26_Train_Model_New\Train_Model_0710.csv)"
result_path <- r"(E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\26_Train_Model_New\Train_Model_0710_smote_nir.csv)"
data <- read.csv(csv_path)
data_nona <- na.omit(data)
data_nona$PointType <- as.factor(data_nona$PointType)
data_nona$days <- as.factor(data_nona$days)

data_smote <- SmoteRegress(inf_dif~., data_nona, dist = "HEOM", C.perc = "balance")
data_smogn <- SMOGNRegress(inf_dif~., data_nona, thr.rel = 0.6, dist = "HEOM", C.perc = "extreme")

hist(data_nona$inf_dif, breaks = 50)
hist(data_smote$inf_dif, breaks = 50)
hist(data_smogn$inf_dif, breaks = 50)

write.csv(data_smogn, file = result_path, row.names = FALSE)
write.csv(data_smote, file = result_path, row.names = FALSE)

  其中,上述代碼的具體含義如下。

  首先,通過library(UBL)將我們剛剛配置好的UBL包加以載入,該包提供了處理不平衡數據的函數和演算法;隨後,我們可以設置輸入的.csv格式文件的路徑,這一文件中存儲了我們需要加以處理的數據;隨後,我們設置輸出的.csv格式文件的路徑,這一文件就是我們加以處理後的結果數據。

  接下來,我們使用read.csv函數讀取輸入的.csv格式文件,並將其存儲在變數data中。其後的data_nona <- na.omit(data)代碼表示,去除數據中的缺失值,將處理後的數據保存在data_nona中。隨後,這裡需要註意,由於我們的輸入數據中含有數值型的類別變數,因此需要將其轉換為因數(factor)類型,這樣才可以被UBL包識別為類別變數。

  接下來,第一個函數SmoteRegress()就是使用SMOTE演算法對data_nona進行回歸任務的不平衡處理——其中inf_dif是目標變數(因變數),~.表示使用所有其他列作為特征(自變數),dist = "HEOM"表示使用HEOM(Heterogeneous Euclidean-Overlap Metric)距離度量(註意,只要我們的輸入數據中有類別變數,那麼就需要用這一種距離表示方式),最後的C.perc = "balance"表示平衡類別比例。

  隨後的SMOGNRegress()函數,則是使用SMOGN演算法對 data_nona 進行回歸任務的不平衡處理——其中thr.rel = 0.6表示設置相對閾值為0.6,這個參數設置的越大,演算法執行的程度越深;其他參數則和前一個函數類似。這裡如果大家需要對兩個函數的參數加以更進一步的理解,可以直接訪問其官方網站

  最後,為了比較一下我們執行SMOTE演算法與SMOGN演算法的結果,可以繪製一下data_nona中,目標變數inf_dif的直方圖,breaks = 50表示將直方圖分成50個條塊。

  如果通過直方圖確定我們演算法處理後的數據可以接受,那麼就可以將處理結果數據寫入到輸出的.csv格式文件,row.names = FALSE表示不保存行索引。

  執行上述代碼後,我們可以實際看一下三個直方圖的結果情況。首先,是處理前的數據,如下圖所示。

  其次,是SMOTE演算法處理後的數據,如下圖所示。

  最後,是SMOGN演算法處理後的數據,如下圖所示。

  基於以上圖片可以很清楚地看出,SMOTE演算法與SMOGN演算法確實對於原始的數據分佈而言,有著明顯的改變作用。

  至此,大功告成。


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

-Advertisement-
Play Games
更多相關文章
  • 本文主要介紹了Python中創建自定義類時鴨子類型的基本定義、特點和應用場景,同時列舉了“file-like object“的例子對鴨子類型進行了說明。 ...
  • Spring Boot註解主要用於簡化配置、自動裝配組件和實現聲明式服務。以下是詳細的介紹: 1、Springboot註解 核心註解 1. @SpringBootApplication 作用: 標註一個主程式類,表明這是一個Spring Boot應用程式的入口。 功能: 這是一個複合註解,組合了@C ...
  • 有的時候博客內容會有變動,首發博客是最新的,其他博客地址可能會未同步,認準https://blog.zysicyj.top 官方地址 Ubuntu 針對Docker客戶端版本大於 1.10.0 的用戶 您可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器 su ...
  • 在開發過程中,我們可能會遇到需要生成word,或者通過模板word替換相應內容的需求。但在文檔中插入圖片時,如果段落格式設置不對,就會導致圖片只顯示一點點或者不顯示。接下來就介紹一下java編輯word和插入圖片需怎麼處理。 1.引入依賴 首先我們在項目中引入Apache POI,用於讀取和操作wo ...
  • 1. Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高級配置” @目錄1. Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高級配置”2. 攔截器3. Spring MVC 中的攔截器的創建和基本配置3.1 定義攔截3.2 攔截器基本配置3.3 攔截器的 ...
  • 條形碼和二維碼是現代信息交換和數據存儲的重要工具,它們將信息以圖形的形式編碼,便於機器識別和數據處理,被廣泛應用於物流、零售、醫療、教育等各領域。本文將介紹如何使用Python快速生成各種常見的條形碼如Code 128、EAN-13,以及生成二維碼。 Python條碼庫 本文需要用到 Spire.B ...
  • 以下是一個詳細全面的 Spring Boot 使用 WebSocket 的知識點彙總 1. 配置 WebSocket 添加依賴 進入maven官網, 搜索spring-boot-starter-websocket,選擇版本, 然後把依賴複製到pom.xml的dependencies標簽中 配置 We ...
  • 引言 在現代的互聯網應用中,數據安全和隱私保護變得越來越重要。尤其是在介面返回數據時,如何有效地對敏感數據進行脫敏處理,是每個開發者都需要關註的問題。本文將通過一個簡單的Spring Boot項目,介紹如何實現介面數據脫敏。 一、介面數據脫敏概述 1.1 介面數據脫敏的定義 介面數據脫敏是指在介面返 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...