分類與邏輯回歸 - 一個完整的guide

線性回歸和邏輯回歸其實比你想象的更相似 😃
它們都是所謂的參數模型。讓我們先看看什么是參數模型,以及它們與非參數模型的區別。

線性回歸 vs 邏輯回歸

  • 線性回歸:用于回歸問題的線性參數模型。
  • 邏輯回歸:用于分類問題的線性參數模型。

參數回歸模型:

  • 假設函數形式
    • 模型假設特定的數學方程(如線性、多項式)。
    • 例:在線性回歸中,模型假設如下形式:
      Y = β 0 + β 1 X 1 + β 2 X 2 + ? + β n X n + ? Y = \beta_0 + \beta_1X_1 + \beta_2X_2 + \dots + \beta_nX_n + \epsilon Y=β0?+β1?X1?+β2?X2?+?+βn?Xn?+?

      其中 β i \beta_i βi? 是參數, ? \epsilon ? 是誤差項。
  • 參數數量固定
  • 模型復雜度由一組固定參數決定,與訓練數據量無關。
  • 學習高效
  • 由于模型結構預先定義,訓練參數模型通常計算高效。
  • 可解釋性強
  • 許多參數模型(如線性回歸)具有可解釋性,便于理解每個特征對預測的影響。
  • 用有限參數總結數據的模型。
  • 對數據分布有假設。
    • 如線性/邏輯回歸、神經網絡

非參數模型:

  • 無法用有限參數描述的模型。
  • 對數據分布無假設。
    • 如基于實例的學習,使用訓練數據生成假設
  • 例子:kNN 和決策樹

邏輯(Sigmoid)函數

f ( x ) = 1 1 + e ? x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+e?x1?

其導數為:
f ′ ( x ) = f ( x ) ( 1 ? f ( x ) ) f'(x) = f(x)(1 - f(x)) f(x)=f(x)(1?f(x))

這說明:

  • 任意點的導數取決于該點的函數值
  • 當 f(x) 接近 0 或 1 時,導數變得很小
  • 當 f(x) = 0.5(Sigmoid 曲線中點)時導數最大

這個性質使得 sigmoid 在機器學習中很有用:

  • 它將輸入"壓縮"到 [0,1] 區間
  • 導數易于計算(只需輸出乘以 1 減自身)
  • 在 0 和 1 附近導數很小,有助于防止權重更新過大
def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):fx = sigmoid(x)return fx * (1 - fx)      

多元 sigmoid 函數

f ( x , y ) = 1 1 + e ? ( a x + b y + c ) f(x, y) = \frac{1}{1 + e^{-(ax + by + c)}} f(x,y)=1+e?(ax+by+c)1?

其中 a a a b b b c c c 是決定 sigmoid 曲面形狀的常數。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 定義二維 sigmoid 函數
def sigmoid(x, y, a=1, b=1, c=0):return 1 / (1 + np.exp(-(a*x + b*y + c)))# 生成網格點
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = sigmoid(X, Y)# 繪制曲面
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')# 標簽
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Sigmoid(X, Y)')
ax.set_title('多元 Sigmoid 函數的 3D 圖')plt.show()  """
Meshgrid 用于生成 x 和 y 的取值。
- Z 值通過 sigmoid 函數計算。
- 使用 plot_surface() 和 viridis 顏色映射繪制 3D 曲面。
"""

請添加圖片描述

交叉熵方法

交叉熵衡量兩個概率分布之間的差異。在機器學習中,它常作為損失函數,尤其用于分類問題。

關鍵概念:

基本公式

H ( p , q ) = ? ∑ x p ( x ) log ? ( q ( x ) ) H(p,q) = -\sum_x p(x)\log(q(x)) H(p,q)=?x?p(x)log(q(x))

其中:

  • p ( x ) p(x) p(x) 為真實概率分布(標簽)
  • q ( x ) q(x) q(x) 為預測概率分布
  • ∑ x \sum_x x? 表示對所有可能的 x 求和

二元交叉熵(用于二分類):

H ( y , y ^ ) = ? [ y log ? ( y ^ ) + ( 1 ? y ) log ? ( 1 ? y ^ ) ] H(y,\hat{y}) = -[y\log(\hat{y}) + (1-y)\log(1-\hat{y})] H(y,y^?)=?[ylog(y^?)+(1?y)log(1?y^?)]

其中:

  • y y y 為真實標簽(0 或 1)
  • y ^ \hat{y} y^? 為預測概率
def binary_cross_entropy(y_true, y_pred):return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

性質

  • 總是非負
  • 預測與真實分布完全一致時為 0
  • 值越大表示預測越差
  • 對自信但錯誤的預測懲罰更重

交叉熵在分類中的優勢:

  • 比均方誤差提供更強梯度
  • 適用于概率輸出(如 sigmoid 或 softmax)
  • 對過度自信的錯誤預測懲罰大

分類模型

簡單模型:

感知機(Perceptron)

感知機是一種二分類器,通過對輸入特征加權求和并通過激活函數判斷類別。

感知機包括:
  1. 輸入(特征): x 1 , x 2 , … , x n x_1, x_2, …, x_n x1?,x2?,,xn?
  2. 權重: w 1 , w 2 , … , w n w_1, w_2, …, w_n w1?,w2?,,wn?(訓練中學習)
  3. 偏置(b):調整決策邊界
  4. 求和函數: z = ∑ w i x i + b z = \sum w_i x_i + b z=wi?xi?+b
  5. 激活函數:通常為階躍函數,輸出:
    • 1 1 1 z ≥ 0 z \geq 0 z0(一類)
    • 0 0 0 z < 0 z < 0 z<0(另一類)
數學表達

y = f ( ∑ i = 1 n w i x i + b ) y = f\left(\sum_{i=1}^{n} w_i x_i + b \right) y=f(i=1n?wi?xi?+b)

其中 f(z) 為激活函數(常用階躍或符號函數)。

感知機學習算法
  1. 隨機初始化權重和偏置。
  2. 對每個訓練樣本:
    • 用加權和和激活函數計算輸出。
    • 與真實標簽比較,按如下公式更新權重:
      w i = w i + η ( y true ? y pred ) x i w_i = w_i + \eta (y_{\text{true}} - y_{\text{pred}}) x_i wi?=wi?+η(ytrue??ypred?)xi?
    • 類似地調整偏置。
  3. 重復直到分類正確或達到停止條件。
局限性
  • 感知機只能分類線性可分數據(如 AND、OR 邏輯門)。
  • 無法解決如 XOR 這類需多層的非線性問題。
多層感知機(MLP)

為克服線性可分限制,將多個感知機堆疊成多層感知機(MLP),并用非線性激活函數(如 sigmoid、ReLU、tanh)。

示例:用感知機實現 AND 門分類

我們將訓練感知機模擬 AND 邏輯門。

數據集(AND 門)
輸入 x 1 x_1 x1?輸入 x 2 x_2 x2?輸出 y y y
000
010
100
111

感知機應學會正確預測輸出。

感知機模型

感知機公式:

y = f ( w 1 x 1 + w 2 x 2 + b ) y = f(w_1 x_1 + w_2 x_2 + b) y=f(w1?x1?+w2?x2?+b)

其中:

  • w 1 w_1 w1?, w 2 w_2 w2? 為權重
  • b b b 為偏置
  • f ( z ) f(z) f(z) 為階躍激活函數:
    f ( z ) = { 1 , if? z ≥ 0 0 , if? z < 0 f(z) = \begin{cases} 1, & \text{if } z \geq 0 \\ 0, & \text{if } z < 0 \end{cases} f(z)={1,0,?if?z0if?z<0?
學習算法
  1. 初始化權重 w 1 w_1 w1?, w 2 w_2 w2? 和偏置 b b b(如小隨機值)。
  2. 對每個訓練樣本 ( x 1 , x 2 , y ) (x_1, x_2, y) (x1?,x2?,y)
    • 計算 z = w 1 x 1 + w 2 x 2 + b z = w_1 x_1 + w_2 x_2 + b z=w1?x1?+w2?x2?+b
    • 應用激活函數得預測 y ^ \hat{y} y^?
    • 若預測錯誤,按如下公式更新權重:
      w i = w i + η ( y true ? y ^ ) x i w_i = w_i + \eta (y_{\text{true}} - \hat{y}) x_i wi?=wi?+η(ytrue??y^?)xi?

      其中 η \eta η 為學習率。
  3. 重復直到權重收斂。
決策邊界可視化

讓我們可視化訓練好的 AND 感知機:

  1. 感知機找到一條分隔數據的直線。
  2. 由于 AND 可線性分割,感知機可解決。
  3. 決策邊界是一條直線。

請添加圖片描述

上圖展示了感知機對 AND 門的分類:

  • 紅圈(類別 0)為 AND 輸出為 0 的點。
  • 藍方塊(類別 1)為 AND 輸出為 1 的點。
  • 虛線為感知機學到的決策邊界。

虛線下方為 0,上方為 1。由于 AND 可線性分割,單層感知機可正確分類。

K 近鄰(KNN)

KNN 是一種非參數、基于實例的學習方法,可用于__分類__和__回歸__。它根據最近鄰的多數類別(分類)或均值(回歸)做預測。

步驟:
  • 選擇 K:確定考慮的最近鄰數量。
  • 計算距離:用如下度量計算新點與所有訓練點的距離:
    • 歐氏距離:
      $ d(A,B) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $
    • 曼哈頓距離
    • 閔可夫斯基距離
  • 找到 K 個最近鄰:確定距離新點最近的 K 個點。
  • 做出預測:
    • 分類:取 K 鄰居中最多的類別(多數投票)。
    • 回歸:取 K 鄰居的均值。

想象你有一組數據,要將新點分為紅或藍:

  • 若 K = 3,取最近 3 個鄰居。
  • 若 2 個為藍,1 個為紅,則新點歸為藍。

KNN 優點:

  • 簡單易實現
  • 無需訓練(惰性學習)
  • 適合小數據集
  • 可用于分類和回歸

KNN 缺點:

  • 計算量大(大數據集時每次預測都要算距離)
  • 對無關特征和噪聲敏感
  • K 的選擇很關鍵

KNN 適用場景:

  • 小到中等規模數據集
  • 需要可解釋性
  • 作為復雜模型前的基線

如何選 K:

  • K 小 → 鄰域小 → 高復雜度 → 易過擬合
  • K 大 → 鄰域大 → 低復雜度 → 易欠擬合
  • 實踐中常選 3–15,或 K < 𝑁(N 為訓練樣本數)。
# KNN 示例實現
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import make_classification
from matplotlib.colors import ListedColormap# 生成合成數據集
# n_features=2: 2 個特征。
# n_informative=2: 兩個特征都有用。
# n_redundant=0: 無冗余特征。
# n_clusters_per_class=1: 每類一個簇。
X, y = make_classification(n_samples=200, n_features=2, n_informative=2, n_redundant=0, n_classes=2, n_clusters_per_class=1, random_state=42)
# 訓練 KNN 模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X, y)# 創建決策邊界的網格
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))# 對網格每個點做預測
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)# 繪制決策邊界
plt.figure(figsize=(6, 4))
cmap_light = ListedColormap(["#FFAAAA", "#AAAAFF"])
cmap_bold = ListedColormap(["#FF0000", "#0000FF"])
plt.contourf(xx, yy, Z, cmap=cmap_light, alpha=0.5)# 繪制數據點
scatter = plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold, edgecolor="k", s=50)
plt.legend(handles=scatter.legend_elements()[0], labels=["類別 0", "類別 1"])# 標簽
plt.xlabel("特征 1")
plt.ylabel("特征 2")
plt.title("K 近鄰決策邊界 (K=5)")
plt.show()# 下圖為 KNN 決策邊界說明:
# 紅/藍區域:兩類的決策邊界。
# 不同顏色的點:不同類別的數據點。
# 平滑邊界:KNN 根據 K 個鄰居的多數類別分配標簽。

請添加圖片描述

混淆矩陣

混淆矩陣用于評估分類模型的性能。它是一個表格,匯總了模型的預測與實際結果的對比。

  • 真正例(TP):被正確預測為正類的樣本數。
  • 真負例(TN):被正確預測為負類的樣本數。
  • 假正例(FP):被錯誤預測為正類的樣本數(I 型錯誤)。
  • 假負例(FN):被錯誤預測為負類的樣本數(II 型錯誤)。

混淆矩陣有助于理解模型的表現,尤其是區分不同類別的能力。它揭示了模型的錯誤類型,并可用于計算準確率、精確率、召回率和 F1 分數等指標。

  1. 坐標軸
  • X 軸(列):模型預測的類別。
  • Y 軸(行):數據集的真實類別。
  1. 結構
  • 每個單元格顯示實際類別與預測類別組合的樣本數。
  • 對角線(左上到右下)為正確預測。
  1. 解讀
  • TP 和 TN 多說明模型表現好。
  • FP 和 FN 多說明模型有改進空間。

在代碼中,混淆矩陣常用熱力圖可視化,便于觀察分布。annot=True 參數確保每個單元格顯示具體數值。

請添加圖片描述

ROC-AUC 分數是用于評估二分類模型質量的指標。
ROC 代表受試者工作特征曲線(Receiver Operating Characteristic curve)。
AUC 代表曲線下的面積(Area Under the Curve)。

  • ROC 曲線繪制不同閾值下的真正率(TPR)與假正率(FPR)。
  • AUC(曲線下的面積)用單一數值總結模型在所有閾值下的表現。

真正率(TPR):TP / (TP + FN) → 也叫召回率
假正率(FPR):FP / (FP + TN)

  • AUC 范圍 0 到 1:
  • 1.0 = 完美分類器
  • 0.5 = 隨機猜測
  • <0.5 = 比隨機還差(系統性誤分)

應用場景:

  • 二分類問題
  • 尤其適用于:
  • 類別不平衡(如欺詐檢測、疾病診斷)
  • 關注預測排序而非具體標簽

重要性:

  • 衡量模型區分不同類別的能力。
  • 在類別不平衡時比準確率更穩健。
  • 可跨閾值比較模型。

本教程到此結束,其他常用分類模型如 SVM、決策樹、隨機森林等將在后續介紹。

如有問題或反饋,歡迎聯系我。

感謝閱讀!

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

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

相關文章

英語寫作中“每一個”each individual、every individual、every single的用法

一、Individual &#xff1a;個體&#xff0c;相對于團體&#xff0c;例如&#xff1a; Individual competition &#xff08;個人比賽&#xff09;&#xff0c;相對于team competition &#xff08;團體比賽&#xff09; Individual users &#xff08;個人用戶&#xff09;…

由于 z(x,y) 的變化導致的影響(那部分被分給了鏈式項)

? 本質問題&#xff1a;為什么鏈式法則中 ? F ? x \frac{\partial F}{\partial x} ?x?F? 不考慮 z z ( x , y ) zz(x,y) zz(x,y)&#xff1f; &#x1f50d; 一、關鍵是&#xff1a;偏導數的定義是什么&#xff1f; 我們從最根本的定義開始&#xff1a; ? F ( x , y…

python打卡day44@浙大疏錦行

知識點回顧&#xff1a; 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰&#xff1a;resnet18 作業&#xff1a; 嘗試在cifar10對比如下其他的預訓練模型&#xff0c;觀察差異&#xff0c;盡可能和他人選擇的不同嘗試通過ctrl進入resnet的…

十一(3) 類,加深對拷貝構造函數的理解

class ClassName { public: // 拷貝構造函數&#xff1a;參數是同類型對象的引用&#xff08;通常為 const 引用&#xff09; ClassName(const ClassName& other) { // 復制 other 的成員變量到當前對象 } }; 參數要求&#xff1a;必須是同類型對象的引用&#xff0…

網頁后端開發(基礎1--maven)

maven的作用&#xff1a; Maven是一款管理和構建Java項目的工具。 1.依賴管理&#xff1a; 方便快捷的管理項目依賴的資源&#xff08;jar包&#xff09; 不用手動下載jar包&#xff0c;只需要中maven中引用&#xff0c;maven會查找本地倉庫。若本地倉庫沒有&#xff0c;會直…

認識電子元器件---高低邊驅動

目錄 一、基本概念 二、關鍵參數對比 三、工作原理 &#xff08;1&#xff09;高邊驅動 &#xff08;2&#xff09;低邊驅動 四、典型的應用場景 五、如何選擇 一、基本概念 可以理解成&#xff1a;高低邊驅動是MOS/IGBT的一種應用方式 高低邊驅動是電路拓撲概念&#…

JavaScript 標簽加載

目錄 JavaScript 標簽加載script 標簽的 async 和 defer 屬性&#xff0c;分別代表什么&#xff0c;有什么區別1. 普通 script 標簽2. async 屬性3. defer 屬性4. type"module"5. 各種加載方式的對比6. 使用建議 JavaScript 標簽加載 script 標簽的 async 和 defer …

C/CPP 結構體、聯合體、位段內存計算 指南

C/CPP 結構體、聯合體、位段內存計算 指南 在C語言中&#xff0c;結構體、聯合體和位段是對數據的高級抽象&#xff0c;它們可以讓程序員以更易于理解的方式來操作復雜的數據結構。然而&#xff0c;這些結構在內存中的布局可能并不如它們的語法結構那樣直觀&#xff0c;特別是當…

ASR(語音識別)語音/字幕標注 通過via(via_subtitle_annotator)

文章目錄 1 VIA 官網資料2 語音/字幕標注3 鍵盤快捷鍵常規當一個時間片段被選中時圖像或視頻幀中的空間區域 1 VIA 官網資料 VIA官網&#xff1a;https://www.robots.ox.ac.uk/~vgg/software/via/ VIA官網標注示例&#xff1a;https://www.robots.ox.ac.uk/~vgg/software/via/…

mq安裝新版-3.13.7的安裝

一、下載包&#xff0c;上傳到服務器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安裝 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置環境變量&#xff0c;直接就安裝了。 erl…

高通平臺PCIE EP模式log丟失問題

高通平臺PCIE EP模式log丟失問題 1 問題背景2 問題分析2.1 對比USB2.1.1 Logtool優化2.1.2 Device mhi與fs對比2.2 優化方案2.2.1 Diag系統優化2.2.2 Host mhi優化3 最終成果1 問題背景 高通5G模組如SDX55\SDX62\SDX65\SDX72\SDX75等支持pcie ep模式。會通過pcie與host(如MT7…

Python應用輸入輸出函數

大家好!在 Python 編程中&#xff0c;輸入輸出函數是與用戶進行交互的橋梁。通過輸入函數&#xff0c;我們可以獲取用戶的輸入數據&#xff1b;通過輸出函數&#xff0c;我們可以向用戶展示程序的運行結果。對于初學者來說&#xff0c;掌握基本的輸入輸出操作是編程入門的重要一…

如何使用 Ansible 在 Ubuntu 24.04 上安裝和設置 LNMP

在當今世界,自動化是有效管理和部署 Web 應用程序的關鍵。Ansible 是一個強大的自動化工具,它是一款開源軟件配置、配置管理和應用程序部署工具。本文將指導您使用 Ansible 在 Ubuntu 服務器上安裝 LNMP 堆棧(Linux、Nginx、MySQL、PHP)。 先決條件 為了執行本指南中討論的…

Xela矩陣三軸觸覺傳感器的工作原理解析與應用場景

Xela矩陣三軸觸覺傳感器通過先進技術模擬人類觸覺感知&#xff0c;幫助設備實現精確的力測量與位移監測。其核心功能基于磁性三維力測量與空間位移測量&#xff0c;能夠捕捉多維觸覺信息。該傳感器的設計不僅提升了觸覺感知的精度&#xff0c;還為機器人、醫療設備和制造業的智…

RK3288項目(四)--linux內核之V4L2框架及ov9281驅動分析(中)

目錄 一、引言 二、V4L2其他部件驅動分析 ------>2.1、mipi-dphy ------------>2.1.1、dts ------------>2.1.2、driver ------------>2.1.3、notifier機制 ------------>2.1.4、異步回調 ------------>2.1.5、V4L2 subdev ------>2.2、mipi-csi…

容器-使用slim減少10x+大模型鏡像

slim&#xff08;原docker-slim&#xff09;是一個開源工具&#xff0c;全稱SlimToolkit&#xff08;https://github.com/slimtoolkit/slim&#xff09;&#xff0c;用于基于已有的Docker鏡像減小鏡像的大小&#xff0c;同時盡可能保留容器的功能。它通過分析鏡像的運行環境和應…

Golang基礎學習

?????????? 初見golang語法 go項目路徑 cd $GOPATH //ls可以看到有bin,pkg,src三個文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序執行&#xff1a; go run hello.go//如果想分兩步執行&#xff1a; go build hello.go ./hello導入包的…

OPenCV CUDA模塊圖像處理-----對圖像執行 均值漂移濾波(Mean Shift Filtering)函數meanShiftFiltering()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 在 GPU 上對圖像執行 均值漂移濾波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于圖像分割或平滑處理。 該函數將輸入圖像中的…

電路圖識圖基礎知識-遠程/本地啟停電動機(二十一)

在實際的生產中&#xff0c;經常會需要電動機的控制可以就地控制和遠方控制&#xff0c;在集中的控制室中&#xff0c;遠 方控制電動機的啟動、停止。在就地設置啟動、停止按鈕或是緊急停車按鈕&#xff0c;以滿足生產的需要。 1.遠程、多點及連鎖控制電動機電路 2.元器件配置…

SpringBoot+uniapp 的 Champion 俱樂部微信小程序設計與實現,論文初版實現

摘要 本論文旨在設計并實現基于 SpringBoot 和 uniapp 的 Champion 俱樂部微信小程序&#xff0c;以滿足俱樂部線上活動推廣、會員管理、社交互動等需求。通過 SpringBoot 搭建后端服務&#xff0c;提供穩定高效的數據處理與業務邏輯支持&#xff1b;利用 uniapp 實現跨平臺前…