線性回歸原理推導與應用(十):邏輯回歸多分類實戰

本篇文章將利用sklearn中內置的鳶尾花數據進行邏輯回歸建模并對鳶尾花進行分類。對于邏輯回歸和線性回歸的相關原理,可以查看之前的文章

數據導入

鳶尾花數據是機器學習里的常用數據,首先導入一些基礎庫并從sklearn中導入數據集

#導入用到的一些python庫
import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsimport warnings
warnings.filterwarnings("ignore")#忽略警告
from sklearn.datasets import load_iris
data = load_iris() #獲取數據
iris_target = data.target #數據結果值,即鳶尾花的分類結果
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #鳶尾花特征的數據iris_features.info()

在這里插入圖片描述
可以看到該數據集總共有150個樣本,包含4個特征變量和1個目標分類變量。4個特征變量為三種鳶尾花的四個特征,分別是花萼長度(cm)、花萼寬度(cm)、花瓣長度(cm)、花瓣寬度(cm),這些形態特征可以被用來識別鳶尾花的種類。目標變量為花的類別,其都屬于鳶尾屬下的三個亞屬,分別是山鳶尾 (Iris-setosa),變色鳶尾(Iris-versicolor)和維吉尼亞鳶尾(Iris-virginica)。具體字段名稱與含義總結如下:

變量描述
sepal length花萼長度(cm)
sepal width花萼寬度(cm)
petal length花瓣長度(cm)
petal width花瓣寬度(cm)
target鳶尾的三個亞屬類別,‘setosa’(0), ‘versicolor’(1), ‘virginica’(2)

數據探索性分析

通過繪制所有特征變量與最終分類的分布和散點圖,來大致看一下特征與結果之間的關系

## 合并特征與分類結果數據
iris_all = iris_features.copy()
iris_all['target'] = iris_targetsns.pairplot(data=iris_all, hue= 'target',palette="bright")
plt.show()

在這里插入圖片描述
可以從圖中中發現,不論是從對角線上的分布圖還是從分類后的散點圖,都可以看出對于不同種類的花,其萼片長、花瓣長、花瓣寬的分布差異較大,換句話說,這些屬性是可以幫助我們去識別不同種類的花的。

同時也繪制一下箱線圖看一下數據的具體分布

for col in iris_features.columns:sns.boxplot(x='target', y=col, saturation=0.5,palette='pastel', data=iris_all)plt.title(col)plt.show()

花萼長度這一個特征的箱線圖如下:
在這里插入圖片描述

建模

首先劃分數據為訓練集與測試集

#劃分數據集與測試集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris_features, iris_target, test_size = 0.2,random_state = 1024)

利用sklearn中的邏輯回歸函數建模,其中函數提供了多分類的功能,對應的參數為:multi_class='auto','ovr',''multinomial'',也就是之前文章中所說的多分類OVR的方法
首先指定為ovr的分類方法,同時輸出相關的參數:

# 定義 邏輯回歸模型 
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(solver='lbfgs', multi_class='ovr')
clf.fit(x_train, y_train)
# 查看其對應的w
print('the weight of Logistic Regression:\n',clf.coef_)# 查看其對應的w0
print('the intercept(w0) of Logistic Regression:\n',clf.intercept_)輸出結果如下:
the weight of Logistic Regression:[[-0.45418407  0.77862646 -2.2268873  -0.87662661][-0.41614677 -1.98168225  0.82180991 -1.2628189 ][-0.28832573 -0.49869581  2.70303022  2.23465912]]
the intercept(w0) of Logistic Regression:[  6.82628324   6.16028196 -13.72510278]

也可以指定為multinomial的分類方法,對應softmax分類,同時輸出相關的參數:

clf = LogisticRegression(solver='lbfgs', multi_class='multinomial')
clf.fit(x_train, y_train)
# 查看其對應的w
print('the weight of Logistic Regression:\n',clf.coef_)# 查看其對應的w0
print('the intercept(w0) of Logistic Regression:\n',clf.intercept_)輸出結果如下:
the weight of Logistic Regression:[[-0.42950628  0.83667747 -2.39313278 -0.95907637][ 0.47647805 -0.24379394 -0.13247376 -0.93516504][-0.04697178 -0.59288353  2.52560654  1.89424141]]
the intercept(w0) of Logistic Regression:[  9.70326709   1.8803977  -11.58366479]

可以看到OVR方法有三個線性回歸的方程,這個就是之前OVR原理中說到的三個分類器,數據會根據這三個線性分類器的結果判斷其最終的結果。
而multinomia的方法也是三個線性回歸得分方程,這是將數據放到三個線性回歸中計算得出三個結果并使用softmax計算得到分類結果

模型訓練好后就可以使用模型進行預測

# 在訓練集和測試集上分布利用訓練好的模型進行預測
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)

輸出測試集的預測分類結果和實際的分類結果看一下:

test_predict
# 測試集預測分類
array([1, 0, 2, 2, 0, 0, 1, 2, 1, 0, 0, 0, 1, 2, 1, 0, 1, 0, 2, 0, 2, 0,1, 0, 2, 1, 2, 2, 2, 2])y_test
#實際分類結果
array([1, 0, 2, 2, 0, 0, 1, 2, 1, 0, 0, 0, 1, 2, 1, 0, 1, 0, 2, 0, 2, 0,1, 0, 2, 1, 2, 2, 2, 2])

模型評價

邏輯回歸作為分類模型,評價一個模型的優劣也是通過分類模型的評價指標來評判的。相關指標的詳細介紹可參閱:https://blog.csdn.net/qq_42692386/article/details/147896278

首先輸出混淆矩陣并將其展示為熱力圖的形式展示

# 查看混淆矩陣
from sklearn import metricsconfusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)# 利用熱力圖對于結果進行可視化
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

得到的混淆矩陣如下:
在這里插入圖片描述
可以看到預測的結果是百分百正確的。當然由于測試集數據的劃分不同,有的時候結果和準確率也會不同。
同時也可以直接輸出準確率:

clf.score(x_test,y_test)

得到的結果也為1。

在這里插入圖片描述

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

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

相關文章

Docker 部署emberstack/sftp 鏡像

Docker 部署 emberstack/sftp 鏡像 1、找到國內可用的docker源,本次測試使用docker.1ms.run 2、下載emberstack/sftp鏡像docker pull docker.1ms.run/emberstack/sftp3、安裝并啟動emberstack/sftp鏡像docker run -d -p 22:22 --name SFTP -v D:\SFTP:/home/sftpuser/sftp --pr…

【華為OD】MVP爭奪戰2(C++、Java、Python)

文章目錄題目題目描述輸入描述輸出描述示例思路核心思路:關鍵觀察:算法步驟:排序策略:特殊情況處理:代碼CJavaPython復雜度分析時間復雜度空間復雜度結果總結題目 題目描述 給定一個整型數組,請從該數組中…

Python打卡訓練營Day58

DAY 58 經典時序預測模型2知識點回顧:時序建模的流程時序任務經典單變量數據集ARIMA(p,d,q)模型實戰SARIMA摘要圖的理解處理不平穩的2種差分n階差分---處理趨勢季節性差分---處理季節性建立一個ARIMA模型,通…

003大模型基礎知識

大模型分類: 技術架構: Encoder Only Bert Decoder Only 著名的大模型都是 Encoder - Decoder T5 是否開源: 開源陣營: Llama DeepSeek Qwen 閉源陣營: ChatGpt Gemini Claude 語言模型發展階段&am…

JVM監控及診斷工具-GUI篇

19.1. 工具概述 使用上一章命令行工具或組合能幫您獲取目標Java應用性能相關的基礎信息,但它們存在下列局限: 1.無法獲取方法級別的分析數據,如方法間的調用關系、各方法的調用次數和調用時間等(這對定位應用性能瓶頸…

適用于Windows系統截圖工具

1.Faststone Capture 官網網址:https://faststone-capture.com/ 網上很多注冊碼:https://www.cnblogs.com/LiuYanYGZ/p/16839503.html 2.Snipaste 官網網址:https://apps.microsoft.com/detail/9p1wxpkb68kx?launchtrue&modefull&…

區塊鏈的三種共識機制——PoW、PoS和DPoS原理

區塊鏈的核心是去中心化網絡的信任機制,而共識機制是實現這一目標的關鍵。共識機制可分為兩個階段:(1)提出共識內容(2)對內容達成共識(遵循最長鏈原則)。三種主流的共識機制主要有工…

React 和 Vue的自定義Hooks是如何實現的,如何創建自定義鉤子

目的:將公共邏輯提取出來,類似于 mixin,解決了mixin的設計缺陷。 React 和 Vue 自定義 Hooks 實現對比 React 自定義 Hooks React 的自定義 Hooks 是 JavaScript 函數,它們以 use 開頭,可以調用其他 Hooks。 基本規則 …

構建高效事件驅動架構:AWS S3與SQS集成實踐指南

引言 在現代云架構中,事件驅動的設計模式越來越受到開發者的青睞。AWS S3與SQS的集成為我們提供了一個強大的事件處理機制,能夠在文件上傳、刪除或修改時自動觸發后續的業務邏輯。本文將詳細介紹如何配置S3事件通知到SQS隊列,并分享實際項目中的最佳實踐。 架構概述 S3事…

C++ -- STL-- List

////// 歡迎來到 aramae 的博客,愿 Bug 遠離,好運常伴! ////// 博主的Gitee地址:阿拉美 (aramae) - Gitee.com 時代不會辜負長期主義者,愿每一個努力的人都能達到理想的彼岸。1. list的介紹及使用 2. list的深度剖…

rt-thread 線程間同步方法詳解

rt-thread 線程間同步方法詳解一、什么是線程間同步線程同步的必要性線程同步的挑戰二、同步方式1、信號量信號量工作機制信號量的管理方式信號量的創建與刪除信號量的獲取與釋放信號量的典型應用場景信號量的注意事項2、互斥量互斥量工作機制互斥量的特性互斥量的操作接口互斥…

Spring Boot + Vue2 實現騰訊云 COS 文件上傳:從零搭建分片上傳系統

目錄 一、項目目標 二、騰訊云 COS 基本配置 1. 創建存儲桶 2. 獲取 API 密鑰 3. 設置跨域規則(CORS) 三、后端(Spring Boot)實現 1. 依賴配置 2. 配置騰訊云 COS(application.yml) 3. 初始化 COS…

使用 Java 獲取 PDF 頁面信息(頁數、尺寸、旋轉角度、方向、標簽與邊框)

目錄 引言 一、安裝和引入PDF處理庫 二、獲取 PDF 頁數 三、獲取頁面尺寸(寬高) 四、獲取頁面旋轉角度 五、判斷頁面方向(橫向 / 縱向) 六、獲取頁面標簽 七、獲取頁面邊框信息 八、總結 引言 了解 PDF 頁面屬性是我們在…

基于 AI 的大前端安全態勢感知與應急響應體系建設

大前端應用(Web、APP、小程序)作為用戶交互的入口,面臨日益復雜的安全威脅:從傳統的 XSS 攻擊、CSRF 偽造,到新型的供應鏈投毒、AI 驅動的自動化爬蟲,再到針對業務邏輯的欺詐攻擊(如薅羊毛、賬號…

Java 與 MySQL 性能優化:MySQL全文檢索查詢優化實踐

文章目錄一、引言二、InnoDB引擎下的全文檢索功能詳解2.1 全文索引的基本概念與原理2.2 全文索引的創建與管理2.3 全文檢索的三種查詢模式2.4 中文全文檢索的挑戰與解決方案三、CMS 場景下的全文檢索性能瓶頸分析3.1 索引構建與維護開銷3.2 查詢性能瓶頸3.3 鎖機制與并發性能問…

應用軟件格式滲透 利用word去滲透(MS10-087)

用到的靶機為:WinXP漏洞原理:一、漏洞觸發機制與核心組件 漏洞根源:RTF文件解析邏輯缺陷 觸發組件:Microsoft Word的RTF(Rich Text Format)解析引擎,具體涉及 mso.dll 模塊中的 路徑規范化函數&…

解密AWS VPC路由表:顯式關聯與隱式關聯,誰決定了網絡出口?

大家好,今天我們來聊一個在 AWS 云計算世界里既基礎又關鍵的話題:VPC 路由表。 很多剛接觸 AWS 的朋友,在配置網絡時可能會遇到這樣的困惑:為什么我的 EC2 實例無法訪問互聯網?為什么某些子網的網絡策略和其他子網不一…

LeetCode題解---<203.移除鏈表元素>

文章目錄題目代碼及注釋關鍵點題目 給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足 Node.val val 的節點,并返回 新的頭節點 。 示例 1: 輸入:head [1,2,6,3,4,5,6], val 6 輸出:[1,2,3,4,…

【JavaScript高級】構造函數、原型鏈與數據處理

目錄構造函數和原型構造函數實例成員和靜態成員構造函數的問題構造函數原型 prototype對象原型 \_\_proto\_\_constructor 構造函數構造函數、實例、原型對象三者之間的關系原型鏈JavaScript 的成員查找機制(規則)原型對象的this指向擴展內置對象繼承cal…

項目進度與預算脫節,如何進行同步管理

項目進度與預算脫節會導致資源浪費、成本超支和項目延期。進行同步管理的方法包括:建立統一的項目進度預算管理體系、實施實時監控與反饋機制、采用項目管理工具輔助同步管理。尤其是實施實時監控與反饋機制,通過持續監測進度與預算的匹配情況&#xff0…