使用numpy構建邏輯回歸模型及訓練流程

邏輯回歸模型構建及訓練流程

關于邏輯回歸的數據,有很多學習?的?例樣本。這?我們使?scikit learn提供的數據集?成函數來創建
具體參數可參照官網

Scikit-learn 是? Python 開發的開源機器學習庫,?泛?于數據挖掘和數據分析。

  • 特點:易?、?效,具有豐富的?具,涵蓋分類、回歸、聚類等多種機器學習算法。
  • 功能:提供數據預處理、模型選擇、評估等功能,便于構建完整的機器學習?作流。
  • 優勢:有詳細?檔和?例,社區活躍,能降低開發成本、提?效率。
#生成分類數據
from sklearn.datasets  import make_classification  #生成的是numpy.ndarray數組(隨機生成)
from sklearn.model_selection import train_test_split #劃分數據集 
import numpy as np
demo_X,demo_y = make_classification() #默認生成100個樣本,20個特征,2個類別
print(demo_X) #特征
print(demo_y) #標簽
print(demo_X.shape)
print(demo_y.shape)
[[ 0.96837399  0.69991556 -0.80719258 ...  1.07349589  0.600931011.25834368][ 1.54064333 -0.72874526  0.05101656 ...  1.69469224  0.68078434-0.22108232][ 1.3130273   0.13845124 -0.17878829 ... -2.51988675  0.73565307-0.61197128]...[-0.96507974  0.62850721  0.25545924 ... -1.03533221 -0.02341121.86283345][-1.09606837 -0.92451774 -0.59875319 ... -0.19421878  0.62418285-0.26886614][-0.18375534  0.12046227  0.52649374 ...  0.93921941  0.896507111.14815417]]
[0 0 1 1 1 0 1 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 0 0 1 00 0 1 0 1 0 1 1 0 0 1 0 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 1 0 0 0 00 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0]
(100, 20)
(100,)

查看生成結果發現,這是一個元組,里面包含兩組值,默認生成100個樣本,20個特征,2個類別

demo_X[1]
array([ 1.54064333, -0.72874526,  0.05101656,  2.66218782,  1.94089634,-0.10555552,  0.12877297, -0.47275342, -0.23722334, -0.24897953,0.29021104, -1.03756101, -0.6875083 , -1.57963226,  1.81221622,-0.04901801, -0.91022508,  1.69469224,  0.68078434, -0.22108232])
demo_y[1]
0

步驟

  1. 數據準備,參數初始化
  2. 模型計算函數
  3. 計算損失函數
  4. 計算梯度
  5. 模型訓練

模型訓練的數據,通常還需要拆分為訓練集和測試集。?的是為了防?數據泄露

**數據泄露(Data Leakage)**指的是訓練數據中包含了不應該有的信息,這些信息會使模型在評估時表現得?在真實應?場景中更好,導致對模型性能的?估,使得模型的泛化能?被錯誤判斷。

#1.數據準備,參數初始化
#生成150個樣本,10個特征,2個類別的訓練數據
X,y = make_classification(n_samples=150,n_features=10) #shape(150,10)#數據拆分
#局部樣本訓練模型(過擬合模型)測試預測不好(泛化能力差)
#全局樣本訓練模型(泛化能力好)測試預測好(泛化能力好)
#新樣本數據模型表現不好(泛化能力差)
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) #30%作為測試集
#X_train, X_test表示一部分用作訓練,一部分用作測試,避免過擬合
print(X_train.shape) 
print(X_test.shape)
(105, 10)
(45, 10)
#權重參數
theta = np.random.randn(1,10) #10個特征 1個權重 #shape(1,10) #隨機生成一個權重參數
#偏置參數
bias = 0 
#超參數
lr = 0.01 #學習率
epochs = 3000 #迭代次數,訓練次數
#假設 X 是shape(3,3)
#[[x1,x2,x3],
# [x4x5,x6],
# [x7,x8,x9]]
#X.T 是shape(3,3)
#[[x1,x4,x7],
# [x2,x5,x8],
# [x3,x6,x9]]
# 
#假設theta 模型參數shape(1,3)
#[[w1,w2,w3]]
#theta * X.T = shape(1,3) * shape(3,3) = shape(1,3)
#y1 = w1*x1 + w2*x2 + w3*x3
#y2 = w1*x4 + w2*x5 + w3*x6
#y3 = w1*x7 + w2*x8 + w3*x9
#y = [[y1,y2,y3]]
##2. 模型計算函數
def forward(X,theta,bias):#線性運算z = np.dot(theta,X.T) + bias #shape(105,10)#sigmod 是為了將線性運算的結果映射到0-1之間y_hat = 1/(1+np.exp(-z)) #shape(105,10)return y_hat        #3. 計算損失函數
def loss(y,y_hat):#損失函數e = 1e-8 #防止除0錯誤return - y*np.log(y_hat +e ) - (1-y)*np.log(1-y_hat + e)#4. 計算梯度
def calc_gradient(x,y,y_hat):m = x.shape[-1] #樣本數delta_theta = np.dot(y_hat-y,x)/m #shape(1,10) #梯度delta_bias = np.mean(y_hat-y) #shape(1,) #偏置的梯度return delta_theta,delta_bias#5. 模型訓練
for i in range(epochs): #epochs是訓練次數#前向傳播y_hat = forward(X_train,theta,bias)#計算損失loss_value = loss(y_train,y_hat)#計算梯度delta_theta,delta_bias = calc_gradient(X_train,y_train,y_hat)#更新參數theta = theta - lr * delta_thetabias = bias - lr * delta_biasif i % 100 == 0:print(f"epoch:{i},loss:{np.mean(loss_value)}")#計算準確率acc = np.mean(np.round(y_hat) == y_train) #[Fales,True,True,False,True] --> [0,1,1,0,1] --> 0.6 print(f"epoch:{i},loss:{np.mean(loss_value)},acc:{acc}")
epoch:0,loss:0.9826484121456485
epoch:0,loss:0.9826484121456485,acc:0.6
epoch:100,loss:0.28410629245685803
epoch:100,loss:0.28410629245685803,acc:0.8857142857142857
epoch:200,loss:0.24510667568678654
epoch:200,loss:0.24510667568678654,acc:0.8666666666666667
epoch:300,loss:0.23505007869724906
epoch:300,loss:0.23505007869724906,acc:0.8571428571428571
epoch:400,loss:0.23103972248220034
epoch:400,loss:0.23103972248220034,acc:0.8666666666666667
epoch:500,loss:0.22908011250548505
epoch:500,loss:0.22908011250548505,acc:0.8761904761904762
epoch:600,loss:0.2280154352157034
epoch:600,loss:0.2280154352157034,acc:0.8761904761904762
epoch:700,loss:0.22739935077291418
epoch:700,loss:0.22739935077291418,acc:0.8761904761904762
epoch:800,loss:0.2270275272465418
epoch:800,loss:0.2270275272465418,acc:0.8761904761904762
epoch:900,loss:0.22679615751708468
epoch:900,loss:0.22679615751708468,acc:0.8761904761904762
epoch:1000,loss:0.2266487526019183
epoch:1000,loss:0.2266487526019183,acc:0.8761904761904762
epoch:1100,loss:0.22655303465776838
epoch:1100,loss:0.22655303465776838,acc:0.8761904761904762
epoch:1200,loss:0.22648987077080793
epoch:1200,loss:0.22648987077080793,acc:0.8761904761904762
epoch:1300,loss:0.22644759054763966
epoch:1300,loss:0.22644759054763966,acc:0.8761904761904762
epoch:1400,loss:0.2264189111347839
epoch:1400,loss:0.2264189111347839,acc:0.8666666666666667
epoch:1500,loss:0.22639920302759006
epoch:1500,loss:0.22639920302759006,acc:0.8666666666666667
epoch:1600,loss:0.22638547862134517
epoch:1600,loss:0.22638547862134517,acc:0.8666666666666667
epoch:1700,loss:0.22637578566413857
epoch:1700,loss:0.22637578566413857,acc:0.8666666666666667
epoch:1800,loss:0.22636883499686028
epoch:1800,loss:0.22636883499686028,acc:0.8666666666666667
epoch:1900,loss:0.2263637676238141
epoch:1900,loss:0.2263637676238141,acc:0.8666666666666667
epoch:2000,loss:0.2263600065967938
epoch:2000,loss:0.2263600065967938,acc:0.8666666666666667
epoch:2100,loss:0.22635716155827576
epoch:2100,loss:0.22635716155827576,acc:0.8666666666666667
epoch:2200,loss:0.2263549665310887
epoch:2200,loss:0.2263549665310887,acc:0.8666666666666667
epoch:2300,loss:0.2263532389959844
epoch:2300,loss:0.2263532389959844,acc:0.8666666666666667
epoch:2400,loss:0.2263518527619451
epoch:2400,loss:0.2263518527619451,acc:0.8666666666666667
epoch:2500,loss:0.22635071986180172
epoch:2500,loss:0.22635071986180172,acc:0.8666666666666667
epoch:2600,loss:0.22634977840264098
epoch:2600,loss:0.22634977840264098,acc:0.8666666666666667
epoch:2700,loss:0.22634898437242262
epoch:2700,loss:0.22634898437242262,acc:0.8666666666666667
epoch:2800,loss:0.2263483060903649
epoch:2800,loss:0.2263483060903649,acc:0.8666666666666667
epoch:2900,loss:0.2263477204327887
epoch:2900,loss:0.2263477204327887,acc:0.8666666666666667
#模型推理
idx = np.random.randint(len(X_test)) #隨機生成一個索引作為測試樣本
x = X_test[idx] #shape(10,)
y = y_test[idx] #shape(1,)
#模型預測
predict = np.round(forward(x,theta,bias)) 
print(f"y:{y},predict:{predict}")
y:1,predict:[1.]

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

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

相關文章

python的多線程和多進程程序編程

CPU密集型使用多進程,IO密集型使用多線程 查看進程ID和線程ID的命令分別是os.getpid()和threading.current_thread() 多進程使用multiprocessing就可以了,通常使用進程池來完成操作,阻塞主進程使用join方法 多線程使用threading模塊&#…

代碼隨想錄算法訓練營第十五天

LeetCode題目: 654. 最大二叉樹617. 合并二叉樹700. 二叉搜索樹中的搜索98. 驗證二叉搜索樹2843. 統計對稱整數的數目 其他: 今日總結 往期打卡 654. 最大二叉樹 跳轉: 654. 最大二叉樹 學習: 代碼隨想錄公開講解 問題: 給定一個不重復的整數數組 nums 。 最大二叉樹 可以用…

[GN] Uart協議解碼器源碼各個方法

系列文章目錄 sigrokdecode 模塊學習指南 — 準備階段 通訊協議 - Uart sigrokdecode 模塊 UART協議解碼器源碼解析 Uart協議解碼器源碼各個方法 文章目錄 系列文章目錄引入庫parity_ok注解類型枚舉options參數annotations 注解annotation_rows 注解分組接收(RX&a…

技術分享|iTOP-RK3588開發板Ubuntu20系統旋轉屏幕方案

iTOP-3588開發板采用瑞芯微RK3588處理器,是全新一代AloT高端應用芯片,采用8nmLP制程,搭載八核64位CPU,四核Cortex-A76和四核Cortex-A55架構,主頻高達2.4GHz。是一款可用于互聯網設備和其它數字多媒體的高性能產品。 在…

Unity IL2CPP內存泄漏追蹤方案(基于Memory Profiler)技術詳解

一、IL2CPP內存管理特性與泄漏根源 1. IL2CPP內存架構特點 內存區域管理方式常見泄漏類型托管堆(Managed)GC自動回收靜態引用/事件訂閱未取消原生堆(Native)手動管理非托管資源未釋放橋接層GCHandle/PInvoke跨語言引用未正確釋放 對惹,這里有一個游戲開發交流小組…

消融實驗_草稿

五列數據 \begin{table}[htbp]\caption{Performance Comparison of Standalone KD Variants vs MIRKD-enhanced Variants on ACNE04 Dataset\label{AblationKD}}\centering\renewcommand{\arraystretch}{1.2}\scriptsize\begin{tabularx}{\linewidth}{{}l *{3}{>{\centering…

面向對象高級(1)

文章目錄 final認識final關鍵字修飾類:修飾方法:修飾變量final修飾變量的注意事項 常量 單例類什么是設計模式?單例怎么寫?餓漢式單例的特點是什么?單例有啥應用場景,有啥好處?懶漢式單例類。 枚舉類認識枚…

不用額外下載jar包,idea快速查看使用的組件源碼

以nacos為例子,在idea中引入了nacos依賴,就可以查看源碼了。 2. idea選擇open(不關閉項目直接選擇file-open也可以), 在maven的倉庫里找到對應的包,打開 2.idea中選擇 jar包,選擇 add as library 3.這樣j…

小白學習java第12天:IO流之緩沖流

1.IO緩沖流: 之前我們學習的都是原始流(FileInputStream字節輸入流、FileOutputStream字節輸出流、FIleReader字符輸入流、FIleWriter字符輸出流)其實我們可以知道對于這些其實性能都不是很好,要么太慢一個一個,要么就…

高速電路設計概述

1.1 低速設計和高速設計的例子 本節通過一個簡單的例子,探討高速電路設計相對于低速電路設計需要考慮哪些不同的問題。希望讀者通過本例,對高速電路設計建立一個表象的認識。至于高速電路設計中各方面的設計要點,將在后續章節展開詳細的討論…

MySQL8.0.31安裝教程,附pdf資料和壓縮包文件

參考資料:黑馬程序員 一、下載 點開下面的鏈接:https://dev.mysql.com/downloads/mysql/ 點擊Download 就可以下載對應的安裝包了, 安裝包如下: 我用夸克網盤分享了「mysql」,鏈接:https://pan.quark.cn/s/ab7b7acd572b 二、解…

在Java項目中,引入【全局異常處理器】

目錄 一.為什么引入全局異常處理器(目前項目碰到了什么問題)? 1.問題描述 2.與預期的差別 3.解決方案 二.解決上述問題 1.定義【業務異常類】 2.在serviceImpl層,手動拋出【違反唯一性約束】這個異常 3.定義【全局異常處理…

newspaper公共庫獲取每個 URL 對應的新聞內容,并將提取的新聞正文保存到一個文件中

示例代碼: from newspaper import Article from newspaper import Config import json from tqdm import tqdm import os import requestswith open(datasource/api/news_api.json, r) as file:data json.load(file)print(len(data)) save_path datasource/sourc…

前端核心知識:Vue 3 編程的 10 個實用技巧

文章目錄 1. **使用 ref 和 reactive 管理響應式數據**原理解析代碼示例注意事項 2. **組合式 API(Composition API)**原理解析代碼示例優勢 3. **使用 watch 和 watchEffect 監聽數據變化**原理解析代碼示例注意事項 4. **使用 provide 和 inject 實現跨…

【Web API系列】XMLHttpRequest API和Fetch API深入理解與應用指南

前言 在現代Web開發中,客戶端與服務器之間的異步通信是構建動態應用的核心能力。無論是傳統的AJAX技術(基于XMLHttpRequest)還是現代的Fetch API,它們都為實現這一目標提供了關鍵支持。本文將從底層原理、核心功能、代碼實踐到實…

[特殊字符] Spring Boot 日志系統入門博客大綱(適合初學者)

一、前言 📌 為什么日志在項目中如此重要? 在開發和維護一個后端系統時,日志就像程序運行時的“黑匣子”,幫我們記錄系統的各種行為和異常。一份良好的日志,不僅能幫助我們快速定位問題,還能在以下場景中…

IP協議之IP,ICMP協議

1.因特網中的主要協議是TCP/IP,Interneet協議也叫TCP/IP協議簇 2.ip地址用點分十進制表示,由32位的二進制表示,兩部分組成:網絡標識主機標識 3.IP地址分類; A:0.0.0.0-127.255.255.255 B:128.0.0.0-191.255.255.25…

GPIO_ReadInputData和GPIO_ReadInputDataBit區別

目錄 1、GPIO_ReadInputData: 2、GPIO_ReadInputDataBit: 總結 GPIO_ReadInputData 和 GPIO_ReadInputDataBit 是兩個函數,通常用于讀取微控制器GPIO(通用輸入輸出)引腳的輸入狀態,特別是在STM32系列微控制器中。它們之間的主要…

洛古B4158 [BCSP-X 2024 12 月小學高年級組] 質數補全(線性篩/dfs)

B4158 [BCSP-X 2024 12 月小學高年級組] 質數補全 - 洛谷 思路1:線性篩,字符串匹配,枚舉 質數篩選 要解決這個問題,首先得找出指定范圍內(這里是 1 到 10000000)的所有質數。常用的質數篩選算法有埃拉托斯特尼篩法(埃氏篩&#…

一周學會Pandas2 Python數據處理與分析-Pandas2讀取Excel

鋒哥原創的Pandas2 Python數據處理與分析 視頻教程: 2025版 Pandas2 Python數據處理與分析 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili Excel格式文件是辦公使用和處理最多的文件格式之一,相比CSV文件,Excel是有樣式的。Pandas2提…