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.mzph.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…