Sklearn 中的邏輯回歸

邏輯回歸的數學模型

基本模型

邏輯回歸主要用于處理二分類問題。二分類問題對于模型的輸出包含 0 和 1,是一個不連續的值。分類問題的結果一般不能由線性函數求出。這里就需要一個特別的函數來求解,這里引入一個新的函數 Sigmoid 函數,也成為邏輯函數。
h θ ( x ) = g ( θ T x ) z = θ T x g ( z ) = 1 1 + e ? z h_\theta(x) = g(\theta^Tx) \\ z = \theta^Tx \\ g(z) = \frac{1}{1 + e^{-z}} hθ?(x)=g(θTx)z=θTxg(z)=1+e?z1?
這里函數 g ( z ) g(z) g(z) 將任何實數映射到了 ( 0 , 1 ) (0, 1) (0,1) 區間中,從而將任何值函數轉換為適合分類的函數。這里我們將線性回歸模型函數插入到這個函數中形成新的邏輯回歸模型。

圖 1 Sigmoid 函數

如圖所示,轉換后可以看到在 x = 0 x = 0 x=0 處有一個明顯的變化,兩邊的函數值無限接近于 0 和 1,而中間的交界處則根據輸出來判斷如何分類,例如 h θ ( x ) = 0.7 h_\theta(x) = 0.7 hθ?(x)=0.7 則表示有 70% 的概率輸出為 1。

決策邊界

決策邊界(Decision boundary)即為輸出的分界點。二分類問題的輸出是離散的零一分類,也就是說:
h θ ( x ) ≥ 0.5 → y = 1 h θ ( x ) < 0.5 → y = 0 h_\theta(x) \ge 0.5 \rarr y = 1 \\ h_\theta(x) < 0.5 \rarr y = 0 hθ?(x)0.5y=1hθ?(x)<0.5y=0
那么此處由 Sigmoid 函數的性質可以得到:
θ T x ≥ 0 ? y = 1 θ T x < 0 ? y = 0 \theta^T x \ge 0 \Rightarrow y = 1 \\ \theta^T x < 0 \Rightarrow y = 0 θTx0?y=1θTx<0?y=0
那么此處根據輸入 x x x 來判斷輸出從當前值跳變到另一個值的邊界,即為決策邊界。在上面 Sigmoid 函數的實例圖中,假設輸入函數僅是簡單的 z = x z = x z=x,并且認為當 h θ ( x ) ≥ 0.5 h_\theta(x) \ge 0.5 hθ?(x)0.5 時,輸出 y = 1 y = 1 y=1,那么可以看到, x = 0 x = 0 x=0? 即為其決策邊界。

在更復雜的情況下,假設

θ T x = θ 0 + θ 1 x 1 + θ 2 x 2 \theta^T x = \theta_0 + \theta_1 x_1 + \theta_2 x_2 θTx=θ0?+θ1?x1?+θ2?x2?

那么通過變形可得到
θ 0 + θ 1 ? x = ? θ 2 ? y y = θ 0 + θ 1 ? x θ 2 \theta_0 + \theta_1 \cdot x = - \theta_2 \cdot y \\ y = \frac{\theta_0 + \theta_1 \cdot x}{\theta_2} θ0?+θ1??x=?θ2??yy=θ2?θ0?+θ1??x?

代價函數

根據模型的代價函數(Cost function)即可根據對當前參數的評估最后找到最優解,邏輯回歸的代價函數定義為:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) C o s t ( h θ ( x ) , y ) = ? log ? ( h θ ( x ) ) if? y = 1 C o s t ( h θ ( x ) , y ) = ? log ? ( 1 ? h θ ( x ) ) if? y = 0 J(\theta) = \frac{1}{m}\sum^m_{i = 1}\mathrm{Cost}(h_\theta(x^{(i)}), y^{(i)}) \\ \begin{align} &\mathrm{Cost}(h_\theta(x), y) = -\log(h_\theta(x)) & \text{ if } y = 1 \\ &\mathrm{Cost}(h_\theta(x), y) = -\log(1 - h_\theta(x)) & \text{ if } y = 0 \\ \end{align} J(θ)=m1?i=1m?Cost(hθ?(x(i)),y(i))?Cost(hθ?(x),y)=?log(hθ?(x))Cost(hθ?(x),y)=?log(1?hθ?(x))??if?y=1?if?y=0??

圖 2 Sigmoid 的損失函數

這里可以看出,當 y = 1 and? h θ ( x ) → 0 y = 1 \text{ and } h_\theta(x) \rarr 0 y=1?and?hθ?(x)0 時,損失函數的值會趨向于無窮,可以直觀看到損失函數對模型預測與實際值的差距評估。機器學習的主要目標就是要將損失函數降到最低,以求得最優模型。

梯度下降

通過梯度下降(Gradient descent)找到最優解,首先將代價函數轉化為如下形式。不難看出在某一情況時,另一種情況會被化為 0,這樣做的目的是方便編程:
C o s t ( h θ ( x ) , y ) = ? y log ? ( θ ( x ) ) ? ( 1 ? y ) log ? ( 1 ? h θ ( x ) ) \mathrm{Cost}(h_\theta(x), y) = - y \log(\theta(x)) - (1 - y) \log(1 - h_\theta(x)) Cost(hθ?(x),y)=?ylog(θ(x))?(1?y)log(1?hθ?(x))
那么整個代價函數如下:
J ( θ ) = ? 1 m ∑ i = 1 m [ y ( i ) log ? ( h θ ( x ( i ) ) ) + ( 1 ? y ( i ) ) log ? ( 1 ? h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m}\sum_{i = 1}^{m}[y^{(i)}\log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h\theta(x^{(i)}))] J(θ)=?m1?i=1m?[y(i)log(hθ?(x(i)))+(1?y(i))log(1?hθ(x(i)))]
則可以求出梯度下降迭代的步驟:
θ j : = θ j ? α ? J ( θ ) ? θ j 即? θ j : = θ j ? α m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha\frac{\partial{J(\theta)}}{\partial{\theta_j}} \\ \text{即 } \theta_j := \theta_j - \frac{\alpha}{m}\sum^m_{i = 1}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} θj?:=θj??α?θj??J(θ)??θj?:=θj??mα?i=1m?(hθ?(x(i))?y(i))xj(i)?

Sklearn 邏輯回歸模型

數據整理

假設有一份學生的成績單和大學錄取的名單,學生們通過兩門考試的兩門分數來被決定是否被錄取。這是一個兩個特征的二分類問題,首先整理一下數據。

data = pd.read_csv('ex2data1.txt', names=['exam1', 'exam2', 'is_admitted'])
print(data.head())# 將數據拆分成是否錄取的兩批,繪制散點
positive = data[data['is_admitted'] == 1]
negative = data[data['is_admitted'] == 0]fig, ax = plt.subplots(figsize=(12, 8))
ax.scatter(positive['exam1'], positive['exam2'], s=50, c='b', alpha=0.5, label='Admitted')
ax.scatter(negative['exam1'], negative['exam2'], s=50, c='r', alpha=0.5, label='Not Admitted')
ax.legend()
ax.set_xlabel('Exam 1 Score')
ax.set_ylabel('Exam 2 Score')
plt.show()
       exam1      exam2  admitted
0  34.623660  78.024693         0
1  30.286711  43.894998         0
2  35.847409  72.902198         0
3  60.182599  86.308552         1
4  79.032736  75.344376         1

圖 3 數據預覽

邏輯回歸模型

這里將從上面讀取的數據傳遞給定義的邏輯回歸的模型,并訓練得到模型參數。

X = data[['exam1', 'exam2']].values
Y = data['is_admitted'].values# 定義并訓練模型
model = LogisticRegression()
model.fit(X, Y)print("Model Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
Model Coefficients: [[0.20535491 0.2005838 ]]
Intercept: [-25.05219314]

驗證

驗證模型的準確性,首先從模型中取出相關參數,即為 θ \theta θ 。這里需要說明一下數學模型中與 Sklearn 邏輯回歸模型的屬性,首先求出決策邊界:
y = θ 0 + θ 1 ? x θ 2 y = \frac{\theta_0 + \theta_1 \cdot x}{\theta_2} y=θ2?θ0?+θ1??x?
這里 θ 0 \theta_0 θ0? 為偏置, θ 1 \theta_1 θ1? θ 2 \theta_2 θ2? 是每個特征的系數。兩者分別對應了兩個屬性。

coef = model.coef_[0]
intercept = model.intercept_[0]
x = np.linspace(30, 100, 1000)
y = -(coef[0] * x + intercept) / coef[1]fig, ax = plt.subplots(figsize=(12, 8))
ax.scatter(positive['exam1'], positive['exam2'], s=50, c='b', alpha=0.5, label='Admitted')
ax.scatter(negative['exam1'], negative['exam2'], s=50, c='r', alpha=0.5, label='Not Admitted')
ax.plot(x, y, label='Decision Boundary', c='grey')
ax.legend()
ax.set_xlabel('Exam 1 Score')
ax.set_ylabel('Exam 2 Score')
plt.show()

最后可以看出決策邊界較好的分割了兩類點集。

圖 4 決策邊界

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

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

相關文章

FPGA|使用quartus II通過AS下載POF固件

1、將開發板設置到AS下載擋位&#xff0c;或者把下載線插入到AS端口 2、打開quartus II&#xff0c;選擇Tools→Programmer→ Mode選擇Active Serial Programming 3、點擊左側Add file…&#xff0c;選擇 .pof 文件 →start 4、勾選program和verify&#xff08;可選&#xff0…

.Net / C# 分析文件編碼 并將 各種編碼格式 轉為 另一個編碼格式 ( 比如: GB2312→UTF-8, UTF-8→GB2312)

相關庫 .Net 8 編碼識別: github.com/CharsetDetector/UTF-unknown <PackageReference Include"UTF.Unknown" Version"2.5.1" />代碼 using UtfUnknown;var dir_path "D:\\Desktop\\新建文件夾2\\新建文件夾"; var dir_new_path &quo…

32. C 語言 安全函數( _s 尾綴)

本章目錄 前言什么是安全函數&#xff1f;安全函數的特點主要的安全函數1. 字符串操作安全函數2. 格式化輸出安全函數3. 內存操作安全函數4. 其他常用安全函數 安全函數實例示例 1&#xff1a;strcpy_s 和 strcat_s示例 2&#xff1a;memcpy_s示例 3&#xff1a;strtok_s 總結 …

淺談網絡 | 容器網絡之Flannel

目錄 云原生網絡架構深度解構&#xff1a;Flannel的設計哲學與實現機制Flannel架構解析&#xff1a;三層核心設計原則UDP模式&#xff08;用戶態隧道&#xff09;VXLAN模式&#xff08;內核態隧道&#xff09;Host-GW模式&#xff08;直連路由&#xff09; 生產環境架構選型與調…

autosar bsw 的關鍵模塊

AUTOSAR&#xff08;AUTomotive Open System ARchitecture&#xff09;的**基礎軟件層&#xff08;BSW&#xff0c;Basic Software&#xff09;**是汽車電子系統標準化的核心&#xff0c;負責提供硬件抽象、通信、診斷、安全等基礎服務。以下是BSW的關鍵模塊及其功能分類&#…

hive:基本數據類型,關于表和列語法

基本數據類型 Hive 的數據類型分為基本數據類型和復雜數據類型 加粗的是常用數據類型 BOOLEAN出現ture和false外的其他值會變成NULL值 沒有number,decimal類似number 如果輸入的數據不符合數據類型, 映射時會變成NULL, 但是數據本身并沒有被修改 創建表 創建表的本質其實就是在…

2025創業思路和方向有哪些?

創業思路和方向是決定創業成功與否的關鍵因素。以下是一些基于找到的參考內容的創業思路和方向&#xff0c;旨在激發創業靈感&#xff1a; 一、技術創新與融合&#xff1a; 1、智能手機與云電視結合&#xff1a;開發集成智能手機功能的云電視&#xff0c;提供通訊、娛樂一體化體…

航空客戶價值的數據挖掘與分析(numpy+pandas+matplotlib+scikit-learn)

航空客戶價值的數據挖掘與分析(numpy+pandas+matplotlib+scikit-learn) K-Means聚類:https://en.wikipedia.org/wiki/K-means_clustering寫在前面 實現目的:基于K-Means聚類分析模型實現航空客戶價值大數據分析。 電腦系統:Windows 使用軟件:Anaconda(Jupyter Notebook)…

Three.js實戰項目02:vue3+three.js實現汽車展廳項目

文章目錄 實戰項目02項目預覽項目創建初始化項目模型加載與展廳燈光加載汽車模型設置燈光材質設置完整項目下載實戰項目02 項目預覽 完整項目效果: 項目創建 創建項目: pnpm create vue安裝包: pnpm add three@0.153.0 pnpm add gsap初始化項目 修改App.js代碼&#x…

年化19.3%策略集|ctpbee_api替換成openctp整合backtrader實盤方案(代碼+數據)

原創內容第782篇&#xff0c;專注量化投資、個人成長與財富自由。 昨天我們把backtraderctpbee的實盤整合代碼跑通了&#xff0c;年化19.3%&#xff0c;回撤僅8%的實盤策略&#xff0c;以及backtrader整合CTPBee做實盤&#xff08;附python代碼和數據&#xff09; 這兩周我們加…

Android Studio 正式版 10 周年回顧,承載 Androider 的崢嶸十年

Android Studio 1.0 宣發于 2014 年 12 月&#xff0c;而現在時間來到 2025 &#xff0c;不知不覺間 Android Studio 已經陪伴 Androider 走過十年歷程。 Android Studio 10 周年&#xff0c;也代表著了我的職業生涯也超十年&#xff0c;現在回想起來依然覺得「唏噓」&#xff…

OpenEuler學習筆記(十四):在OpenEuler上搭建.NET運行環境

一、在OpenEuler上搭建.NET運行環境 基于包管理器安裝 添加Microsoft軟件源&#xff1a;運行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm&#xff0c;將Microsoft軟件源添加到系統中&#xff0c;以便后續能夠從該源安裝.…

詳解python的修飾符

Python 中的修飾符&#xff08;Decorator&#xff09;是一種用于修改或擴展函數或類行為的工具。它們本質上是一個函數&#xff0c;接受另一個函數或類作為參數&#xff0c;并返回一個新的函數或類。修飾符通常用于在不修改原函數或類代碼的情況下&#xff0c;添加額外的功能。…

低代碼產品插件功能一覽

下圖是統計的目前市面上流行的低代碼、零代碼產品的插件功能。 產品名稱 產品類型 官方插件數量 支持拓展 官方插件功能 宜搭 零代碼 3 暫不支持 云打印、CAD看圖、打印表單詳情 微搭 低代碼 1 暫不支持 小程序 明道云 低代碼 2 支持 視圖、工作流節點 簡道…

Vscode編輯器下 Markdown無法顯示圖片

1.問題 在vscode 編輯器中無法預覽 markdon 文件中的圖片 2.解決方案 大部分出現這種情況是因為新版本的vscode會阻攔有風險的資源顯示&#xff0c;將安全等級調低即可。 方式一&#xff1a; 1.打開任意 MD 文件&#xff0c;ctrl&#xff0c;調出設置 2. 輸入 markdown.ch…

前端axios攔截器

1. 在main.js導入axios 2. 通過axios對象定義攔截器 import {createApp} from vue import App from ./App.vue import Antd from ant-design-vue; import ant-design-vue/dist/antd.css; import axios from "axios"; import router from ./router import store from …

php-phar打包避坑指南2025

有很多php腳本工具都是打包成phar形式&#xff0c;使用起來就很方便&#xff0c;那么如何自己做一個呢&#xff1f;也找了很多文檔&#xff0c;也遇到很多坑&#xff0c;這里就來總結一下 phar安裝 現在直接裝yum php-cli包就有phar文件&#xff0c;很方便 可通過phar help查看…

自動化運維的未來:從腳本到AIOps的演進

點擊進入IT管理資料庫 一、自動化運維的起源&#xff1a;腳本時代 &#xff08;一&#xff09;腳本在運維中的應用場景 在自動化運維的發展歷程中&#xff0c;腳本扮演著至關重要的角色&#xff0c;它作為最初的操作入口&#xff0c;廣泛應用于諸多日常運維工作場景里。 在系統…

【2024年華為OD機試】(B卷,100分)- 熱點網站統計(Java JS PythonC/C++)

一、問題描述 題目描述 企業路由器的統計頁面需要動態統計公司訪問最多的網頁URL的Top N。設計一個算法&#xff0c;能夠高效動態統計Top N的頁面。 輸入描述 每一行都是一個URL或一個數字&#xff1a; 如果是URL&#xff0c;代表一段時間內的網頁訪問。如果是數字N&#…

《DeepSeek 網頁/API 性能異常(DeepSeek Web/API Degraded Performance):網絡安全日志》

DeepSeek 網頁/API 性能異常&#xff08;DeepSeek Web/API Degraded Performance&#xff09;訂閱 已識別 - 已識別問題&#xff0c;并且正在實施修復。 1月 29&#xff0c; 2025 - 20&#xff1a;57 CST 更新 - 我們將繼續監控任何其他問題。 1月 28&#xff0c; 2025 - 22&am…