邏輯回歸(sigmoid函數、混淆矩陣、精確率召回率F1)

目錄

一、概述

1、邏輯回歸

2、激活函數??sigmoid函數

3、最大似然估計

二、邏輯回歸

1、原理

2、損失函數

3、代碼

三、混淆矩陣

1、定義

2、舉例

3、代碼

四、分類評估方法

1、精確率(Precision)

2、召回率(Recall)

3、F1(score)

4、代碼

五、ROC曲線、AUC指標

1、ROC曲線

2、ROC 曲線圖像中,4 個特殊點的含義

3、案例:ROC 曲線的繪制

4、AUC指標:曲線下面積

六、每日回顧

一、概述

1、邏輯回歸

????????邏輯回歸是一種廣泛應用于分類任務的統計模型,尤其擅長解決二分類問題(例如預測郵件是否為垃圾郵件、客戶是否會購買產品等)。它通過邏輯函數(如Sigmoid函數)將線性回歸的輸出映射到[0,1]區間,從而得到事件發生的概率。盡管名稱中包含"回歸",但它實際上是一種分類算法。????????

原理:把線性函數的輸出作為激活函數輸入,設置閾值完成分類

2、激活函數??sigmoid函數

????????Sigmoid函數(也叫Logistic函數)是機器學習和神經網絡中一個非常經典的非線性函數。它的核心作用是將任意實數輸入映射到(0,1)區間,這個特性使其特別適合處理概率和二分類問題。

作用:把(-∞, +∞) 映射到 (0, 1),增加模型的非線性因素

單調遞增函數,拐點在x=0,y=0.5(可自定義)的位置

導函數公式:

優點??:

??????????輸出概率解釋??:其輸出值在(0,1)區間,天然適合解釋為概率

????????平滑可導??:函數全程平滑且易于求導,便于在其基礎上進行梯度下降等優化算法

缺點??:

????????梯度消失??:當輸入值的絕對值較大時(對應輸出接近0或1),其導數會趨近于0。在深層神經網絡中,這可能導致梯度在反向傳播過程中逐漸變小并消失,使得網絡訓練困難

????????輸出非零中心??:Sigmoid函數的輸出恒為正值。這可能導致在訓練過程中,權重更新時產生“之”字形抖動,收斂速度變慢

??????????計算成本??:涉及指數運算(e^{-x}),計算量較大

3、最大似然估計

根據觀測到的結果來估計模型算法中的未知參數

最大似然估計的基本原理是??“既然事件已經發生,就假設它的發生概率是最大的”??。這是一種在已知結果的前提下,反向推測最可能的原因(參數)的思維方式。

例子:

假設有一枚不均勻的硬幣,出現正面的概率和反面的概率是不同的。假定出現正面的概率為𝜃

拋了6次得到如下現象 D = {正面,反面,反面,正面,正面,正面}。每次投擲事件都是相互獨立的。則根據產生的現象D,來估計參數𝜃是多少?

f(𝜃) = θ?(1?θ)2 令導數=0求極值,可估計出𝜃值

二、邏輯回歸

1、原理

??????????利用一個線性回歸模型的計算結果,再通過一個Sigmoid激活函數,將這個結果映射到0到1之間,將其解釋為“屬于某個類的概率”??。

把線性回歸的輸出,作為邏輯回歸的輸入

2、損失函數

損失函數的工作原理:每個樣本預測值有A、B兩個類別,真實類別對應的位置,概率值越大越好

3、代碼

import pandas as pd
import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScalerdata = pd.read_csv("breast-cancer-wisconsin.csv")
print('清洗前數據集大小為:',data.shape)
# 數據清洗處理
# 將數據中的問號("?")替換為NaN值,然后刪除包含NaN值的行
# 這樣可以清理掉無效或缺失的數據記錄
data = data.replace(to_replace="?", value=np.nan)
data = data.dropna()
print('清洗后數據集大小為:', data.shape)# x = data[data.columns[1:-1]]
x = data.iloc[:, 1:-1]
y = data['Class']
X_train, X_test, y_train, y_test = (train_test_split(x, y, test_size=0.2, random_state=22))transfor = StandardScaler()
X_train = transfor.fit_transform(X_train)
X_test = transfor.transform(X_test)es = LogisticRegression()
es.fit(X_train, y_train)y_predict = es.predict(X_test)
print('預測結果:\n', y_predict)
acc = accuracy_score(y_test, es.predict(X_test))
print('準確率:', acc)

三、混淆矩陣

1、定義

真實值是 正例 的樣本中,被分類為 正例 的樣本數量有多少,叫做真正例(TP,True Positive)
真實值是 正例 的樣本中,被分類為 假例 的樣本數量有多少,叫做偽反例(FN,False Negative)
真實值是 假例 的樣本中,被分類為 正例 的樣本數量有多少,叫做偽正例(FP,False Positive)
真實值是 假例 的樣本中,被分類為 假例 的樣本數量有多少,叫做真反例(TN,True Negative)

2、舉例

已知:樣本集10樣本,有 6 個惡性腫瘤樣本,4 個良性腫瘤樣本,我們假設惡性腫瘤為正
模型A:預測對了 3 個惡性腫瘤樣本,4 個良性腫瘤樣本,計算:TP、FN、FP、TN

真正例 TP 為:3???????? 偽反例 FN 為:3

偽正例 FP 為:0? ? ? ? 真反例 TN 為:4

3、代碼

from sklearn.metrics import confusion_matrix
import pandas as pd# 已知:樣本集10個樣本,有 6個惡性腫瘤樣本,4個良性腫瘤樣本,我們假設惡性腫瘤為正
# 1、定義真實數據值,手動設置正反例
y_train = ['惡性', '惡性', '惡性', '惡性', '惡性', '惡性','良性', '良性', '良性', '良性']label = ['惡性', '良性']  # 樣本標簽,標簽1為正例,標簽2為反例
df_label = ['惡性(正例)', '良性(假例)']# 2、定義預測數據集,手動設置正反例
y_pred_A = ['惡性', '惡性', '惡性','良性', '良性', '良性', '良性', '良性', '良性', '良性']# 3、計算混淆矩陣
# 參數1:真實值,參數2:預測值,參數3:標簽
cm_A = confusion_matrix(y_train, y_pred_A, labels=label)
print(f"混淆矩陣為:\n{cm_A}")# 4、將混淆矩陣轉為DataFrame
# 參數1:矩陣,參數2:行標簽,參數3:列標簽
df_cm_A = pd.DataFrame(cm_A, index=df_label, columns=df_label)
print(f"混淆矩陣為:\n{df_cm_A}")y_pred_b = ['惡性', '惡性', '惡性','惡性', '惡性', '惡性','惡性', '惡性', '惡性','良性']
cm_b = confusion_matrix(y_train, y_pred_b, labels=label)
df_cm_b = pd.DataFrame(cm_b, index=df_label, columns=df_label)
print(f"混淆矩陣為:\n{df_cm_b}")

運行結果

四、分類評估方法

1、精確率(Precision)

查準率,對預測的正例樣本準確率。比如:把惡性腫瘤當做正例樣本,想知道模型對惡性腫瘤的預測準確率。

2、召回率(Recall)

也叫查全率,指的是預測為真正例樣本占所有真實正例樣本的比重。

3、F1(score)

若對模型的精度、召回率都有要求,希望知道模型在這兩個評估方向的綜合預測能力

4、代碼

from sklearn.metrics import recall_score, f1_score
from sklearn.metrics import precision_score
y_train = ['惡性', '惡性', '惡性', '惡性', '惡性', '惡性','良性', '良性', '良性', '良性']
y_pred_A = ['惡性', '惡性', '惡性','良性', '良性', '良性', '良性', '良性', '良性', '良性']
y_pred_b = ['惡性', '惡性', '惡性','惡性', '惡性', '惡性','惡性', '惡性', '惡性','良性']
def dm01_precision():result1 = precision_score(y_train, y_pred_A, pos_label='惡性')print('模型A的精確率:', result1)result2 = precision_score(y_train, y_pred_b, pos_label='惡性')print('模型B的精確率:', result2)
def dm02_Recall():result1 = recall_score(y_train, y_pred_A, pos_label='惡性')print('模型A的召回率:', result1)result2 = recall_score(y_train, y_pred_b, pos_label='惡性')print('模型B的召回率:', result2)
def dm03_F1():result1 = f1_score(y_train, y_pred_A, pos_label='惡性')print('模型A的F1:', result1)result2 = f1_score(y_train, y_pred_b, pos_label='惡性')print('模型B的F1:', result2)
if __name__ == '__main__':dm01_precision()dm02_Recall()dm03_F1()

五、ROC曲線、AUC指標

1、ROC曲線

??ROC曲線??(Receiver Operating Characteristic Curve,受試者工作特征曲線)是一種圖形化工具,用于展示二分類模型在不同分類閾值下的性能表現。它的??橫軸是假陽性率(FPR, False Positive Rate)??,??縱軸是真陽性率(TPR, True Positive Rate)??。

??真陽性率 (TPR)??,也稱為??召回率(Recall)??或??靈敏度(Sensitivity)??,計算公式為:TPR = TP / (TP + FN)。它表示??實際為正例的樣本中,被模型正確預測為正例的比例??。

??假陽性率 (FPR)??,計算公式為:FPR = FP / (FP + TN)。它表示??實際為負例的樣本中,被模型錯誤預測為正例的比例。

2、ROC 曲線圖像中,4 個特殊點的含義

3、案例:ROC 曲線的繪制

會得出不同閾值下的點坐標:(0, 0)、(0, 0.5)、(0, 1)、(0.25, 1)、(0.5, 1)、(0.75, 1)

則由 TPR 和 FPR 構成的 ROC 圖像為

4、AUC指標:曲線下面積

??AUC??(Area Under the Curve)則是??ROC曲線下的面積??,用于量化模型的整體分類性能。AUC的取值范圍在0到1之間。

ROC曲線的優劣可以通過曲線下的面積(AUC)來衡量,AUC越大表示分類器性能越好。??AUC與ROC曲線??:AUC就是這條ROC曲線下方的面積。ROC曲線越靠近左上角(即FPR越小,TPR越大),模型的性能通常越好,其AUC值也更接近1。

????????當AUC=0.5時,表示分類器的性能等同于隨機猜測當
????????當AUC=1時,表示分類器的性能完美,能夠完全正確地將正負例分類。
??????(AUC=0時也可以,完美相反地正確預測)

AUC的核心優勢在于其??對類別不平衡不敏感??,且??綜合了模型在所有可能閾值下的表現??。理解其??概率解釋??(隨機正樣本得分高于隨機負樣本的概率)有助于更深刻地把握其內涵。

六、每日回顧

1:邏輯回歸主要解決什么類型的問題?邏輯回歸的流程是什么 ?

2:混淆矩陣的四個基本元素(TP、TN、FP、FN)分別代表什么含義?

3:精確率(Precision)、召回率(Recall)的計算公式是什么?分別反映模型的什么能力?

4:ROC 曲線的橫縱軸分別是什么?曲線上的每個點代表什么含義?

5:AUC 指標的含義是什么?其取值范圍是多少?AUC=0.5、AUC=1 、AUC=0分別說明模型的什么性能?

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

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

相關文章

Redis底層實現原理之五大基礎結構

文章目錄1. 基礎結構和編碼類型2. 編碼類型和數據結構實現2.1 字符串(String)2.2 壓縮列表(listpack)2.3 哈希表(hashtable)2.4 快速列表(quicklist)2.5 整數集合(intset…

火山引擎數據智能體DataAgent總結分享

數據的冰山:看得見的資產與看不見的鴻溝 這張圖片用“冰山”類比的方式展示了數據資產管理中的可見與不可見問題,并突出了數據利用的核心挑戰與潛在陷阱。 1. 冰山之上的“看得見的資產” 內容:數據庫、報表、指標等結構化、顯性的數據資源。 核心挑戰: 需要從“采集存儲”…

100種高級數據結構 (速查表)

一、 基礎結構的擴展與組合 (Advanced Linear Structures) 這些結構在數組、鏈表、隊列、棧等基礎結構上增加了特定功能或約束。雙端隊列 (Deque - Double-Ended Queue) 介紹:允許在隊列的前后兩端都進行插入和刪除操作的線性結構。應用場景:工作竊取算法…

一個開源的企業官網簡介

簡介一個完美的企業官網系統,支持手機端和電腦端展示企業風采,還可以展示企業產品/企業新聞資訊等等.普通用戶PC端展示普通用戶手機端展示管理后臺

TCP實現線程池競爭任務

服務端&#xff1a;#include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netinet/ip.h> #include<strings.h> #include<unistd.h> #include<ctype.h> #include<arpa/inet.h&…

Redis C++ 實現筆記(F篇)

Implementing Redis in C : F Redis C 實現筆記&#xff08;F篇&#xff09; 前言 本章代碼及思路均來自Build Your Own Redis with C/C 本文章只闡述我的理解想法&#xff0c;以及需要注意的地方。 本文章為續<<Implementing Redis in C : E>>所以本文章不再…

finally 與 return的執行順序

一、第一次試驗public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static StringBuilder aaa(Integer i) throws InterruptedException {StringBuilder sb new StringBuilder();try {i.toString();return sb;} ca…

Git安裝教程

簡介 Git 是目前全球最流行的分布式版本控制系統&#xff08;Distributed Version Control System, DVCS&#xff09;&#xff0c;核心作用是追蹤文件修改歷史、支持多人協同開發&#xff0c;并能高效管理代碼&#xff08;或任何文本類文件&#xff09;的版本迭代。它由 Linux…

Linux安裝RTL8821CE無線網卡驅動

1. 查看網卡芯片$ lspci | grep Net 01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter2. 預備配套sudo apt install -y dkms git3. 下載驅動并安裝git clone https://github.com/tomaspinho/rtl8821ce.git cd r…

vue3存儲/獲取本地或會話存儲,封裝存儲工具,結合pina使用存儲

目錄 一、基本用法&#xff08;原生 API&#xff09; 1. 存儲數據 2. 獲取數據 3. 刪除數據 二、Vue3 中封裝成工具函數&#xff08;推薦&#xff09; 三、以上工具函數在 Vue3 組件中使用 1. 在選項式 API 中使用 2. 在組合式 API&#xff08;setup 語法糖&#xff09;…

【Flink】DataStream API:基本轉換算子、聚合算子

目錄基本轉換算子映射&#xff08;map&#xff09;過濾&#xff08;filter&#xff09;扁平映射聚合算子按鍵分區&#xff08;keyBy&#xff09;簡單聚合&#xff08;sum/min/max/minBy/maxBy&#xff09;規約聚合&#xff08;reduce&#xff09;基本轉換算子 有如下POJO類用來…

從淘寶推薦到微信搜索:查找算法如何支撐億級用戶——動畫可視化

本篇技術博文摘要 &#x1f31f; 本文通過動畫可視化深入解析數據結構中的核心查找算法&#xff0c;從基礎概念到高階應用&#xff0c;全面覆蓋順序查找、折半查找、分塊查找、B樹/B樹及散列查找的核心原理與實現細節。文章以動態演示為核心工具&#xff0c;直觀展現算法執行過…

圖像正向扭曲反向扭曲

在圖像處理領域&#xff0c;正向扭曲&#xff08;Forward Warping&#xff09;和反向扭曲&#xff08;Backward Warping&#xff09;是兩種核心的圖像坐標映射與像素重采樣技術&#xff0c;核心區別在于“像素映射的方向”——是從“原始圖像”到“目標圖像”&#xff0c;還是從…

【C語言】 第三課 函數與棧幀機制詳解

1 函數的基本概念 在C語言中&#xff0c;函數是程序的基本執行單元。一個函數的定義包括返回類型、函數名、參數列表和函數體。例如&#xff1a; int add(int x, int y) { // 函數定義int z x y;return z; }在使用函數前&#xff0c;通常需要聲明&#xff08; declaration&am…

多個大體積PDF文件怎么按數量批量拆分成多個單獨文件

在現代社會中&#xff0c;電子文檔在我們的身邊無所不在&#xff0c;而PDF文件時我們日常接觸非常多的文檔類型之一。PDF由于格式穩定、兼容性好&#xff0c;因此經常被用于各行各業。但是&#xff0c;我們平時在制作或搜集PDF文件時&#xff0c;文件太大&#xff0c;傳輸和分享…

ansible-角色

角色 一、利用角色構造ansible playbook 隨著開發更多的playbook&#xff0c;會發現有很多機會重復利用以前編寫的playbook中的代碼。或許&#xff0c;一個用于為某一應用配置MySQL數據庫的play可以改變用途。通過利用不同的主機名、密碼和用戶來為另一個應用配置MySQL數據庫。…

git命令行打patch

在 Git 里打 patch&#xff08;補丁&#xff09;其實就是把某些提交的改動導出來&#xff0c;生成一個 .patch 文件&#xff0c;方便別人用 git apply 或 git am 打進代碼里。&#x1f539; 常用方式1. 基于提交導出 patch導出最近一次提交&#xff1a;git format-patch -1 HEA…

文華財經多空提示指標公式 變色K線多空明確指標 文華wh6贏順多空買賣提示指標

XX:240C;YY:MA(C,1);A1:POW(XX,2)/360-POW(YY,2)/260;A5:EMA2(EMA2(A1,20),5),LINETHICK2;A6:A5*0.9999,COLORSTICK;A20:EMA2(EMA2(A5,20),5),LINETHICK2;A60:EMA2(EMA2(A20,20),5),LINETHICK2;支撐:HHV(A5,30),COLORRED;天數:BARSSINCE(A5HHV(A5,0));YL:REF(A5,1)2.79-天數*0.…

記錄一個防重Toast

當我們已經對某個按鈕做了防暴力點擊&#xff0c;但是依然在業務上有些復雜交互的情況&#xff0c;需要我們封裝一個防重Toast。針對這類情況&#xff0c;可以直接使用下面的showDebouncedToastdata class ToastInfo(val id: Any? null,val command: MediaCommandDebouncer.M…

在線測評系統---第n天

主要完成了退出登錄前后的代碼的實現&#xff0c;以及題目列表的查詢1.退出登錄前端引入了全局前置守衛&#xff0c;如果cookie里面沒有token則直接跳轉到login頁面&#xff1b;有則直接跳轉到layout頁面&#xff0c;無需重新登錄后端接收到退出登錄&#xff0c;將token置為無效…