scikit-learn/sklearn學習|線性回歸解讀

【1】引言

前序學習進程中,對SVM相關的數學原理進行了探索和推導,相關文章鏈接包括且不限于:

python學智能算法(二十六)|SVM-拉格朗日函數構造-CSDN博客

python學智能算法(二十八)|SVM-拉格朗日函數求解中-KKT條件_python求解kkt條件-CSDN博客

python學智能算法(三十)|SVM-KKT條件的數學理解_dual svm 的 kkt 條件-CSDN博客

python學智能算法(三十六)|SVM-拉格朗日函數求解(中)-軟邊界-CSDN博客

在對數學原理進行測試的過程中,必須用到數據集。由于sklearn有成熟的數據集,因此有必要先對sklearn相關的知識點進行學習和掌握,這樣才有助于快速理解后面的知識。

【2】線性回歸實例解讀

官網學習地址:1.1 線性模型-scikit-learn中文社區

線性回歸計算的本質非常簡單,假設有自變量x=[x1,x2,...,xn] ,因變量$y=[y1,y2}...,yn],線性回歸的目的就是找出一組回歸系數$w=[w1,w2...,wn]$和偏置量b,使得線性方程成立:

$$y(w,x,b)=\sum_{i=1}^{n}w_{i}\cdot x_{i}+b$$

解讀之前,首先給出完整代碼:

# 引入繪圖模塊
import matplotlib.pyplot as plt
# 引入計算模塊
import numpy as np
# 引入數據集和線性模塊
from sklearn import datasets, linear_model
# 計算均方誤差和決定系數
from sklearn.metrics import mean_squared_error, r2_score# Load the diabetes dataset
# 返回二維矩陣diabetes_X,diabetes_X本質是MXN行的矩陣
# 返回一維數組diabetes_y,diabetes_y實際上沒有行向量和列向量的區分
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
# 兩個操作,第一個是微數據增加一個新的維度,通過np.newaxis
# 第二個是只提取原本二維矩陣diabetes_X中的第3個特征
# 假如提取原本二維矩陣diabetes_X中的第3個特征是[12,16,18],它們組成了一維數組
# 添加np.newaxis的作用后,獲得新的diabetes_X =[[12],[16],[18]]
diabetes_X = diabetes_X[:, np.newaxis, 2]# Split the data into training/testing sets
# 將diabetes_X 除了最后20個數據之外的部分設置為訓練數據集的特征,也就是因變量
diabetes_X_train = diabetes_X[:-20]
# 將diabetes_X 最后20個數據設置為測試數據集
diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing sets
# 將diabetes_y 除了最后20個數據之外的部分設置為訓練數據集的特征,也就是因變量
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]# Create linear regression object
# 此處觸及線性回歸的本質
# regr表面上只是一個變量名
# 但regr存儲了linear_model.LinearRegression()可以調用的所有方法和屬性
regr = linear_model.LinearRegression()# Train the model using the training sets
# 通過regr可以直接調用linear_model.LinearRegression()類中的fit()方法
# 此處的fit()方法是在diabetes_X_train, diabetes_y_train之間擬合出線性方程
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
# 將diabetes_X_test代入fit()方法擬合出的線性方程,獲得訓練出來的因變量
diabetes_y_pred = regr.predict(diabetes_X_test)# The coefficients
# 此處直接輸出線性系數,當因變量只有一個,這個數就是直線斜率
print('Coefficients: \n', regr.coef_)
# The mean squared error
# 輸出均方誤差
print('Mean squared error: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print('Coefficient of determination: %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# Plot outputs
# 繪制訓練值和預測值的對比圖
plt.title('test VS predict')
# 訓練值,也就是實測值
plt.scatter(diabetes_X_test, diabetes_y_test, color='green',label='test')
# 預測值
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3,label='predict')
plt.legend()
plt.xticks(())
plt.yticks(())plt.show()

【2.1】引入必要模塊

# 引入繪圖模塊
import matplotlib.pyplot as plt
# 引入計算模塊
import numpy as np
# 引入數據集和線性模塊
from sklearn import datasets, linear_model
# 計算均方誤差和決定系數
from sklearn.metrics import mean_squared_error, r2_score

這里引入模塊是對sklearn的基本操作,每次使用不同的數據集和執行不同的操作,需要引入不同的sklearn子模塊。

【2.2】數據處理

數據處理部分將數據集劃分為因變量和自變量,再進一步細化為訓練集和測試集。

# Load the diabetes dataset
# 返回二維矩陣diabetes_X,diabetes_X本質是MXN行的矩陣
# 返回一維數組diabetes_y,diabetes_y實際上沒有行向量和列向量的區分
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# Use only one feature
# 兩個操作,第一個是微數據增加一個新的維度,通過np.newaxis
# 第二個是只提取原本二維矩陣diabetes_X中的第3個特征
# 假如提取原本二維矩陣diabetes_X中的第3個特征是[12,16,18],它們組成了一維數組
# 添加np.newaxis的作用后,獲得新的diabetes_X =[[12],[16],[18]]
diabetes_X = diabetes_X[:, np.newaxis, 2]# Split the data into training/testing sets
# 將diabetes_X 除了最后20個數據之外的部分設置為訓練數據集的特征,也就是因變量
diabetes_X_train = diabetes_X[:-20]
# 將diabetes_X 最后20個數據設置為測試數據集
diabetes_X_test = diabetes_X[-20:]# Split the targets into training/testing sets
# 將diabetes_y 除了最后20個數據之外的部分設置為訓練數據集的特征,也就是因變量
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]

整個數據處理代碼段最核心的目的是實現數據結構劃分,適用的最核心代碼是return_X_y=True,這一步起到了承上啟下的作用,經過這一步數據在結構上分成了自變量組diabetes_X和因變量組diabetes_y,然后取這兩組變量的最后20個數據作測試,其余都用于訓練。

【2.3】訓練和測試

# Create linear regression object
# 此處觸及線性回歸的本質
# regr表面上只是一個變量名
# 但regr存儲了linear_model.LinearRegression()可以調用的所有方法和屬性
regr = linear_model.LinearRegression()# Train the model using the training sets
# 通過regr可以直接調用linear_model.LinearRegression()類中的fit()方法
# 此處的fit()方法是在diabetes_X_train, diabetes_y_train之間擬合出線性方程
regr.fit(diabetes_X_train, diabetes_y_train)# Make predictions using the testing set
# 將diabetes_X_test代入fit()方法擬合出的線性方程,獲得訓練出來的因變量
diabetes_y_pred = regr.predict(diabetes_X_test)# The coefficients
# 此處直接輸出線性系數,當因變量只有一個,這個數就是直線斜率
print('Coefficients: \n', regr.coef_)
# The mean squared error
# 輸出均方誤差
print('Mean squared error: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print('Coefficient of determination: %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# Plot outputs
# 繪制訓練值和預測值的對比圖
plt.title('test VS predict')
# 訓練值,也就是實測值
plt.scatter(diabetes_X_test, diabetes_y_test, color='green',label='test')
# 預測值
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3,label='predict')
plt.legend()
plt.xticks(())
plt.yticks(())plt.show()

代碼運行后的效果為:

【3】總結

通過構造線性回歸實例,初步學習了使用scikitlearn/sklearn模塊進行數據處理的技巧。

?

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

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

相關文章

音視頻學習(五十一):AAC編碼器

什么是AAC編碼器? 高級音頻編碼(Advanced Audio Coding,簡稱AAC) 是一種有損音頻壓縮技術,旨在作為MP3的下一代標準而開發。它的主要目標是在比MP3更低的比特率下提供更好的音質,同時具備更強的靈活性和功能…

10-netty基礎-手寫rpc-定義協議頭-02

netty系列文章: 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

計算機畢設缺乏創新點?基于大數據的快手平臺用戶活躍度分析系統給你思路【程序開發+項目定制】

精彩專欄推薦訂閱:在 下方專欄👇🏻👇🏻👇🏻👇🏻 💖🔥作者主頁:計算機畢設木哥🔥 💖 文章目錄 一、項目介紹二…

01.【面試題】在SpringBoot中如何實現多數據源配置

文章目錄 1. 什么是多數據源 1.1 基本概念 1.2 傳統單數據源 vs 多數據源 單數據源架構 多數據源架構 2. 為什么需要多數據源 2.1 業務場景需求 2.2 技術優勢 3. 多數據源的實現方式 3.1 靜態多數據源 3.2 動態多數據源 4. 環境準備 4.1 創建SpringBoot項目 pom.xml依賴配置 4.…

redis主從模型與對象模型

redis淘汰策略 首先我們要明確這里說的淘汰策略是淘汰散列表中的key-value,而不是value中的各個數據結構 過期key中 volatile-lru 從設置了過期時間的鍵中,移除最近最少使用的鍵(LRU算法)。適合需要優先保留高頻訪問數據的場景…

快速搭建開源網頁編輯器(vue+TinyMCE)

文章目錄 Tiny MCE 安裝方法 1. 安裝node.js 2. 創建vue3項目 3. 安裝TinyMCE依賴并使用 (1)在component文件夾創建Editor.vue文件 (2)編輯App.vue文件 (3)運行項目 (4)獲取并設置API key (5)設置中文菜單 Tiny MCE 安裝方法 1. 安裝node.js 下載地址:https://nod…

ADK【4】內置前端調用流程

文章目錄說明ADK內置前端ADK內置前端開啟流程說明 本文學自賦范社區公開課,僅供學習和交流使用,不用作任何商業用途! ADK內置前端 ADK作為最新一代Agent開發框架,不僅功能特性非常領先,而且還內置了非常多的工具&am…

LLMs之GPT-5:OpenAI 發布更智能、更快速、更有用的 AI 模型—內置思考能力,賦能人人專家級智能—技術突破、性能評估與安全保障全面解讀

LLMs之GPT-5:OpenAI 發布更智能、更快速、更有用的 AI 模型—內置思考能力,賦能人人專家級智能—技術突破、性能評估與安全保障全面解讀 導讀:2025年8月7日,OpenAI 發布了 GPT-5,這是他們目前最智能的 AI 系統。它在編…

Java 中操作 R 的全面指南

Java 中操作 R 的全面指南 引言 Java作為一種廣泛使用的編程語言,具有跨平臺、高性能、可擴展等特點。隨著大數據和機器學習的興起,Java在處理和分析復雜數據集方面發揮著越來越重要的作用。R語言,作為一種專門用于統計計算和圖形展示的語言,同樣在數據分析領域有著舉足輕…

數據結構——優先級隊列(PriorityQueue):一文解決 Top K 問題!

目錄 1.優先級隊列 2. 堆的概念 3. 堆的存儲方式 4. 堆的創建 4.1 向下調整 4.2 堆的創建 4.3 堆的插入 4.4 堆的刪除 5.用堆模擬實現優先級隊列 6.常用接口的介紹 6.1 PriorityQueue 的特性 6.2 PriorityQueue 的方法 7. Top K問題 1.優先級隊列 隊列是一種先進先…

C語言自定義類型深度解析:聯合體與枚舉

在C語言中,自定義類型為數據組織提供了極大的靈活性。除了常用的結構體,聯合體(共用體)和枚舉也是非常重要的自定義類型。本文將結合實例,詳細解析聯合體和枚舉的特性、用法及實際應用場景。 一、聯合體(Un…

Numpy科學計算與數據分析:Numpy數據分析基礎之統計函數應用

Numpy統計函數實戰:數據的聚合與分析 學習目標 通過本課程的學習,學員將掌握Numpy中用于統計分析的關鍵函數,如求和(sum)、平均值(mean)、標準差(std)等,能夠熟練地在實際數據集中應用這些函數進行數據的聚合與分析。 相關知識…

從引導加載程序到sysfs:Linux設備樹的完整解析與驅動綁定機制

摘要本報告旨在為嵌入式Linux開發者詳細梳理設備樹(Device Tree, DT)在系統啟動中的完整解析流程。報告將從引導加載程序(Bootloader)如何準備和傳遞設備樹二進制文件(DTB)開始,逐步深入到內核如…

基于深度學習的污水新冠RNA測序數據分析系統

基于深度學習的污水新冠RNA測序數據分析系統 摘要 本文介紹了一個完整的基于深度學習技術的污水新冠RNA測序數據分析系統,該系統能夠從未經處理的污水樣本中識別新冠病毒變種、監測病毒動態變化并構建傳播網絡。我們詳細闡述了數據處理流程、深度學習模型架構、訓練…

寶塔面板配置Nacos集群

一、環境準備 準備三臺及以上的服務器,我這里準備了3臺服務器,172.31.5.123~125;分別安裝好寶塔面板,軟件商店里安裝nacos;二、Nacos集群配置 配置數據庫連接:? 進入每臺服務器上 Nacos 解壓后…

Spring Boot 3.x 全新特性解析

Spring Boot 是企業級 Java 開發中最常用的框架之一。自 Spring Boot 3.x 發布以來,其引入的一系列重大變更與優化,為開發者提供了更現代、更高效的開發體驗。本文將重點解析 Spring Boot 3.x 的關鍵特性及其對項目架構的影響。 一、基于 Jakarta EE 10 …

2025.8.10總結

今天晚上去跑了2公里,跑完還挺爽的,然后花了1.5個小時去公司刷題,沒有進行限時練,花了一周的時間才做完這題,共找了20個bug,雖然沒有進行限時練,但我仿佛對測試技術掌握得更好了,知道…

qt中實現QListWidget列表

使用最基本的QListWidgetItem來創建列表項,具體使用下面setText、setIcon、addItem這三個方法#include "mainwindow.h" #include "ui_mainwindow.h" #include "QDebug"enum CustomRoles {IdRole Qt::UserRole, // 存儲IDPhoneR…

nginx-主配置文件

nginx-主配置文件一、主配置文件nginx.conf內容二、修改配置的文件后的操作三、配置虛擬主機的域名1. 修改nignx.conf配置文件2. 新建域名對應的網頁根目錄3. 重載nginx配置4. 驗證一、主配置文件nginx.conf內容 [rootweb1 conf]# cat nginx.conf#user nobody; # nginx woke…

DBSACN算法的一些應用

以下是 DBSCAN 算法在 Python 中的幾個典型應用示例,涵蓋了基礎使用、參數調優和可視化等方面:import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.datasets import make_moons, make_blobs from skl…