Python 科學計算與機器學習入門:NumPy + Scikit-Learn 實戰指南

Langchain系列文章目錄

01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南
02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋
03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南
04-玩轉 LangChain:從文檔加載到高效問答系統構建的全程實戰
05-玩轉 LangChain:深度評估問答系統的三種高效方法(示例生成、手動評估與LLM輔助評估)
06-從 0 到 1 掌握 LangChain Agents:自定義工具 + LLM 打造智能工作流!

python系列文章目錄

01-Python 基礎語法入門:從變量到輸入輸出,零基礎也能學會!
02-Python 流程控制終極指南:if-else 和 for-while深度解析
03-Python 列表與元組全攻略:從新手到高手的必備指南
04-Python 字典與集合:從入門到精通的全面解析
05-Python函數入門指南:從定義到應用
06-Python 函數高級特性:從默認參數到閉包的全面解析
07-Python 模塊與包:從零到自定義的全面指南
08-Python異常處理:從入門到精通的實用指南
09-Python 文件操作:從零基礎到日志記錄實戰
10-Python面向對象編程入門:從類與對象到方法與屬性
11-Python類的方法與屬性:從入門到進階的全面解析
12-Python繼承與多態:提升代碼復用與靈活性的關鍵技術
13-掌握Python魔法方法:如何用__add__和__len__自定義類的行為
14-python面向對象編程總結:從基礎到進階的 OOP 核心思想與設計技巧
15-掌握 Python 高級特性:深入理解迭代器與生成器
16-用 Python 裝飾器提升效率:日志與權限驗證案例
17-再也不怕資源泄漏!Python 上下文管理器,with語句全攻略
18-Python 標準庫必備模塊:math、random、os、json 全解析
19-Python 性能優化:從入門到精通的實用指南
20-Python內存管理與垃圾回收全解析
21-Python 代碼調試與測試:從 pdb 到 TDD 的全面指南
22-Python 代碼風格終極指南:從 PEP 8 到最佳實踐全解析
23-Python實現網絡通信:Socket模塊與TCP/IP協議全解析
24-Python如何用requests庫實現HTTP請求與響應?從零到實戰全解析
25-并發編程基礎:從線程到進程的Python實踐
26-Python 網絡編程實戰:5分鐘實現多線程下載工具與 Web 服務器
27-Python 數據處理基礎:從 CSV 到可視化,一文掌握
28-Python 科學計算與機器學習入門:NumPy + Scikit-Learn 實戰指南


文章目錄

  • Langchain系列文章目錄
  • python系列文章目錄
  • 前言
  • 一、科學計算:使用 `numpy` 進行數值計算
    • 1.1 什么是 `numpy`?
      • 1.1.1 `numpy` 的核心優勢
      • 1.1.2 安裝與導入
    • 1.2 `numpy` 的基礎操作
      • 1.2.1 創建數組
      • 1.2.2 數組運算
      • 1.2.3 索引與切片
    • 1.3 `numpy` 的高級特性
      • 1.3.1 廣播(Broadcasting)
      • 1.3.2 通用函數(ufuncs)
      • 1.3.3 常見問題與解決
  • 二、機器學習:使用 `scikit-learn` 實現模型
    • 2.1 什么是 `scikit-learn`?
      • 2.1.1 安裝與導入
      • 2.1.2 適用場景
    • 2.2 機器學習基礎
      • 2.2.1 監督與無監督學習
      • 2.2.2 數據拆分
    • 2.3 實現機器學習模型
      • 2.3.1 分類:Iris 數據集
      • 2.3.2 回歸:房價預測
        • (1)特征縮放的重要性
        • (2)可視化結果
  • 三、實際案例:綜合應用
    • 3.1 科學計算的應用
      • 3.1.1 矩陣運算
      • 3.1.2 物理模擬
    • 3.2 機器學習案例:房價預測
      • 3.2.1 數據預處理
      • 3.2.2 模型訓練與評估
  • 四、總結

前言

在 Python 的數據科學生態中,科學計算機器學習是兩個核心領域,廣泛應用于數據分析、建模和預測等場景。作為第七周第32天的內容,本文將帶你探索如何使用 numpy 進行高效的數值計算,以及如何借助 scikit-learn 實現機器學習模型。無論你是剛接觸 Python 的初學者,還是希望深入機器學習的高階開發者,本文都將為你提供清晰的學習路徑和實用的代碼示例。


一、科學計算:使用 numpy 進行數值計算

1.1 什么是 numpy

numpy 是 Python 中用于科學計算的基礎庫,提供了一個高效的多維數組對象(ndarray)和豐富的數學函數。它是數據分析和機器學習的基石,支持快速的數值運算和大規模數據處理。

1.1.1 numpy 的核心優勢

  • 高效性:相比 Python 原生列表,numpy 使用 C 語言實現,運算速度更快。
  • 數組操作:支持向量化計算,避免顯式循環,提升代碼簡潔性。
  • 廣泛應用:從矩陣運算到統計分析,numpy 無處不在。

1.1.2 安裝與導入

確保你已安裝 numpy,可以通過以下命令安裝:

pip install numpy

導入庫:

import numpy as np

1.2 numpy 的基礎操作

1.2.1 創建數組

數組是 numpy 的核心數據結構,以下是幾種常見創建方式:

  • 從列表創建
import numpy as np
a = np.array([1, 2, 3])  # 一維數組
b = np.array([[1, 2], [3, 4]])  # 二維數組
print(a)  # [1 2 3]
print(b)  # [[1 2] [3 4]]
  • 使用內置函數
zeros = np.zeros((2, 3))  # 2x3 全零數組
ones = np.ones((2, 2))    # 2x2 全一數組
print(zeros)  # [[0. 0. 0.] [0. 0. 0.]]

1.2.2 數組運算

numpy 支持元素級的運算,簡單高效:

  • 加減乘除
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)  # [5 7 9]
print(a * b)  # [4 10 18]
  • 統計計算
print(np.mean(a))  # 2.0
print(np.sum(b))   # 15

1.2.3 索引與切片

訪問和修改數組元素非常直觀:

  • 一維數組
print(a[0])    # 1
print(a[1:3])  # [2 3]
  • 二維數組
print(b[0, 1])  # 2
print(b[:, 0])  # [1 3],獲取第一列

1.3 numpy 的高級特性

1.3.1 廣播(Broadcasting)

廣播允許在不同形狀的數組間進行運算:

  • 示例
c = a + 10  # 標量 10 被廣播到每個元素
print(c)    # [11 12 13]

1.3.2 通用函數(ufuncs)

通用函數對數組元素逐一應用數學運算:

  • 示例
sin_a = np.sin(a)
print(sin_a)  # [0.8415 0.9093 0.1411]

1.3.3 常見問題與解決

  • 問題:初學者常混淆數組形狀(如 (3,) vs (3,1))。
  • 解決:使用 array.shape 檢查形狀,確保運算兼容。

二、機器學習:使用 scikit-learn 實現模型

2.1 什么是 scikit-learn

scikit-learn 是 Python 中最流行的機器學習庫,提供簡單高效的工具,支持分類、回歸、聚類等任務。它與 numpy 無縫集成,適合快速構建模型。

2.1.1 安裝與導入

安裝命令:

pip install scikit-learn

導入示例:

from sklearn.linear_model import LinearRegression

2.1.2 適用場景

  • 分類:識別物體類別。
  • 回歸:預測連續值,如房價。

2.2 機器學習基礎

2.2.1 監督與無監督學習

  • 監督學習:使用帶標簽數據訓練,例如預測房價(回歸)或分類花卉(分類)。
  • 無監督學習:發現數據中的隱藏模式,如聚類。

2.2.2 數據拆分

機器學習需要將數據分為訓練集測試集

from sklearn.model_selection import train_test_split
X, y = np.random.rand(100, 2), np.random.rand(100)  # 模擬數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

2.3 實現機器學習模型

2.3.1 分類:Iris 數據集

使用邏輯回歸分類 Iris 數據:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加載數據
iris = load_iris()
X, y = iris.data, iris.target# 拆分數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 訓練模型
model = LogisticRegression(max_iter=200)  # max_iter 避免收斂警告
model.fit(X_train, y_train)# 預測與評估
y_pred = model.predict(X_test)
print(f"準確率: {accuracy_score(y_test, y_pred):.2f}")

2.3.2 回歸:房價預測

使用線性回歸預測房價:

from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 加載數據
housing = fetch_california_housing()
X, y = housing.data, housing.target# 拆分數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 訓練模型
model = LinearRegression()
model.fit(X_train, y_train)# 預測與評估
y_pred = model.predict(X_test)
print(f"均方誤差: {mean_squared_error(y_test, y_pred):.2f}")
(1)特征縮放的重要性
  • 問題:特征范圍差異大時,模型性能可能下降。
  • 解決:使用 StandardScaler 標準化數據:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
(2)可視化結果

使用 Matplotlib(上篇文章已介紹)繪制預測結果:

import matplotlib.pyplot as plt
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel("實際值")
plt.ylabel("預測值")
plt.show()

三、實際案例:綜合應用

3.1 科學計算的應用

3.1.1 矩陣運算

計算矩陣乘法:

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B)  # 矩陣乘法
print(C)  # [[19 22] [43 50]]

3.1.2 物理模擬

模擬簡單的自由落體:

t = np.linspace(0, 5, 100)  # 時間
g = 9.8  # 重力加速度
h = 0.5 * g * t**2  # 距離

3.2 機器學習案例:房價預測

3.2.1 數據預處理

使用 numpy 清洗數據:

X = np.array([[50, 2], [60, 3], [70, 4]])  # 面積、房間數
y = np.array([150, 180, 210])  # 房價

3.2.2 模型訓練與評估

model = LinearRegression()
model.fit(X, y)
y_pred = model.predict(X)
print(f"均方誤差: {mean_squared_error(y, y_pred):.2f}")

四、總結

本文從 numpy 的數值計算入手,介紹了數組創建、運算和高級特性,隨后通過 scikit-learn 展示了機器學習的基礎知識和模型實現方法。通過實際案例,你可以將這些技術應用到真實場景中。希望你能繼續探索 Python 在科學計算和機器學習中的無限可能!


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

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

相關文章

「自動駕駛背后的數學:從傳感器數據到控制指令的函數嵌套」—— 揭秘人工智能中的線性函數、ReLU 與復合函數

引言 自動駕駛技術是人工智能領域的一個重要應用,其核心在于如何將傳感器數據轉化為車輛控制指令。這一過程涉及大量的數學知識,包括線性函數、激活函數(如 ReLU)以及復合函數的嵌套使用。本文將深入探討自動駕駛中的數學原理&am…

詳解SQL數據定義功能

數據定義 1. 數據庫模式(Schema)的定義與刪除定義模式刪除模式 2. 基本表的定義、修改與刪除定義表約束1. NOT NULL 約束2. DEFAULT 約束3. UNIQUE 約束4. PRIMARY KEY 約束多列主鍵示例: 5. FOREIGN KEY 約束6. CHECK 約束7. AUTO_INCREMENT…

Redis超高并發分key實現

Redis扛并發的能力是非常強的,所以高并發場景下經常會使用Redis,但是Redis單分片的寫入瓶頸在2w左右,讀瓶頸在10w左右,如果在超高并發下即使是集群部署Redis,單分片的Redis也是有可能扛不住的,如下圖所示&a…

AI Agent 時代開幕-Manus AI與OpenAI Agent SDK掀起新風暴

【本周AI新聞: AI Agent 時代開幕-Manus AI與OpenAI Agent SDK掀起新風暴】 https://www.bilibili.com/video/BV1bkQyYCEvQ/?share_sourcecopy_web&vd_source32ed33e1165d68429b2e2eb4749f3f26 最近AI圈子里最火的話題非Manus莫屬!這款由中國武漢創業公司“蝴…

多時間尺度的配電網深度強化學習無功優化策略的Python示例代碼框架

以下是一個簡單的多時間尺度的配電網深度強化學習無功優化策略的Python示例代碼框架,用于幫助你理解如何使用深度強化學習(以深度Q網絡 DQN 為例)來處理配電網的無功優化問題。在實際應用中,你可能需要根據具體的配電網模型和需求…

劍指 Offer II 081. 允許重復選擇元素的組合

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20081.%20%E5%85%81%E8%AE%B8%E9%87%8D%E5%A4%8D%E9%80%89%E6%8B%A9%E5%85%83%E7%B4%A0%E7%9A%84%E7%BB%84%E5%90%88/README.md 劍指 Offer II 081. 允許重復選擇…

Webpack 前端性能優化全攻略

文章目錄 1. 性能優化全景圖1.1 優化維度概覽1.2 優化效果指標 2. 構建速度優化2.1 緩存策略2.2 并行處理2.3 減少構建范圍 3. 輸出質量優化3.1 代碼分割3.2 Tree Shaking3.3 壓縮優化 4. 運行時性能優化4.1 懶加載4.2 預加載4.3 資源優化 5. 高級優化策略5.1 持久化緩存5.2 模…

虛擬電商-數據庫分庫分表(二)

本文章介紹:使用Sharding-JDBC實現數據庫分庫分表,數據庫分片策略,實現數據庫按月分表 一、Sharding-JDBC使用 1.1.準備環境 步驟一:分庫分表sql腳本導入 創建了兩個數據庫:chongba_schedule0 和chongba_schedule1…

向量數據庫對比以及Chroma操作

一、向量數據庫與傳統類型數據庫 向量數據庫(Vector Storage Engine)與傳統類型的數據庫如關系型數據庫(MySQL)、文檔型數據庫(MongoDB)、鍵值存儲(Redis)、全文搜索引擎&#xff0…

python列表基礎知識

列表 創建列表 1.列表的定義:可變的,有序的數據結構,可以隨時添加或者刪除其中的元素 2.基本語法:字面量【元素1,元素2,元素3】使用[]創建列表 定義變量:變量名稱【元素1,元素2&…

Node.js 的模塊作用域和 module 對象詳細介紹

目錄 代碼示例 1. 創建模塊文件 module-demo.js 2. 導入模塊并使用 module-demo.js 運行結果 總結 在 Node.js 中,每個文件都是一個獨立的模塊,具有自己的作用域。與瀏覽器 JavaScript 代碼不同,Node.js 采用模塊作用域,這意味…

美暢物聯丨WebRTC 技術詳解:構建實時通信的數字橋梁

在互聯網技術飛速發展的今天,實時通信已成為數字生活的核心需求。WebRTC作為一個開源項目,憑借卓越的技術實力與創新理念,為網頁和移動應用帶來了顛覆性的實時通信能力。它突破了傳統通信方式的限制,實現了音頻、視頻和數據在用戶…

excel中兩個表格的合并

使用函數: VLOOKUP函數 如果涉及在excel中兩個工作表之間進行配對合并,則: VLOOKUP(C1,工作表名字!A:B,2,0) 參考: excel表格中vlookup函數的使用方法步驟https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…

單引號與雙引號在不同編程語言中的使用與支持

在編程語言中,單引號和雙引號是常見的符號,它們通常用來表示字符和字符串。然而,如何使用這兩種符號在不同的編程語言中有所不同,甚至有一些語言并不區分單引號和雙引號的用途。本文將詳細介紹不同編程語言中單引號與雙引號的支持…

怎么鑒別金媒v10.51和v10.5的區別!單單從CRM上區分!

2.怎么鑒別程序是10.5還是10.51 ?* 作為商業用戶,升級完全沒有這個擔心,但是這次升級從全局來看清晰度不是很高,不像10.5的升級后臺UI都變化了!你說有漏洞但是我沒遇到過 所以我也不知道升級了啥只能看版本數字是無法區…

python腳本實現服務器內存和cpu使用監控,并記錄日志,可以設置閾值和采樣頻率

Python 腳本,實現以下功能: 按日期自動生成日志文件(例如 cpu_mem_20231001.csv)當 CPU 或內存超過閾值時觸發記錄獨立記錄報警事件(保存到 alert.log)支持自定義閾值和監控間隔 腳本代碼 import psutil …

【Oracle】19c數據庫控制文件多路徑配置

一、關閉數據庫(2個節點實例都要關閉) srvctl stop database -d ora19c 二、多路徑控制文件 打開其中一個節點到nomount狀態 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…

大模型訓練全流程深度解析

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。https://www.captainbed.cn/north 文章目錄 1. 大模型訓練概覽1.1 訓練流程總覽1.2 關鍵技術指標 2. 數據準備2.1 數據收集與清洗2.2 數據…

【Linux】進程(1)進程概念和進程狀態

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:Linux 目錄 前言 一、什么是進程 二、task_struct的內容 三、Linux下進程基本操作 四、父進程和子進程 1. 用fork函數創建子進程 五、進程狀態 1. 三種重…

lws-minimal-ws-server前端分析

index.html index.html是前端入口 <html><head><meta charsetutf-8 http-equiv"Content-Language" content"en"/><!-- 引入js --><script src"/example.js"></script></head><body><img s…