【吳恩達機器學習-week2】可選實驗:使用 Scikit-Learn 進行線性回歸

支持我的工作 🎉

📃親愛的朋友們,感謝你們一直以來對我的關注和支持!
💪🏻 為了提供更優質的內容和更有趣的創作,我付出了大量的時間和精力。如果你覺得我的內容對你有幫助或帶來了歡樂,歡迎你通過打賞支持我的工作!

🫰🏻你的一份打賞不僅是對我工作的認可,更是對我持續創作的巨大動力。無論金額多少,每一份支持都讓我倍感鼓舞和感激。

📝有關此篇文章的更多詳情請見:2022吳恩達機器學習Deeplearning.ai課程作業,給我一杯咖啡的支持吧!??

🔥再次感謝你們的支持和陪伴!
在這里插入圖片描述

可選實驗:使用 Scikit-Learn 進行線性回歸

目標

在本實驗中,您將:

  • 利用 scikit-learn 通過梯度下降實現線性回歸
import numpy as np
np.set_printoptions(precision=2) # 使其輸出的浮點數精度為小數點后兩位
# 這兩個類分別用于實現**普通線性回歸**和**使用隨機梯度下降法的線性回歸**
from sklearn.linear_model import LinearRegression, SGDRegressor
# 這個類用于**標準化數據**,使其均值為0,標準差為1。
from sklearn.preprocessing import StandardScaler
from lab_utils_multi import  load_house_data
import matplotlib.pyplot as plt
dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; 
plt.style.use('./deeplearning.mplstyle')

梯度下降

Scikit-learn 有一個梯度下降回歸模型 sklearn.linear_model.SGDRegressor。與您之前的梯度下降實現類似,該模型在標準化輸入下表現最佳。sklearn.preprocessing.StandardScaler 將執行 z-score 標準化,如之前的實驗中所示。在這里,它被稱為“標準分數”。


加載數據集

X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']

標準化/歸一化訓練數據

scaler = StandardScaler()
X_norm = scaler.fit_transform(X_train)
print(f"Peak to Peak range by column in Raw        X:{np.ptp(X_train,axis=0)}")   
print(f"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}")## print
Peak to Peak range by column in Raw        X:[2.41e+03 4.00e+00 1.00e+00 9.50e+01]
Peak to Peak range by column in Normalized X:[5.85 6.14 2.06 3.69]
  • scaler = StandardScaler()
    • 創建一個 StandardScaler 實例
    • StandardScalerscikit-learn 提供的一個類,用于數據標準化。標準化的目的是使數據具有零均值和單位方差
  • X_norm = scaler.fit_transform(X_train)
    • 使用 StandardScaler 實例對 X_train 數據進行標準化
    • fit_transform 方法首先計算數據的均值和標準差然后對數據進行標準化。
    • 返回的 X_norm 是標準化后的數據。
  • print(f"Peak to Peak range by column in Raw X:{np.ptp(X_train,axis=0)}")
    • 計算并打印原始數據 X_train 每一列的峰值范圍(最大值減去最小值)。
    • np.ptp 函數用于計算沿指定軸的峰值范圍,這里使用 axis=0 表示按列計算。
  • print(f"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}")
    • 計算并打印標準化后數據 X_norm 每一列的峰值范圍
    • 標準化后的數據通常會有較小且相似的范圍,因為它們被縮放到相同的尺度。

創建并擬合回歸模型

## 創建 SGDRegressor 實例
sgdr = SGDRegressor(max_iter=1000)## 訓練模型
sgdr.fit(X_norm, y_train)print(sgdr). # 打印 SGDRegressor 模型的**概述信息**,顯示**模型的主要參數和設置**## 打印迭代次數和權重更新次數
print(f"number of iterations completed: {sgdr.n_iter_}, number of weight updates: {sgdr.t_}")## print
SGDRegressor()
number of iterations completed: 117, number of weight updates: 11584.0
  • sgdr = SGDRegressor(max_iter=1000)

    創建一個 SGDRegressor 實例,并將最大迭代次數設置為 1000。SGDRegressorscikit-learn 提供的一種使用隨機梯度下降法訓練線性模型的回歸器

  • sgdr.fit(X_norm, y_train)

    • 使用標準化后的訓練數據 X_norm 和目標變量 y_train 來訓練 SGDRegressor 模型。
    • fit 方法用于擬合模型。

查看參數

請注意,這些參數與標準化輸入數據相關。擬合參數與之前實驗中使用該數據找到的參數非常接近。

# 獲取 SGDRegressor 模型的截距(偏置項)。intercept_ 屬性包含模型的截距
b_norm = sgdr.intercept_ # 獲取 SGDRegressor 模型的系數(權重)。coef_ 屬性包含模型的系數
w_norm = sgdr.coef_
print(f"model parameters:                   w: {w_norm}, b:{b_norm}")
print(f"model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16")## print
model parameters:                   w: [110.08 -21.05 -32.46 -38.04], b:[363.15]
model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16

進行預測

預測訓練數據的目標值。使用 predict 例程,并使用 w w w b b b 進行計算。

# 使用 sgdr.predict() 進行預測
y_pred_sgd = sgdr.predict(X_norm)
# 使用權重和截距進行預測 
y_pred = np.dot(X_norm, w_norm) + b_norm  
# 檢查所有預測值是否都相同,如果相同則返回 True,否則返回 False。
print(f"prediction using np.dot() and sgdr.predict match: {(y_pred == y_pred_sgd).all()}")# 打印前四個樣本的預測值和目標值進行對比
print(f"Prediction on training set:\n{y_pred[:4]}" )
print(f"Target values \n{y_train[:4]}")## print
prediction using np.dot() and sgdr.predict match: True
Prediction on training set:[295.2  485.82 389.56 491.98]
Target values [300.  509.8 394.  540. ]
  • y_pred_sgd = sgdr.predict(X_norm)
    • 使用訓練好的 SGDRegressor 模型對標準化后的數據 X_norm 進行預測。
    • predict 方法會根據模型的系數和截距計算預測值。
  • y_pred = np.dot(X_norm, w_norm) + b_norm
    • 直接使用之前獲取的權重 w_norm 和截距 b_norm 對標- 準化后的數據 X_norm 進行預測。
    • np.dot(X_norm, w_norm) 計算每個樣本的線性組合,加上截距 b_norm 得到預測值。

繪制結果

讓我們繪制預測值與目標值的對比圖。

# plot predictions and targets vs original features    
fig,ax=plt.subplots(1,4,figsize=(12,3),sharey=True)
for i in range(len(ax)):ax[i].scatter(X_train[:,i],y_train, label = 'target') # 繪制實際值的散點圖ax[i].set_xlabel(X_features[i])ax[i].scatter(X_train[:,i],y_pred,color=dlorange, label = 'predict') # 繪制預測值的散點圖
ax[0].set_ylabel("Price"); 
ax[0].legend();
fig.suptitle("target versus prediction using z-score normalized model")
plt.show()

在這里插入圖片描述

小結

  1. 使用開源機器學習工具包 scikit-learn
    • scikit-learn 是一個使用的機器學習庫,提供了各種算法和工具,用于數據預處理、模型訓練和評估。
  2. 實現了線性回歸模型
    • 通過使用梯度下降算法(SGDRegressor),我們訓練了一個線性回歸模型來預測房價。
    • 我們還使用了**標準化技術(StandardScaler)**對特征數據進行了歸一化處理,從而加快了模型的收斂速度并提高了模型的性能。

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

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

相關文章

庫表設計(基礎)-實體與設計關系

實體關系分析 1 實體關系是指系統事務之間的聯系。 2 實體關系需要雙向分析。 3 實體關系決定表關系。 實體關系的種類 1 一對一 2 一對多 3 多對多 舉例: 上面關系如下: 班級和學生 : 1:N 學生和課程:N : N 學生和學籍檔案&a…

MISRA C 和MISRA C++:汽車軟件安全的守護者

一、MISRA C與C語言 自1972年Dennis MacAlistair Ritchie在美國貝爾實驗室創造C語言以來,它已成為當今最流行的編程語言之一。C語言以其使用的靈活性、功能的豐富性而廣受歡迎,但同時也因其寬松的語法和不嚴格的數據類型給開發的產品帶來了安全隱患。 …

如何批量給文件名添加編號?這個方法速度快!操作簡單!

如何批量給文件名添加編號?這個方法速度快!操作簡單!批量給文件重命名,這個是在工作中和生活中經常要用到的一個小技巧,許多人還不知道怎么操作,當然如果要按一定的格式和規律重命名大量的文件,…

Linux內核 -- 多核通信之RPMSG驅動使用

Linux Kernel RPMsg 驅動注冊流程的高級用法與注意事項 在Linux Kernel中,RPMsg(Remote Processor Messaging)是一種用于不同處理器之間通信的機制,通常用于多核系統中的通信,如主處理器和協處理器之間的消息傳遞。了…

巴西電子游戲PWA借助海外快手kwai社交廣告出海趨勢解讀

巴西電子游戲PWA借助海外快手kwai社交廣告出海趨勢解讀 在數字化時代的浪潮中,電子游戲行業蓬勃發展,而廣告投放策略也隨之日新月異。特別是在巴西這樣一個充滿活力的市場,電子游戲的普及與流行程度不容小覷。在這樣的背景下,在數…

java數據結構集合復習之ArrayList與順序表

前言: 這是我最一年學習java的一部分的回顧總結 1.List 1.1什么是List? 在框架集合中,List是一個接口,繼承自Collection。 Collection也是一個接口,該接口中規范了后序容器中常用的一些方法,具體如下所示 --------boolean add(E e)尾插 evoid a…

[pwn]靜態編譯

靜態編譯 1. 棧足夠大的情況下 程序在ida打開后,左側的函數欄目沒有紅色(系統調用的函數),而只有一些靜態函數,通常這類文件的大小會必普通的pwn題程序要大得多。 這種靜態編譯的題沒有調用庫函數,也就沒…

百度云智能媒體內容分析一體機(MCA)建設

導讀 :本文主要介紹了百度智能云MCA產品的概念和應用。 媒體信息海量且復雜,采用人工的方式對視頻進行分析處理,面臨著效率低、成本高的困難。于是,MCA應運而生。它基于百度自研的視覺AI、ASR、NLP技術,為用戶提供音視…

Vue 性能革命:揭秘前端優化的終極技巧;Vue優化技巧,解決Vue項目卡頓問題

目錄 Vue優化路徑 一、使用key 二、使用凍結對象 三、使用函數式組件 四、使用計算屬性 五、使用非實時綁定的表單項 六、保持對象引用穩定 6.1、保持對象引用穩定定義 6.2、保持對象引用穩定與不穩定的例子 6.3、vue2判斷數據是否變化是通過hasChanged函數實現的 ①…

2024年【四川省安全員B證】考試及四川省安全員B證考試題

題庫來源:安全生產模擬考試一點通公眾號小程序 2024年【四川省安全員B證】考試及四川省安全員B證考試題,包含四川省安全員B證考試答案和解析及四川省安全員B證考試題練習。安全生產模擬考試一點通結合國家四川省安全員B證考試最新大綱及四川省安全員B證…

golang項目中gorm框架的配置和具體使用

最近在改造golang項目,從postgre數據庫遷移到達夢數據庫,我還想在改造后的項目使用 gorm 操作數據庫,保持較小的改動。查找了不少資料,最終從以下兩篇文章中借鑒了不少 1、Gorm 入門介紹與基本使用 這篇知乎文章詳細介紹了 gorm 框…

C語言 -- 操作符詳解?

C語言 -- 操作符詳解? 1. 操作符的分類2. 二進制和進制轉換?2.1 2進制轉10進制?2.1.1 10進制轉2進制數字? 2.2 2進制轉8進制和16進制?2.2.1 2進制轉8進制?2.2.2 2進制轉16進制? 3. 原碼、反碼、補碼?4. 移位操作符?4.1 左移操作符? 4.2 右移操作符?5. 位操作符&…

Symfony實戰手冊:PHP框架的高級應用技巧

引言 Symfony是一個功能強大且廣泛應用于PHP應用程序開發的框架,它提供了許多高級特性和工具,可以幫助開發人員更高效地構建和管理復雜的Web應用程序。以下是Symfony框架的幾個關鍵方面及其高級應用技巧: 1. 路由和控制器 Symfony的路由組…

suricata7 rule格式

suricata 7.0.5 suricata rule由三部分組成, action, header, options action,決定當前規則匹配上后需要執行的動作header,定義當前規則的協議,IP地址,端口,方向options,定義了具體的規則 一、 action 合法的action值有&#x…

Linux_共享內存通信

目錄 1、共享內存原理 2、申請共享內存 2.1 ftok 2.2 測試shmget、ftok 2.3 查看系統下的共享內存 3、關聯共享內存 3.1 測試shmat 4、釋放共享內存 4.1 測試shmctl 5、實現共享內存通信 6、共享內存的特性 結語 前言: 在Linux下,有一…

爆!Java高級特性之Stream API詳解

爆!Java高級特性之Stream API詳解 Java 8引入的Stream API可以說是一個革命性的特性,讓我們告別了又臭又長的for循環,迎來了函數式編程的春天。今天就讓我們來一起深入了解這個讓人又愛又恨的Stream API吧! 什么是Stream? Stream就像一個高級的迭代器,允許我們以…

分支與循環

目錄 1. if語句 1)if 2) else 3)分支中包含多條語句 4)if嵌套 2.關系操作符 3.條件操作符 4.邏輯操作符:&& || ! 1) 邏輯取反運算符 !?編輯 2 與運算符?編輯 3) 或運算符?編輯 4) 閏年的判斷 5) 短路 …

LangChain 概述 (模塊索引)

文章目錄 一、下載二、核心功能1、流式傳輸 streaming 三、LCEL四、組成部分1、Promp template2、Example selectors (示例選擇器)3、Chat models (聊天模型)4、Messages (消息)5、LLMs (大語言模型) 一、下載 二、核心功能 其中包括以下內容: 從模型中返回結構化的…

若依 Vue 前端分離 3.8.8 版中生成的前端代碼中關于下拉框只有下拉箭頭的問題

生成代碼修改前 <el-form-item label"課程學科" prop"subject"><el-select v-model"queryParams.subject" placeholder"請選擇課程學科" clearable><el-optionv-for"dict in course_subject":key"dict…

Mysql中常用函數的使用示例

場景 基礎知識回顧&#xff1a;mysql中常用函數的使用示例。 注&#xff1a; 博客&#xff1a;霸道流氓氣質-CSDN博客 實現 數學函數 -- ABS(x)返回x的絕對值 SELECT ABS(-1),ABS(2); -- PI()返回圓周率 SELECT PI(); -- SQRT(x)返回非負數x的二次方根 SELECT SQRT(4); -…