【機器學習】突破分類瓶頸:用邏輯回歸與Softmax回歸解鎖多分類世界

💗💗💗歡迎來到我的博客,你將找到有關如何使用技術解決問題的文章,也會找到某個技術的學習路線。無論你是何種職業,我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章,也歡迎在文章下方留下你的評論和反饋。我期待著與你分享知識、互相學習和建立一個積極的社區。謝謝你的光臨,讓我們一起踏上這個知識之旅!
請添加圖片描述

文章目錄

  • 🍋1. 引言
  • 🍋2. 邏輯回歸
    • 🍋代碼實現
  • 🍋3. Softmax回歸
    • 🍋代碼實現
  • 🍋4. 集成學習
  • 🍋5. 類別不平衡問題
    • 🍋代碼示例(重采樣)
  • 🍋6. 邏輯回歸案例(Iris數據集)
    • 🍋評估結果
  • 🍋結論

🍋1. 引言

在機器學習中,分類問題是最常見的一類問題。無論是二分類還是多分類,解決這些問題的算法有很多,其中邏輯回歸、Softmax回歸和集成學習方法在實際應用中被廣泛使用。但在實際數據中,類別不平衡問題可能會影響模型的效果,如何有效地解決這一問題也是一個亟待解決的難題。

🍋2. 邏輯回歸

概述:邏輯回歸(Logistic Regression)是一種用于二分類問題的經典線性分類器,目標是通過訓練數據集的特征來預測某一類別的概率。

模型原理: 邏輯回歸的核心是使用sigmoid函數將線性組合的輸出映射到[0,1]區間,用于二分類問題:

在這里插入圖片描述
其中,𝑤是權重,𝑏是偏置,𝑋是輸入特征。

🍋代碼實現

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report# 生成數據集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, random_state=42)# 數據分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 訓練模型
model = LogisticRegression()
model.fit(X_train, y_train)# 預測
y_pred = model.predict(X_test)# 評估
print(classification_report(y_test, y_pred))

優缺點:

  • 優點:模型簡單,計算開銷小,容易解釋。
  • 缺點:對于非線性問題效果差,容易受到異常值影響。

🍋3. Softmax回歸

概述:Softmax回歸(Softmax Regression)是邏輯回歸的擴展,處理多分類問題。它將輸入的線性組合映射到多個類別的概率值。

模型原理: Softmax函數是對邏輯回歸的擴展,公式為:
在這里插入圖片描述

?
是偏置。

🍋代碼實現

from sklearn.linear_model import LogisticRegression# 使用Softmax回歸處理多分類問題
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')
model.fit(X_train, y_train)y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

優缺點:

  • 優點:可以處理多分類問題,適用于線性可分問題。
  • 缺點:當類別數量很多時,計算復雜度較高。

🍋4. 集成學習

概述:集成學習是一種通過結合多個弱學習器來提高模型性能的方法。常見的集成學習方法有Bagging、Boosting和Stacking。

from sklearn.ensemble import RandomForestClassifier# 隨機森林分類器
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, y_train)y_pred = rf.predict(X_test)
print(classification_report(y_test, y_pred))

🍋5. 類別不平衡問題

概述:在現實世界中,很多分類任務會面臨類別不平衡的問題,即某一類別的樣本數量遠遠少于其他類別。這會導致模型傾向于預測樣本較多的類別,降低模型的整體性能。

解決方法:

  • 重采樣:通過增加少數類樣本或減少多數類樣本來平衡數據集。
  • 加權損失函數:對模型在少數類樣本上的誤差給予更大的懲罰。
  • 集成方法:例如SMOTE與Boosting結合來提高少數類的預測能力。

🍋代碼示例(重采樣)

from imblearn.over_sampling import SMOTE# 過采樣
smote = SMOTE()
X_res, y_res = smote.fit_resample(X_train, y_train)# 訓練模型
model = LogisticRegression()
model.fit(X_res, y_res)y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

🍋6. 邏輯回歸案例(Iris數據集)

我們將通過以下步驟進行分析:

  • 加載數據:選擇Iris數據集。
  • 數據預處理:包括數據分割與標準化。
  • 訓練模型:使用邏輯回歸訓練模型。
  • 評估模型:通過混淆矩陣、準確率等評估模型效果。

Iris數據集包含150個樣本,分別來自3個不同種類的鳶尾花(Setosa、Versicolor、Virginica)。每個樣本有4個特征:萼片長度、萼片寬度、花瓣長度和花瓣寬度。目標是根據這些特征來預測鳶尾花的種類。

# 導入需要的庫
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt# 1. 加載Iris數據集
iris = load_iris()
X = iris.data  # 特征
y = iris.target  # 標簽# 2. 數據分割:80%訓練數據,20%測試數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. 數據標準化:邏輯回歸對特征的尺度比較敏感
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 4. 訓練邏輯回歸模型
logreg = LogisticRegression(max_iter=200)
logreg.fit(X_train, y_train)# 5. 在測試集上進行預測
y_pred = logreg.predict(X_test)# 6. 模型評估
print("分類報告:")
print(classification_report(y_test, y_pred))# 7. 混淆矩陣
cm = confusion_matrix(y_test, y_pred)
print("混淆矩陣:")
print(cm)# 可視化混淆矩陣
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

代碼分析

  1. 加載Iris數據集:
  • 使用sklearn.datasets.load_iris()加載Iris數據集,數據集已經包含了4個特征和相應的類別標簽。
  1. 數據分割:
  • 使用train_test_split將數據分割為訓練集和測試集,80%的數據用于訓練,20%的數據用于測試。
  1. 數據標準化:
  • 邏輯回歸對輸入特征的尺度非常敏感,因此我們對數據進行標準化(均值為0,方差為1),使用StandardScaler完成這一操作。
  1. 訓練邏輯回歸模型:
  • 使用LogisticRegression()創建一個邏輯回歸模型,并在訓練集上進行訓練。max_iter=200指定最大迭代次數,以確保算法收斂。
  1. 預測與評估:
  • 使用訓練好的模型對測試集進行預測,并通過classification_report顯示分類的準確性、精確度、召回率和F1-score等評估指標。
    使用confusion_matrix計算混淆矩陣,進一步分析模型的分類效果。
  1. 混淆矩陣可視化:
  • 使用Seaborn的heatmap函數將混淆矩陣可視化,更直觀地展示分類效果。

🍋評估結果

分類報告如下:
在這里插入圖片描述
混淆矩陣如下:
在這里插入圖片描述

根據分類報告和混淆矩陣的結果,我們可以得出以下結論:

  • 完美的分類結果:模型的精確度、召回率和F1分數都為1.00,說明模型在每個類別上都沒有錯誤預測,完美地分辨了三個不同種類的鳶尾花。
  • 沒有誤分類:混淆矩陣顯示每個類別的所有樣本都被正確分類,沒有出現任何誤分類的情況。
  • 數據集的簡單性:由于Iris數據集是一個相對簡單且清晰的分類問題,尤其是在特征與類別之間的邊界非常明確時,邏輯回歸能夠非常好地進行分類。

🍋結論

本文對邏輯回歸、Softmax回歸、集成學習方法進行了詳細分析,并討論了類別不平衡問題及其解決方法。通過實驗驗證,選擇合適的分類算法和解決方案能夠顯著提高模型在實際任務中的性能。

希望這篇博客能夠為你提供全面的分類問題解決方案,同時幫助理解如何在復雜場景下處理類別不平衡問題,感興趣的同學別忘了三連哦

在這里插入圖片描述

挑戰與創造都是很痛苦的,但是很充實。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android gradle plugin agp8.6.1發布時間

Android gradle plugin agp8.6.1發布時間 Android Gradle Plugin (AGP) 的版本 8.6.1 是在2023年發布的。具體來說,它是在2023年4月發布的。這個版本的更新包括了多個重要的改進和修復,旨在提升開發者在Android開發過程中的體驗和效率。 主要更新包括&am…

閉包的兩種設計模式

閉包設計模式 概述 閉包是 JavaScript 中的一個重要概念,它允許內層函數訪問外層函數的變量。在實際開發中,閉包經常被用于實現特定的設計模式,主要包括輔助函數模式和工廠模式。 1. 輔助函數模式(Helper Function Pattern&#x…

力扣119:楊輝三角Ⅱ

力扣119:楊輝三角Ⅱ題目思路代碼題目 給定一個非負索引 rowIndex,返回「楊輝三角」的第 rowIndex 行。 思路 楊輝三角的規律: 第n行有n1個數,n從0開始每行的第一個數和最后一個數都是1。除了第一行的數其他的數都是由它左上角和右上角的…

@Linux自建證書 Nginx+HTTPS

文章目錄Linux自建證書并配置Nginx HTTPS1. 準備工作2. 安裝必要的工具3. 自建證書腳本3.1 創建CA根證書(可選,用于自簽名證書鏈)3.2 創建服務器證書腳本4. 證書文件說明5. 配置Nginx使用HTTPS5.1 創建證書存放目錄5.2 配置Nginx站點5.3 啟用…

解決 RAGFlow報錯 `peewee.OperationalError: (1045)`:MySQL 容器密碼錯誤排查手記

文章目錄 ????♂? 深度排查過程 ?? 完美解決方案:同步真實密碼 ? 驗證結果 ?? 經驗總結與最佳實踐 問題現象: 部署 ragflow 時遭遇以下錯誤,且訪問前端頁面無響應: peewee.OperationalError: (1045, "Access denied for user root@192.168.48.6")關鍵線…

lwIP WebSocket 客戶端 TCP PCB 泄漏問題分析與解決

在嵌入式開發中,使用 lwIP 實現 WebSocket 客戶端時,偶爾會遇到反復連接導致 TCP PCB(Protocol Control Block)泄漏,最終連接數達到上限(如 4)后無法再建立新連接的問題。本文將結合實際案例&am…

k8s之Attach 和 Mount

Attach 和 Mount 一、核心概念對比操作Attach(掛載設備)Mount(掛載文件系統)定義將存儲卷(如 EBS、NFS 等)連接到宿主機將已 Attach 的存儲設備映射為宿主機上的文件系統路徑執行者云提供商驅動&#xff08…

API Gateway HTTP API 控制客戶端訪問 IP 源

前言 在 API Gateway REST API 中我們可以配置 Resource policy 來實現對特定客戶端 IP 地址的限制. 然而 HTTP API 并不提供這個功能, 不過我們可以用 Lambda 搓一個 Authorizer 實現等效的功能. 創建 Lambda authorizer import json import os import ipaddressdef lambda…

Linux搭建LAMP環境(CentOS 7 與 Ubuntu 雙系統教程)

Linux搭建LAMP環境 一、LAMP 環境核心概念 定義:由 Linux、Apache、MySQL、PHP 四大組件組成的開源 Web 應用平臺本質:四個獨立開源軟件的組合體,因長期協同使用形成高度兼容性,成為動態網站和服務器的主流解決方案 二、LAMP 四大…

c# 開機自動啟動程序

以下是兩種實現C#軟件開機自啟動的常用方法&#xff0c;根據需求選擇適合的方案&#xff1a; 方法1&#xff1a;通過注冊表實現&#xff08;需管理員權限&#xff09; using Microsoft.Win32; using System.Diagnostics;public static class AutoStartManager {/// <summa…

C語言---動態內存管理

為什么要有動態內存分配我們在學習動態內存管理之前&#xff0c;一直都是通過開辟變量&#xff0c;或者是開辟數組的方式來在內存的棧區開辟空間的&#xff0c;但是這樣的開辟方式有局限性&#xff0c;因為一旦開辟之后&#xff0c;它們的大小就無法改變&#xff0c;就缺少了很…

C++標準庫(std)詳解

C標準庫&#xff08;std&#xff09;詳解——目錄C標準庫&#xff08;std&#xff09;詳解一、命名空間&#xff08;namespace&#xff09;二、主要組件1. 輸入輸出流&#xff08;<iostream>&#xff09;2. 字符串處理&#xff08;<string>&#xff09;3. STL容器&…

ESP32的OTA升級詳解:3. 搭建node/python服務器升級(native ota原生API)

一、OTA兩種方式&#xff1a;app_update 與 esp_https_ota 區別 ESP32/ESP32-S2/ESP32-C3等可通過Wi-Fi或以太網下載新固件到OTA分區實現運行時升級。ESP-IDF提供兩種OTA升級方法&#xff1a; 使用app_update組件的原生API使用esp_https_ota組件的簡化API(支持HTTPS升級) 本次…

byte[]作為接口參數傳遞的方法

在C#中通過WebService或API傳遞byte參數&#xff08;如文件、圖像等二進制數據&#xff09;時&#xff0c;通常有以下幾種實現方式&#xff1a; ?1. 使用Base64編碼&#xff08;推薦REST API&#xff09;? 將byte數組轉換為Base64字符串傳輸&#xff0c;適用于JSON格式的API&…

元宇宙與Web3的深度融合:構建沉浸式數字體驗的愿景與挑戰

一、技術特征與融合基礎1. 元宇宙的技術架構&#xff08;2025年&#xff09;空間構建技術&#xff1a;3D建模與渲染&#xff1a;實時渲染引擎&#xff08;如Unity HDRP&#xff09;支持路徑追蹤光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D場景。…

什么是腦裂

腦裂定義&#xff1a; 腦裂是分布式系統中由于網絡分區&#xff08;Network Partition&#xff09;導致集群節點被分割成多個獨立子集&#xff0c;每個子集認為自己是唯一合法的集群&#xff0c;從而導致數據不一致或系統行為異常的現象。詳細工作原理&#xff1a;發生原因&…

川翔云電腦:云端算力新標桿,創作自由無邊界

一、旗艦機型&#xff1a;4090Ultra 48G 顯存顛覆硬件限制 川翔云電腦最新上線的RTX 4090Ultra 48G 顯存機型&#xff0c;采用 NVIDIA Ada Lovelace 架構&#xff0c;單卡顯存容量達 48GB GDDR6X&#xff0c;較傳統 4090 翻倍&#xff0c;可直接加載 1200 萬面數的超復雜模型&a…

貪心算法(排序)

碼蹄集OJ-活動安排 #include<bits/stdc.h> using namespace std; struct MOOE {int s,e; }; bool compare(const MOOE&a,const MOOE&b) {return a.e<b.e; } int main( ) {int n;cin>>n;vector<MOOE>a(n);for(int i0;i<n;i){cin>>a[i].…

詳解序數回歸損失函數ordinal_regression_loss:原理與實現

在醫療 AI 領域&#xff0c;很多分類任務具有有序類別的特性&#xff0c;如疾病嚴重程度&#xff08;輕度→中度→重度&#xff09;、腫瘤分級&#xff08;G1→G2→G3&#xff09;等。這類任務被稱為序數回歸&#xff08;Ordinal Regression&#xff09;&#xff0c;需要特殊的…

SQL增查

建完庫與建完表后后:1.分別查詢student表和score表的所有記錄student表&#xff1a;score表:2.查詢student表的第2條到5條記錄SELECT * FROM student LIMIT 1,4;3.從student表中查詢計算機系和英語系的學生的信息SELECT * FROM student-> WHERE department IN (計算機系, 英…