機器學習之線性回歸——小白教學

一、線性回歸簡介

1.什么是線性回歸

線性回歸(Linear?? ?regression)是利?回歸?程(函數)對?個或多個?變量(特征值)和因變量(?標值)之間關系進?建模的?種分析?式。

特點:只有?個?變量的情況稱為單變量回歸,多于?個?變量情況的叫做多元回歸

?

?線性回歸?矩陣表示舉例:

線性回歸的特征與?標的關系分析?:

線性回歸當中主要有兩種模型,?種是線性關系,另?種是?線性關系。

二、線性回歸api初步使?

sklearn.linear_model.LinearRegression(fit_intercept=True)
通過正規?程優化
參數:fit_intercept:是否計算偏置
屬性:LinearRegression.coef_:回歸系數
LinearRegression.intercept_:偏置
sklearn.linear_model.SGDRegressor(loss="squared_loss",?? ?fit_intercept=True,?? ?learning_rate?? ?='invscaling',eta0=0.01)
SGDRegressor類實現了隨機梯度下降學習,它?持不同的loss函數和正則化懲罰項來擬合線性回歸模型。
參數:loss:損失類型
loss=”squared_loss”:?? ?普通最??乘法
fit_intercept:是否計算偏置
learning_rate?? ?:?? ?string,?? ?optional
學習率填充
'constant':?? ?eta?? ?=?? ?eta0
'optimal':?? ?eta?? ?=?? ?1.0?? ?/?? ?(alpha?? ?*?? ?(t?? ?+?? ?t0))?? ?[default]
'invscaling':?? ?eta?? ?=?? ?eta0?? ?/?? ?pow(t,?? ?power_t)
power_t=0.25:存在?類當中對于?個常數值的學習率來說,可以使?learning_rate=’constant’?? ?,并使?eta0來指定學習率。
屬性:
SGDRegressor.coef_:回歸系數
SGDRegressor.intercept_:偏置

三、線性回歸的損失和優化

1.損失函數

總損失定義為:

y 為第i個訓練樣本的真實值
h(x )為第i個訓練樣本特征值組合預測函數
?稱最??乘法

2.優化算法

如何去求模型當中的W,使得損失最??(?的是找到最?損失對應的W值)
線性回歸經常使?的兩種優化算法:1.正規?程? 2.梯度下降法

(1)?正規?程的推導

把該損失函數轉換成矩陣寫法:

其中y是真實值矩陣,X是特征值矩陣,w是權重矩陣
對其求解關于w的最?值,起?y,X?? ?均已知?次函數直接求導,導數為零的位置,即為最?值。
求導:

?

注:式(1)到式(2)推導過程中,?? ?X是?個m?n列的矩陣,并不能保證其有逆矩陣,但是右乘X 把其變成?個?陣,保證其有逆矩陣。
式(5)到式(6)推導過程中,和上類似。?

四、項目案列

1.問題背景

糖尿病是一種常見的慢性疾病,其病情發展與多種因素相關(如年齡、體重指數、血壓等)。本案例將通過線性回歸模型,探索這些因素與糖尿病病情進展的量化關系,實現對病情的預測。

2 數據介紹

輸入特征(10 個):age(年齡)、sex(性別)、bmi(體重指數)、bp(平均血壓)、s1-s6(6 項血清指標)

目標變量:target(一年后糖尿病病情進展的量化值)

數據已做標準化處理,可直接用于模型訓練。

3.完整流程實現:

1. 導入必要的庫

import pandas as pd  # 用于數據讀取和處理
from sklearn.linear_model import LinearRegression  # 導入線性回歸模型

2. 讀取數據

data = pd.read_csv('糖尿病數據.csv', encoding='gbk')

用pd.read_csv讀取 CSV 格式的糖尿病數據

?encoding='gbk'指定編碼格式,確保中文正常顯示(Windows 系統常見需求)

3. 計算相關性

corr = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6','target']].corr()

選取數據中的 10 個特征和 1 個目標變量target

用corr()計算這些變量之間的相關系數,用于分析變量間的相關性強度

4. 定義特征和目標變量

x = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]  # 特征變量
y = data[['target']]  # 目標變量(一年后糖尿病病情進展)

x包含 10 個輸入特征:年齡、性別、體重指數、血壓及 6 項血清指標
y是需要預測的目標變量:糖尿病病情進展的量化值

5. 構建并訓練線性回歸模型

lr_model = LinearRegression()  # 初始化線性回歸模型
lr_model.fit(x, y)  # 用特征x和目標變量y訓練模型

LinearRegression()創建線性回歸模型實例
fit(x, y)通過最小二乘法擬合數據,求解最優回歸系數

6. 評估模型性能

score = lr_model.score(x, y)  # 計算決定系數R2
print(f"模型決定系數(R2):{score}")

score(x, y)計算模型的決定系數 R2,衡量模型對數據的擬合程度
R2 取值范圍為 [0,1],越接近 1 表示模型擬合效果越好

7. 準備預測數據并進行預測

# 構建帶特征名的預測數據(解決特征名匹配問題)
predict_data = pd.DataFrame([[0.00538306037424807, -0.044641636506989, -0.0363846922044735,0.0218723549949558, 0.00393485161259318, 0.0155961395104161,0.0081420836051921, -0.00259226199818282, -0.0319914449413559,-0.0466408735636482]],columns=['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
)
print("預測結果:", lr_model.predict(predict_data))  # 輸出預測值

將新樣本數據轉換為 DataFrame 并指定與訓練數據相同的特征名
predict(predict_data)使用訓練好的模型對新樣本進行預測,輸出糖尿病病情進展的預測值

8. 提取模型參數并構建回歸方程

coefficients = lr_model.coef_[0]  # 提取特征系數(權重),轉換為一維數組
intercept = lr_model.intercept_[0]  # 提取截距項,轉換為標量# 構建線性回歸方程表達式
features = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
model_expression = "y = "
for i in range(len(coefficients)):model_expression += f"{coefficients[i]:.2f}x{i+1} + "  # 拼接系數和特征編號
model_expression += f"{intercept:.2f}"  # 拼接截距項print(f'線性回歸模型為:{model_expression}')  # 輸出完整的回歸方程
  • coef_[0]獲取 10 個特征對應的系數(權重),表示各特征對目標變量的影響程度
  • intercept_[0]獲取回歸方程的截距項
  • 通過循環構建完整的線性回歸方程表達式,直觀展示各特征與目標變量的量化關系

完整代碼如下:

import pandas as pd
from sklearn.linear_model import LinearRegression
data=pd.read_csv('糖尿病數據.csv',encoding='gbk')
corr=data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6','target']].corr()
x=data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]
y=data[['target']]
lr_model=LinearRegression()
lr_model.fit(x,y)
score=lr_model.score(x,y)
print(f"模型決定系數(R2):{score}")
predict_data = pd.DataFrame([[0.00538306037424807, -0.044641636506989, -0.0363846922044735,0.0218723549949558, 0.00393485161259318, 0.0155961395104161,0.0081420836051921, -0.00259226199818282, -0.0319914449413559,-0.0466408735636482]],columns=['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6'])
print("預測結果:", lr_model.predict(predict_data))
coefficients = lr_model.coef_[0]
intercept = lr_model.intercept_[0]
features = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
model_expression = "y = "
for i in range(len(coefficients)):model_expression += f"{coefficients[i]:.2f}x{i+1} + "
model_expression += f"{intercept:.2f}"
print(f'線性回歸模型為:{model_expression}')

?代碼整體作用

通過線性回歸模型分析糖尿病數據中各醫學特征與病情進展的關系,構建可解釋的數學模型,并利用該模型對新患者的病情進展進行預測。代碼同時解決了特征名不匹配警告和系數格式化錯誤等常見問題,確保模型正常運行并輸出直觀的結果。

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

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

相關文章

.NET 10 中的新增功能系列文章1——運行時中的新增功能

引言 隨著 .NET 10 預覽版6的發布,微軟在運行時層面帶來了一系列重要的性能改進和新功能。這些改進主要集中在JIT編譯器優化、硬件指令集支持、內存管理等方面,旨在進一步提升應用程序的執行效率和資源利用率。本文將詳細解析這些運行時增強功能&#x…

安寶特方案丨AI算法能力開放平臺:適用于人工裝配質檢、點檢、實操培訓

當前工業AI圖形識別算法的應用存在投入成本高、維護更新難、依賴固定相機、應用范圍窄、與實際作業脫節等問題。 針對以上情況,安寶特提出了“AI算法能力開放平臺”,目的是讓AI圖形識別算法可以與現場實際的人工點檢作業、裝配作業、質檢作業、培訓作業…

水下目標識別準確率↑89%!陌訊多模態融合算法在智慧水務的落地實踐

一、行業痛點:智慧水務的檢測困境據《2024城市水務智能化白皮書》統計,傳統水務檢測面臨三大挑戰:??水體干擾??:渾濁度>100NTU時,目標漏檢率高達65%??動態環境??:水流擾動導致目標形變&#xff…

手動開發一個串口調試工具(三):基于 Qt Widgets 搭建串口調試界面

在上一篇中,我們通過 QCoreApplication 構建了一個基礎的串口收發控制臺程序,并實現了周期發送、十六進制轉換和數據讀取等核心功能。本篇將基于此邏輯,進一步將其封裝為一個圖形化界面程序,借助 Qt Widgets 提供的控件搭建完整的…

量子計算革命:重新定義計算的邊界與未來

引言:我們正站在計算革命的新起點 當IBM在2019年宣布實現"量子霸權"時,很多人認為這只是實驗室里的科學突破。然而,短短幾年后,量子計算已經從理論走向實踐,從實驗室走向產業應用。我們正站在一個全新的計算…

Python 數據可視化之 Matplotlib 庫

在當今數據驅動的時代,數據可視化(Data Visualization)已成為數據科學、機器學習、金融分析、工程建模等多個領域中不可或缺的一環。數據可視化不僅幫助我們更直觀地理解數據的分布和趨勢,還能輔助決策、展示研究成果以及增強數據…

Makefile 快速入門指南

Makefile 快速入門指南 什么是Makefile? Makefile 是一個自動化構建工具的配置文件,用于管理代碼編譯、測試和清理等任務。它通過定義規則(rules)來指定文件之間的依賴關系,當源文件改變時,只重新編譯受影響的部分&…

Linux學習--C語言(指針4、結構體)

1.二維數組的傳參int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指針數組的傳參char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息隊列(五)

在 FreeRTOS 中&#xff0c;任務消息隊列&#xff08;Message Queue&#xff09; 是一種非常關鍵的通信機制&#xff0c;用于在任務之間 傳遞數據、同步事件。 它是實現任務 解耦、異步通信 的核心工具之一&#xff0c;FreeRTOS 的消息隊列是任務之間通信的橋梁。 簡單點說&am…

【筆記】加速 uv 安裝:系統環境變量配置國內鏡像源

使用 Conda 工具鏈創建 UV 本地虛擬環境全記錄——基于《Python 多版本與開發環境治理架構設計》-CSDN博客 命令行創建 UV 環境及本地化實戰演示—— 基于《Python 多版本與開發環境治理架構設計》的最佳實踐-CSDN博客 加速 uv 包安裝&#xff1a;Windows 系統環境變量配置國內…

Three.js 渲染優化處理

基于項目經驗和最佳實踐&#xff0c;以下是渲染優化的具體處理方法&#xff1a; 1. 幾何體與材質優化 使用 BufferGeometry // 推薦&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并幾何體 // 將多個幾何體合并為一個以減少繪制…

Kafka——Kafka控制器

引言在Kafka集群中&#xff0c;有一個組件堪稱"隱形的指揮官"——它默默協調著Broker的加入與退出&#xff0c;管理著主題的創建與刪除&#xff0c;掌控著分區領導者的選舉&#xff0c;它就是控制器&#xff08;Controller&#xff09;。想象一個擁有100臺Broker的大…

編程與數學 03-002 計算機網絡 11_域名系統(DNS)

編程與數學 03-002 計算機網絡 11_域名系統&#xff08;DNS&#xff09;一、DNS的作用與功能&#xff08;一&#xff09;域名與IP地址的映射關系&#xff08;二&#xff09;DNS的層次結構二、DNS查詢過程&#xff08;一&#xff09;遞歸查詢與迭代查詢&#xff08;二&#xff0…

影翎Antigravity將發布全球首款全景無人機,8月開啟公測招募

7月28日&#xff0c;消費級無人機品牌「影翎Antigravity」及品牌標識官宣亮相&#xff0c;計劃推出全新品類——全球首款「全景無人機」。這一消息引發行業震動&#xff0c;消費級航拍無人機市場或將迎來顛覆性飛行體驗。影翎Antigravity官方介紹&#xff0c;引力不僅是束縛雙腳…

SpringBoot集成Quzrtz實現定時任務

一 定時任務介紹 自律是很多人都想擁有的一種能力&#xff0c;或者說素質&#xff0c;但是理想往往很美好&#xff0c;現實卻是無比殘酷的。在現實生活中&#xff0c;我們很難做到自律&#xff0c;或者說做到持續自律。例如&#xff0c;我們經常會做各種學習計劃、儲蓄計劃或減…

Java中的異常判斷以及文件中的常用方法及功能

目錄 異常 作用 異常的處理方式 JVM&#xff08;虛擬機&#xff09;默認的處理方式 自己處理&#xff08;捕獲異常&#xff09; 拋出異常&#xff08;也就是交給調用者處理&#xff09; 自定義異常 file File中常見成員方法 判斷和獲取 創建和刪除 獲取并遍歷 異常…

【C++算法】74.優先級隊列_最后一塊石頭的重量

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 1046. 最后一塊石頭的重量 題目描述&#xff1a; 解法 每次取出最重的兩塊石頭進行碰撞&#xff0c;將剩余的石頭重新放入堆中。 C 算法代碼&#xff1a; class Solution …

中興云電腦W101D2-晶晨S905L3A-2G+8G-安卓9-線刷固件包

中興云電腦W101D2-晶晨S905L3A-2G8G-WIFI-藍牙5.0-3個USB2.0-線刷包線刷方法&#xff1a;1、準備好一根雙公頭USB線刷刷機線&#xff0c;長度30-50CM長度最佳&#xff0c;同時準備一臺電腦&#xff1b;2、電腦上安裝好刷機工具Amlogic USB Burning Tool 軟件 →打開軟件 →文件…

Android OkHttp 底層原理和實戰完全教程(責任鏈模式詳解)

目錄 1. OkHttp 入門:從一個請求開始 1.1 基本 GET 請求:三步走 1.2 同步 vs 異步:選擇你的風格 1.3 為什么選 OkHttp? 2. 配置 OkHttpClient:打造你的專屬網絡引擎 2.1 超時設置:別讓請求卡死 2.2 添加攔截器:窺探請求全過程 2.3 緩存:讓請求更快更省流量 3. …

【RK3588部署yolo】算法篇

簡歷描述收集并制作軍事偽裝目標數據集&#xff0c;包含真實與偽裝各種類型軍事目標共計60余類。其中&#xff0c;包含最新戰場充氣偽裝軍事裝備30余類&#xff0c;并為每一張圖片制作了詳細的標注。針對軍事偽裝目標的特點&#xff0c;在YOLOv8的Backbone與Neck部分分別加…