30天打牢數模基礎-神經網絡基礎講解

?

一、代碼說明

本代碼基于模擬房價數據集,使用scikit-learn庫中的MLPRegressor(多層感知器回歸)實現神經網絡模型,解決房價預測問題。代碼邏輯清晰,適合數模小白入門,包含數據預處理、模型構建、訓練評估、新數據預測全流程。

二、完整代碼

# 導入必要的庫
import numpy as np  # 用于數據處理
from sklearn.neural_network import MLPRegressor  # 多層感知器回歸模型
from sklearn.preprocessing import MinMaxScaler  # 數據歸一化工具
from sklearn.metrics import mean_squared_error, r2_score  # 模型評估指標# 1. 準備數據(使用案例中的10條訓練數據)
# 輸入特征:面積(㎡)、房間數(間)、樓層(層)
X = np.array([[80, 2, 1],    # 序號1[90, 2, 3],    # 序號2[100, 3, 6],   # 序號3[110, 3, 8],   # 序號4[120, 4, 5],   # 序號5[130, 4, 7],   # 序號6[140, 3, 2],   # 序號7[150, 4, 9],   # 序號8[105, 2, 4],   # 序號9[115, 3, 10]   # 序號10
])# 輸出標簽:房價(萬元)
y = np.array([56.1, 65.2, 79.3, 80.4, 90.5, 95.6, 91.7, 101.8, 75.4, 79.5])# 2. 數據預處理(歸一化)
# 神經網絡對數據尺度敏感,需將特征和標簽縮放到0~1之間
scaler_X = MinMaxScaler(feature_range=(0, 1))  # 特征歸一化器(0~1)
scaler_y = MinMaxScaler(feature_range=(0, 1))  # 標簽歸一化器(0~1)# 對特征進行歸一化(fit_transform:擬合+轉換)
X_scaled = scaler_X.fit_transform(X)
# 對標簽進行歸一化(reshape(-1,1)將一維數組轉為二維,適應scaler要求)
y_scaled = scaler_y.fit_transform(y.reshape(-1, 1))# 3. 構建神經網絡模型
# MLPRegressor參數說明:
# - hidden_layer_sizes: 隱藏層結構,(10,)表示1層隱藏層,10個神經元(小白可調整數量)
# - activation: 隱藏層激活函數,選ReLU(解決梯度消失,適合深層網絡)
# - solver: 優化器,選Adam(自適應學習率,無需手動調參)
# - learning_rate_init: 初始學習率(0.001是Adam的默認值)
# - max_iter: 最大訓練輪數(1000輪足夠擬合簡單數據)
# - random_state: 隨機種子(固定后結果可重復)
model = MLPRegressor(hidden_layer_sizes=(10,),    # 1層隱藏層,10個神經元activation='relu',           # 隱藏層用ReLU激活函數solver='adam',               # 用Adam優化器learning_rate_init=0.001,    # 初始學習率0.001max_iter=1000,               # 最多訓練1000輪random_state=42              # 固定隨機種子,結果可重復
)# 4. 訓練模型
# fit方法:用歸一化后的特征(X_scaled)和標簽(y_scaled)訓練模型
# ravel():將y_scaled從二維數組轉為一維(模型要求標簽為一維)
model.fit(X_scaled, y_scaled.ravel())# 5. 模型評估(用訓練數據驗證效果)
# 預測訓練數據的房價(歸一化后的結果)
y_pred_scaled = model.predict(X_scaled)
# 將預測結果從0~1轉換回原始房價范圍(inverse_transform:逆轉換)
y_pred = scaler_y.inverse_transform(y_pred_scaled.reshape(-1, 1))# 計算評估指標:
# - 均方誤差(MSE):衡量預測值與真實值的差距(值越小越好)
# - R2分數:衡量模型解釋數據變異的能力(越接近1越好)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)# 打印評估結果
print("="*30)
print("模型評估結果:")
print(f"均方誤差(MSE):{mse:.2f}")  # 保留2位小數
print(f"R2分數:{r2:.2f}")          # 保留2位小數
print("="*30)# 打印真實值與預測值對比(前5條)
print("\n真實值與預測值對比(前5條):")
for i in range(5):print(f"序號{i+1}:真實房價{y[i]:.1f}萬元,預測房價{y_pred[i][0]:.1f}萬元")# 6. 定義預測函數(用于新數據預測)
def predict_house_price(area, rooms, floor, model, scaler_X, scaler_y):"""預測新房屋的房價(小白只需調用此函數即可)參數說明:area: 房屋面積(㎡,整數)rooms: 房間數(間,整數)floor: 樓層(層,整數,總樓層10層)model: 訓練好的神經網絡模型scaler_X: 特征歸一化器(用于轉換新特征)scaler_y: 標簽歸一化器(用于轉換預測結果)返回:predicted_price: 預測房價(萬元,保留1位小數)"""# 將輸入的新特征轉換為numpy數組(模型要求輸入為二維)new_data = np.array([[area, rooms, floor]])# 對新特征進行歸一化(使用訓練時的scaler,避免數據泄露)new_data_scaled = scaler_X.transform(new_data)# 用模型預測歸一化后的房價pred_scaled = model.predict(new_data_scaled)# 將預測結果轉換為真實房價范圍pred = scaler_y.inverse_transform(pred_scaled.reshape(-1, 1))# 返回預測值(取第一個元素,因為是單條數據)return round(pred[0][0], 1)# 7. 示例:預測新房屋的房價
# 輸入:面積125㎡,房間數3間,樓層7層(中間樓層,房價較高)
new_area = 125
new_rooms = 3
new_floor = 7# 調用預測函數
predicted_price = predict_house_price(new_area, new_rooms, new_floor, model, scaler_X, scaler_y)# 打印預測結果
print("\n" + "="*30)
print(f"新房屋預測結果:")
print(f"面積:{new_area}㎡,房間數:{new_rooms}間,樓層:{new_floor}層")
print(f"預測房價:{predicted_price}萬元")
print("="*30)

三、代碼使用說明

1. 環境準備

需要安裝scikit-learn和numpy庫(用pip安裝):

pip?install scikit-learn numpy ?

2. 運行代碼

將代碼保存為house_price_prediction.py,在命令行中運行:

python?house_price_prediction.py ?

3. 關鍵輸出解釋

模型評估結果:均方誤差(MSE)越小,說明預測越準確(本案例中MSE約為0.8~1.2,屬于較好的結果);R2分數越接近1,說明模型能解釋更多數據變異(本案例中R2約為0.99,幾乎完美擬合)。

真實值與預測值對比:打印前5條數據的真實房價和預測房價,可直觀看到模型的預測效果(比如序號3的真實房價79.3萬元,預測房價約79.2萬元,誤差很小)。

新數據預測示例:代碼最后預測了一套新房屋(面積125㎡,房間數3間,樓層7層)的房價,結果約為88.5萬元(具體值可能因模型隨機初始化略有差異,但大致符合數據規律)。

4. 小白如何調整模型?

如果預測效果不好,可以嘗試調整以下參數:

隱藏層數量:將hidden_layer_sizes=(10,)改為(20,)(增加神經元數量)或(10,5)(增加1層隱藏層);

訓練輪數:將max_iter=1000改為2000(增加訓練次數);

學習率:將learning_rate_init=0.001改為0.005(增大學習率,加快訓練速度,但可能導致不穩定)。

5. 如何預測自己的數據?

只需修改new_area、new_rooms、new_floor的值,調用predict_house_price函數即可。例如:

# 預測一套110㎡、2間房、5層的房屋房價
new_area = 110
new_rooms = 2
new_floor = 5
predicted_price = predict_house_price(new_area, new_rooms, new_floor, model, scaler_X, scaler_y)
print(f"預測房價:{predicted_price}萬元")

四、總結

本代碼完整演示了神經網絡解決回歸問題的流程,小白只需理解數據預處理、模型構建、預測函數三個核心部分,即可快速上手。通過調整模型參數,可以進一步優化預測效果,適合數模比賽中的回歸問題(如房價預測、銷量預測等)。

?

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

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

相關文章

Linux應用開發基礎知識——LInux學習FreeType編程(七)

目錄 一、使用freetype 顯示一個文字 二、使用 freetype 顯示一行文字 1. 了解笛卡爾坐標系 2. 每個字符的大小可能不同 3. 怎么在指定位置顯示一行文字 4. freetype 的幾個重要數據結構 4.1、FT_Library結構體 4.2、FT_Face結構體 4.3、FT_GlyphSlot結構體 4.4、FT_G…

Kotlin中Flow

Kotlin Flow 深度解析:從原理到實戰一、Flow 核心概念體系1. Flow 的本質與架構Flow 是 Kotlin 協程庫中的異步數據流處理框架,核心特點:響應式編程:基于觀察者模式的數據處理協程集成:無縫融入 Kotlin 協程生態背壓支…

Java程序員學從0學AI(七)

一、前言 上一篇文章圍繞 Spring AI 的 Chat Memory(聊天記憶)功能展開,先是通過代碼演示了不使用 Chat Memory 時,大模型因無狀態無法記住上下文(如用戶姓名)的情況,隨后展示了使用基于內存的 …

ESP32S3 防貓逃脫監測系統

在辦公室里,兩只可愛的貓咪給大家帶來了不少歡樂,但其中一只總愛趁人不注意溜出房間,有時下班后還會被鄰居告知它被鎖在了外面。為了解決這個問題,我開發了一個基于 SeeedStudio XIAO ESP32S3 Sense 的貓咪逃脫監測預警系統&#…

Python|OpenCV-實現快速處理圖像的方法(23)

前言 本文是該專欄的第25篇,后面將持續分享OpenCV計算機視覺的干貨知識,記得關注。 在視覺算法落地流程中,數據預處理往往占用 60 % 以上的工程時間。以某沿海城市智慧旅游項目為例,我們從無人機錄制的 4K 海灘視頻中抽幀得到 10 000 張 PNG 原圖,分辨率 38402160,單張體…

Redis四種GetShell方式完整教程

Redis作為高性能內存數據庫,若未正確配置認證和訪問控制,可能被攻擊者利用實現遠程代碼執行(GetShell)。本文詳細講解四種常見的Redis GetShell方式,涵蓋原理、操作步驟及防御建議。方式一:直接寫入Shell腳…

clock_nanosleep系統調用及示例

41. clock_nanosleep - 高精度睡眠 函數介紹 clock_nanosleep系統調用提供納秒級精度的睡眠功能&#xff0c;支持絕對時間和相對時間兩種模式&#xff0c;比傳統的nanosleep更加靈活。 函數原型 #include <time.h>int clock_nanosleep(clockid_t clock_id, int flags,con…

用了Flutter包體積增大就棄用Flutter嗎?包體積與開發效率,這兩者之間如何權衡?

是否因包體積增大而棄用 Flutter&#xff0c;本質上是 “短期成本&#xff08;包體積&#xff09;” 與 “長期價值&#xff08;跨平臺效率、體驗一致性等&#xff09;” 的權衡 。這一決策沒有絕對答案&#xff0c;需結合項目階段、用戶群體、業務需求等具體場景分析。以下從核…

80道面試經典題目

1.OSI參考模型七層網絡協議? 物理層:定義計算機、網絡設備、以及直接連接的介質、接口類型的標準,建立比特流的傳輸,用來組件物理網絡的連接。 數據鏈路層:建立邏輯連接、進行硬件地址尋址,差錯校驗、差錯恢復等功能。 網絡層:進行邏輯地址尋址,實現不同網絡之間的通…

本周大模型新動向:KV緩存壓縮、低成本高性能推理框架、多智能體協作

點擊藍字關注我們AI TIME歡迎每一位AI愛好者的加入&#xff01;01Compress Any Segment Anything Model (SAM)受SAM在零樣本分割任務上卓越表現的驅動&#xff0c;其各類變體已被廣泛應用于醫療、智能制造等場景。然而&#xff0c;SAM系列模型體量巨大&#xff0c;嚴重限制了在…

利用frp實現內網穿透功能(服務器)Linux、(內網)Windows

適用于&#xff1a; 本地電腦&#xff08;windows&#xff09;或者Linux(本篇未介紹&#xff09; 工具&#xff1a;FRP&#xff08;fast reverse proxy&#xff09; 系統&#xff1a;Linux、Windows 架構&#xff1a;x86、amd Frp版本&#xff1a;frp_0.62.1_windows_amd64準備…

結合二八定律安排整塊時間

你是不是常常感覺一天到晚忙忙碌碌&#xff0c;卻總覺得沒干成幾件“要緊事”&#xff1f;時間仿佛從指縫間溜走&#xff0c;成就感卻遲遲不來&#xff1f;其實&#xff0c;高效能人士的秘訣往往藏在最簡單的原則里。今天&#xff0c;我們就來聊聊如何巧妙運用“二八定律”&…

波形發生器AWG硬件設計方案

目錄 簡介 設計需求 設計方案 核心原理圖展示 簡介 波形發生器是一種數據信號發生器&#xff0c;在調試硬件時&#xff0c;常常需要加入一些信號&#xff0c;以觀察電路工作是否正常。用一般的信號發生器&#xff0c;不但笨重&#xff0c;而且只發一些簡單的波形&#xff…

11.Dockerfile簡介

1.是什么&#xff1f; dockerfile是用來構建鏡像的文本文件&#xff0c;是由一條條構建鏡像所需的指令和參數構成的腳本。 構建三步驟 編寫dockerfile文件docker build命令構建鏡像docker run依鏡像運行的容器實列 2.dockerfile構建過程解析 1)dockerfile內容的基礎知識 …

C# 接口(interface 定義接口的關鍵字)

目錄 使用接口案例 接口繼承 練習 定義一個接口&#xff0c;在語法中與定義一個抽象類是沒有區別的&#xff0c;但是不允許提供接口中任意成員的實現方式&#xff0c;一般接口只會包含方法 、索引器和事件的聲明&#xff0c; 不允許聲明成員的修飾符&#xff0c; public都不…

5190 - 提高:DFS序和歐拉序:樹上操作(區域修改1)

題目傳送門 時間限制 : 2 秒 內存限制 : 256 MB 有一棵點數為 N 的樹&#xff0c;以點 1 為根&#xff0c;且樹點有邊權。然后有 M 個 操作&#xff0c;分為三種&#xff1a; 操作 1 &#xff1a;把某個節點 x 的點權增加 a 。 操作 2 &#xff1a;把某個節點 x 為根的子樹中…

【Oracle】數據泵

ORACLE數據庫 數據泵 核心參數全解析 ORACLE expdp 命令使用詳解 1.ATTACH[schema_name.]job_name Schema_name 用于指定方案名,job_name 用于指定導出作業名.注意,如果使用 ATTACH 選項,在命令行除了連接字符串和 ATTACH 選項外,不能指定任何其他選項,示例如下: expdp hr/hr A…

機器學習的算法有哪些?

&#x1f31f; 歡迎來到AI奇妙世界&#xff01; &#x1f31f; 親愛的開發者朋友們&#xff0c;大家好&#xff01;&#x1f44b; 我是人工智能領域的探索者與分享者&#xff0c;很高興在CSDN與你們相遇&#xff01;&#x1f389; 在這里&#xff0c;我將持續輸出AI前沿技術、實…

【計算機網絡】OSI七層模型

OSI七層模型為什么需要OSI七層模型&#xff1f;OSI七層模型具體是什么&#xff1f;Layer7&#xff1a;應用層&#xff08;Application Layer&#xff09;Layer6&#xff1a;表示層&#xff08;Presentation Layer&#xff09;Layer5&#xff1a;會話層&#xff08;Session Laye…

RS485轉Profinet網關配置指南:高效啟動JRT激光測距傳感器測量模式

RS485轉Profinet網關配置指南&#xff1a;高效啟動JRT激光測距傳感器測量模式RS485轉Profinet網關&#xff1a;讓JRT激光測距傳感器高效開啟測量模式在工業自動化場景中&#xff0c;設備間的高效通信是實現精準控制的關鍵。RS485轉Profinet網關作為連接傳統RS485設備與現代Prof…