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 在科学计算和机器学习中的无限可能!