邏輯回歸參數調優實戰指南

邏輯回歸的參數調節

參數展示?

LogisticRegression(penalty='l2',dual=False,tol=1e4,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver='liblinear',max_iter=100,multi_class='ovr',verbose=0,warm_start=False, n_jobs=1)

在前面的學習中,我們參數使用的都是默認參數。所有在面對特殊問題的時候,準確率會高,召回率也不高。所以我們要對某些數據進行微調。?

正則化懲罰項

? ? ? ? 在我們處理數據的時候,有時候會出現各種各樣的數據,然后根據數據我們也有各種各樣的權重參數,例如下面有兩種權重參數

????????data:1,1,1,1

? ? ? ? w1:1,0,0,0

? ? ? ? w2:0.25,0.25,0.25,0.25

在兩組參數中,我們得到的最終結果都是一樣的,那我們知道,第一種肯定不行,過擬合了,不能運用所有數據,但是我們該如何讓機器也知道,什么樣的權重參數好,什么壞呢?

這里在均方差中引入了正則化懲罰項

????????????????????????

  1. ?正則化懲罰項?
    λR(W)

    • λ: 正則化強度系數(超參數)也就是參數中的C
    • R(W): 權重的懲罰函數,包含兩種形式:
      • ?L1 正則化?:
        • 產生稀疏權重,自動特征選擇
      • ?L2 正則化?:
        • ?為求導便利設計的系數(梯度計算時抵消平方項導數產生的2)
        • 控制權重幅度,防止過擬合

?其實正則化最重要的功能也就是防止過擬合

交叉驗證

? ? ? ? 對于上面的正則化懲罰項系數,我們該怎么知道哪個闡述最好呢?我們會想到讓機器循環找到那個最好的參數。

????????于是我們想到循環訓練,讓測試集來測試,選擇出一個最好的參數,但是我們注意到,如果我們讓測試集參與到了訓練中,這樣結果會不會也會有過擬合的現象,所有我們無論如何也不能把測試集參與到訓練中。

下面我們又想到,可以把訓練集中劃出一部分來進行驗證,是不是也可以。但是我們又想著一直用這一個驗證集會不會也會過擬合。

接下來,我們想到,我們可以把訓練集切成幾份,循環到一個參數時,依次把幾份中的一個當作驗證集,其余訓練。然后去他們的平均值作為我們的最終結果。這樣就是我們的交叉驗證了!

代碼實例

import pandas as pd
from numpy.ma.core import count
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
data=pd.read_csv(r'D:\培訓\機器學習\邏輯回歸\銀行貸款\creditcard.csv')
print(len(data[data['Class'] == 1]))
mod=StandardScaler()
data["Amount"]=mod.fit_transform(data[['Amount']])
X=data.drop(["Time","Class"],axis=1)
y=data["Class"]
train_X,test_X,train_y,test_y=train_test_split(X,y,test_size=0.2,random_state=42)from sklearn.model_selection import cross_val_score
import numpy as np
scores=[]
pe=[0.01,0.1,1,10,100]
for p in pe:lr=LogisticRegression(C=p,penalty ='l2',random_state=42,max_iter=1000)score=cross_val_score(lr,train_X,train_y,cv=8,scoring='recall')scores_mean=sum(score)/len(score)scores.append(scores_mean)print(scores_mean)best_c=pe[np.argmax(scores)]
print('最優系數:',best_c)
model=LogisticRegression(C=best_c,penalty ='l2',random_state=42,max_iter=1000)
model.fit(train_X,train_y)
print(model.score(test_X,test_y))
from sklearn import metrics
print(metrics.classification_report(test_y,model.predict(test_X)))

?上面我們取了[0.01,0.1,1,10,100]這幾個值來進行測試,然后找出最優的值。下面我們對代碼核心部分for循環中的部分進行解讀

先建立模型

?????lr=LogisticRegression(C=p,penalty ='l2',random_state=42,max_iter=1000)

計算召回率的得分值

? score=cross_val_score(lr,train_X,train_y,cv=8,scoring='recall')

求均值,并把值添加到列表中。

 ? scores_mean=sum(score)/len(score)scores.append(scores_mean)

找出最大值

best_c=pe[np.argmax(scores)]

根據最優參數進行訓練

model=LogisticRegression(C=best_c,penalty ='l2',random_state=42,max_iter=1000)
model.fit(train_X,train_y)
print(model.score(test_X,test_y))
from sklearn import metrics
print(metrics.classification_report(test_y,model.predict(test_X)))

得出結果?

下面這個是沒有進行交叉驗證時候的結果

召回率僅僅增加了百分之二,但是如果對于后期增加百分之二也很重要,這里主要是數據類別的極度不均衡。下面我們對數據進行處理?

數據處理

????????我們數據中的,類別為1的和為0的數據差了幾千倍,并且我們比較關注為1的結果,所以我們要對數據進行處理,也就是兩條路,一個是增加1的數據量,或者減少0的數據量。

下采樣

這個是訓練集中0的數據量。我們想先對數據集進行劃分,測試集不處理,訓練集進行處理,先找出少的那一類的數據條數,然后對數據多的那一類進行抽樣,抽出相同數量的數據,然后針對這些進行訓練。

代碼部分

train_data,test_data=train_test_split(data,test_size=0.2,random_state=42)pe=train_data[train_data['Class'] == 1]
ne=train_data[train_data['Class'] == 0]d1 = ne.sample(len(pe))train_data = pd.concat([d1,pe])train_X=train_data.drop(["Time","Class"],axis=1)
train_y=train_data["Class"]
test_X=test_data.drop(["Time","Class"],axis=1)
test_y=test_data["Class"]

其余沒修改,就這一部分修改了?

上面代碼中,我們先對訓練集和測試集進行分開,然后對訓練集中標簽為0的標簽中取樣出標簽0數量的數據,然后進行連接,下面就正常訓練了,不夠這樣可能會讓數據量減少許多

過采樣

這個是讓數據量少的那一類增加,不夠也不是隨便增加,其中采用了SMOTE算法,如下:

代碼部分

from imblearn.over_sampling import SMOTE#imblearn這個庫里面調用,
oversampler =SMOTE(random_state=0)#保證數據擬合效果,隨機種子
train_X, train_y = oversampler.fit_resample(train_X,train_y)#人工擬合數據

?主要就是導入庫,這個庫直接pip下載就行,然后直接fit就行,這里直接導入數據,會自動識別那個多哪個少,然后進行處理。

評價方法

?指標??公式??適用場景??特點?
?準確率?類別平衡數據簡單直觀,但類別不平衡時失效
?精確率?關注假陽性成本(如垃圾郵件檢測)強調預測正例的準確性
?召回率?關注漏檢成本(如疾病診斷)強調捕捉正例的能力
?F1分數?平衡精確率與召回率綜合性能指標,適合一般場景
?ROC-AUC?ROC曲線下面積類別不平衡或需調整閾值時反映模型整體排序能力,與閾值無關
?混淆矩陣?四格表(TP, FP, FN, TN)分析錯誤類型分布可視化分類細節,衍生多指標

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

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

相關文章

cocosCreator2.4 googlePlay登錄升級、API 35、16KB內存頁面的支持

環境:我這里是cocosCreator 2.4.12 導出的android 工程 登錄升級 后臺收到的google 的提醒: 之前是通過implementation com.google.android.gms:play-services-auth:20.0.0 來獲取玩家 uid 和 郵箱,然后發送到我們的服務器獲取賬號。 升級…

unity avpro實現互動影游關鍵問題

創建視頻播放器?在Hierarchy面板中右鍵創建:Video > AVPro Video - MediaPlayer創建后會生成一個MediaPlayer對象,用于控制視頻播放添加視頻資源將視頻文件放入項目的StreamingAssets文件夾下在MediaPlayer組件的設置中選擇要播放的視頻文件在UI上顯…

【C找第一個只出現一次的字符】2022-8-18

緣由樣例通過&#xff0c;請問為什么錯了呢&#xff1f;(語言-c語言)-編程語言-CSDN問答 char str[100000];fgets(str, 100000, stdin);int a[26]{}, i, count 0;int len strlen(str);for (i 0; i<len; i) a[str[i] - a];for (i 0; i<len; i){if (a[str[i] - a] 1){…

MCP AI應用通信的底層機制

技術小館專注AI與Java領域的前沿技術知識庫 技術小館官網 在AI應用快速發展的今天&#xff0c;不同AI系統之間的高效通信成為技術架構的關鍵挑戰。MCP&#xff08;Model Context Protocol&#xff09;作為新一代AI應用通信協議&#xff0c;正在重新定義AI工具生態的構建方式。…

UI測試平臺TestComplete如何實現從Git到Jenkins的持續測試

還在為手動做UI測試又慢又累發愁&#xff1f;更頭痛的是&#xff0c;代碼改完還得等半天才能測&#xff0c;測完了結果又散得到處都是&#xff0c;根本看不清質量全貌?TestComplete幫你搞定&#xff1a;直接連上你的Git倉庫&#xff0c;代碼一有動靜就能感知。接著&#xff0c…

【Debian】4-?2 Gitea搭建

【Debian】4-?2 Gitea搭建一、準備工作二、創建 Gitea 用戶&#xff08;推薦&#xff09;三、下載并安裝 Gitea四、配置Gitea4-1 創建目錄結構4-2 創建配置目錄五、配置 Systemd 服務六、訪問 Gitea Web 界面七、小插曲一、準備工作 更新系統軟件為最新 sudo apt update &am…

【CDH × Docker】一次測試部署,N 次復用的環境鏡像方案

&#x1f680; 一次測試環境的探索&#xff1a;我如何將 CDH 集群打包成 Docker 鏡像&#xff0c;留給未來的自己 &#x1f9e9; 背景故事 最近在項目中&#xff0c;我們計劃上線一個基于 CDH&#xff08;Cloudera Distribution Hadoop&#xff09; 的大數據平臺。正式上生產環…

Java 日期時間格式化模式說明

Java 中日期時間格式化使用特定的模式字符串來定義輸出格式。以下是常見的格式化符號及其含義&#xff0c;適用于 SimpleDateFormat 和 DateTimeFormatter一、日期部分格式化符號符號含義示例y年 (Year)yyyy → 2023M月 (Month)MM → 09, MMM → Sep, MMMM → Septemberd月中的…

代碼隨想錄算法訓練營三十三天|動態規劃part06

LeetCode 322 零錢兌換 題目鏈接&#xff1a;322. 零錢兌換 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。 計算并返回可以湊成總金額所需的 最少的硬幣個數 。…

【大模型LLM】大模型訓練加速 - 梯度累積(Gradient Accumulation)原理詳解

梯度累積&#xff08;Gradient Accumulation&#xff09;原理詳解 梯度累積是一種在深度學習訓練中常用的技術&#xff0c;特別適用于顯存有限但希望使用較大批量大小&#xff08;batch size&#xff09;的情況。通過梯度累積&#xff0c;可以在不增加單個批次大小的情況下模擬…

【數據分享】各省文旅融合耦合協調度及原始數據(2012-2022)

數據介紹引言 文旅融合是推動區域經濟高質量發展、促進共同富裕的重要路徑。黨的二十大報告明確提出“推進文化和旅游深度融合發展”的戰略目標&#xff0c;文旅產業通過資源整合與業態創新&#xff0c;可顯著縮小城鄉、區域差距&#xff0c;提升物質與精神雙重福祉&#xff08…

Linux編程: 10、線程池與初識網絡編程

今天我計劃通過一個小型項目&#xff0c;系統講解線程池與網絡編程的核心原理及實踐。項目將圍繞 “利用線程池實現高并發網絡通信” 這一核心需求展開&#xff0c;具體設計如下&#xff1a; 為保證線程安全&#xff0c;線程池采用單例模式設計&#xff0c;確保全局唯一實例避…

藏云閣 Logo 庫(開源項目SVG/PNG高清Logo)

在日常技術方案設計、架構圖繪制或PPT制作中&#xff0c;常常會遇到一些問題&#xff0c;比如&#xff1a; 找不到統一風格的開源項目組件圖標&#xff0c;PPT中的logo五花八門下載的圖標分辨率不足&#xff0c;放大后模糊失真不同來源的圖標顏色風格沖突&#xff0c;破壞整體…

從0開始學習R語言--Day64--決策樹回歸

對于沒有特征或者說需要尋找另類關系的數據集&#xff0c;我們通常會用聚合或KNN近鄰的方法來分類&#xff0c;但這樣的分類或許在結果上是好的&#xff0c;但是解釋性并不好&#xff0c;有時候我們甚至能看到好的結果反直覺&#xff1b;而決策樹回歸做出的結果&#xff0c;由于…

B+樹高效實現與優化技巧

B樹的定義 一顆M階B樹T,滿足以下條件 每個結點至多擁有M課子樹 根結點至少擁有兩顆子樹 除了根結點以外,其余每個分支結點至少擁有M/2課子樹 所有的葉結點都在同一層上 有k棵子樹的分支結點則存在k-1個關鍵字,關鍵字按照遞增順序進行排序 關鍵字數量滿足 ceil( M/2 ) - 1 &…

Android 基礎入門學習目錄(持續更新)

四大組件 Activity&#xff1a; Service&#xff1a; BroadcastReceiver&#xff1a; ContentProvider&#xff1a; UI 與交互開發 常見的UI布局和UI控件 樣式與主題 Fragment Intent 數據存儲 自定義View和自定義Group 自定義View 自定義ViewGroup 事件分發 Key…

Linux移動大量文件命令

背景 使用 mv 命令報“/bin/mv: 參數列表過長”&#xff0c;也是第一遇到&#xff0c;查了一下&#xff0c;最后用rsync命令解決了。還好每臺服務器&#xff0c;都必裝rsync了&#xff0c;記錄如下。 命令 nohup rsync -av --remove-source-files --progress /public/tmp/video…

SQL中的HAVING用法

HAVING 是 SQL 中專門對 “分組之后的聚合結果” 再做篩選的子句。 它一般跟在 GROUP BY 后面&#xff0c;不能單獨使用&#xff0c;作用類似于分組版的 WHERE。? 1. 語法位置 SELECT 列1, 聚合函數(列2) AS 別名 FROM 表 GROUP BY 列1 HAVING 聚合條件; -- 這里寫對聚合…

【Halcon 】Halcon 實戰:如何為 XLD 模板添加極性信息以提升匹配精度?

Halcon 實戰&#xff1a;如何為 XLD 模板添加極性信息以提升匹配精度&#xff1f; 在使用 Halcon 進行模板匹配時&#xff0c;我們通常有兩種方式創建模板&#xff1a; 基于圖像灰度&#xff08;CreateScaledShapeModel&#xff09;基于輪廓 XLD&#xff08;CreateScaledShapeM…

grafana/lock-stack 日志 Pipeline 配置

前言 本文使用的是 grafana/loki-stack chart 抓取的 k8s 日志。其他 chart 配置都差不多。 日志問題 docker 容器運行時 pod 內原始日志 [cpu-4] Hello, 第 9788 次報時&#xff0c;時間&#xff1a;2025-08-01T06:35:420000 {"HOSTNAME":"cpu-4",&qu…