Python邏輯回歸梯度下降法

本文將通過Python邏輯回歸梯度下降法,對於邏輯回歸的原理、實現方法和應用進行詳細闡述。

一、邏輯回歸原理

邏輯回歸是一種常用的分類算法,其原理可以用線性回歸模型來描述,將線性回歸的預測結果通過一個sigmoid函數映射到[0,1]之間,從而得到預測概率值,最終將概率值大於等於0.5的歸為一類,小於0.5的歸為另一類。

在邏輯回歸中,用到的損失函數是對數損失函數,其形式如下:

def loss_function(theta,X,y):
    h_theta = sigmoid(np.dot(X,theta))
    return np.mean(-(y*np.log(h_theta) + (1-y)*np.log(1-h_theta)))

其中,theta為模型的參數,X為特徵矩陣,y為標籤,sigmoid函數如下:

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

二、梯度下降法

邏輯回歸模型的訓練需要優化模型的參數,常用的方法是梯度下降法。梯度下降法是一種常用的優化算法,其思想是在參數空間中找到一個使得損失函數最小的方向,沿着這個方向進行參數更新。

對於邏輯回歸中的對數損失函數,其梯度可以表示為:

def gradient(theta,X,y):
    h_theta = sigmoid(np.dot(X,theta))
    return np.dot(X.T,(h_theta-y))/y.size

其中,X為特徵矩陣,y為標籤,theta為模型參數。

下面是梯度下降法的實現:

def gradient_descent(theta,X,y,alpha,num_iters):
    for i in range(num_iters):
        theta -= alpha*gradient(theta,X,y)
    return theta

其中,alpha是學習率,num_iters是迭代次數。

三、應用實例

邏輯回歸可以應用於二分類問題,下面以一個二分類問題為例,來演示應用邏輯回歸的過程。數據來源於Kaggle上的一個肝癌患者預測數據集。

首先,導入數據集,進行數據探索和清理。

import pandas as pd
import numpy as np

data = pd.read_csv('liver.csv')
data.head()
data.dropna(inplace=True)
data.describe()

接下來,將數據集分割為訓練集和測試集,將標籤y與特徵X分離。

from sklearn.model_selection import train_test_split

X = data.drop(['Liver_disease'],axis=1)
y = data['Liver_disease']

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)

然後,對於訓練集進行特徵標準化。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

接着,使用梯度下降法進行模型訓練,並計算在測試集上的準確率。

theta = np.zeros(X_train_scaled.shape[1])
alpha = 0.01
num_iters = 1000

theta = gradient_descent(theta,X_train_scaled,y_train,alpha,num_iters)

def predict(theta,X):
    return np.round(sigmoid(np.dot(X,theta)))

predictions = predict(theta,X_test_scaled)
accuracy = np.mean(predictions==y_test)*100
print("準確率:",accuracy)

最終的準確率為70.5%。

四、總結

本文介紹了Python邏輯回歸梯度下降法的原理、實現方法和應用實例,邏輯回歸是一種常用的分類算法,在許多領域中都有廣泛的應用。

原創文章,作者:EIPJB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/373444.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EIPJB的頭像EIPJB
上一篇 2025-04-27 15:26
下一篇 2025-04-27 15:26

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python for循環求1到100的積

    Python中的for循環可以方便地遍歷列表、元組、字典等數據類型。本文將以Python for循環求1到100的積為中心,從多個方面進行詳細闡述。 一、for循環語法 Pytho…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python編程二級證書考試相關現已可以上網購買

    計算機二級Python考試是一項重要的國家級認證考試,也是Python編程的入門考試。與其他考試一樣,Python編程二級證書的考生需要進入正式考試,而為了備考,這篇文章將詳細介紹…

    編程 2025-04-29

發表回復

登錄後才能評論