当前位置: 首页 > news >正文

机器学习数学基础与Python实现

线性代数在机器学习中的应用

向量与矩阵的基本操作

在机器学习中,数据通常以矩阵或向量的形式表示。例如,一个包含 m m m个样本和 n n n个特征的数据集可以表示为一个 m × n m \times n m×n的矩阵 X \mathbf{X} X,其中每一行代表一个样本,每一列代表一个特征。Python中可以使用numpy库来进行向量和矩阵的操作。

import numpy as np# 创建一个3x2的矩阵
X = np.array([[1, 2], [3, 4], [5, 6]])
print("矩阵 X:")
print(X)# 创建一个长度为3的向量
v = np.array([1, 2, 3])
print("向量 v:")
print(v)# 矩阵与向量的乘法
result = np.dot(X, v)
print("矩阵 X 与向量 v 的乘积:")
print(result)
特征值与特征向量

特征值和特征向量在许多机器学习算法中都有应用,特别是在主成分分析(PCA)和谱聚类中。给定一个方阵 A \mathbf{A} A,如果存在一个非零向量 v \mathbf{v} v和一个标量 λ \lambda λ,使得 A v = λ v \mathbf{A}\mathbf{v} = \lambda\mathbf{v} Av=λv,那么 λ \lambda λ称为 A \mathbf{A} A的特征值, v \mathbf{v} v称为对应的特征向量。

# 计算矩阵的特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(X)
print("特征值:")
print(eigenvalues)
print("特征向量:")
print(eigenvectors)

概率与统计基础

概率分布

概率分布是描述随机变量取值可能性的函数。在机器学习中,常见的概率分布包括伯努利分布、二项分布、正态分布等。例如,正态分布(高斯分布)在许多自然现象中都有很好的近似。

import matplotlib.pyplot as plt# 生成正态分布的数据
mu, sigma = 0, 1  # 均值和标准差
data = np.random.normal(mu, sigma, 1000)# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')# 绘制理论曲线
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = np.exp(-((x - mu)**2) / (2 * sigma**2)) / (np.sqrt(2 * np.pi) * sigma)
plt.plot(x, p, 'k', linewidth=2)plt.title('正态分布')
plt.show()
最大似然估计

最大似然估计是一种参数估计方法,它通过最大化似然函数来找到模型参数的估计值。假设有一组独立同分布的数据 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn,其概率密度函数为 f ( x ∣ θ ) f(x|\theta) f(xθ),其中 θ \theta θ是参数。似然函数定义为 L ( θ ) = ∏ i = 1 n f ( x i ∣ θ ) L(\theta) = \prod_{i=1}^n f(x_i|\theta) L(θ)=i=1nf(xiθ)。最大似然估计的目标是找到使 L ( θ ) L(\theta) L(θ)最大的 θ \theta θ值。

from scipy.optimize import minimize# 定义似然函数
def likelihood(theta, data):return -np.sum(np.log(np.exp(-(data - theta)**2 / 2) / np.sqrt(2 * np.pi)))# 生成模拟数据
data = np.random.normal(0, 1, 100)# 使用最小化负对数似然函数来找到最大似然估计
result = minimize(likelihood, x0=0, args=(data,))
mle = result.x[0]
print("最大似然估计:", mle)

微积分在机器学习中的应用

梯度下降法

梯度下降法是一种优化算法,用于寻找函数的局部最小值。在机器学习中,通常使用梯度下降法来最小化损失函数。假设有一个损失函数 J ( θ ) J(\theta) J(θ),其中 θ \theta θ是参数向量。梯度下降法的更新规则为 θ : = θ − α a b l a J ( θ ) \theta := \theta - \alpha abla J(\theta) θ:=θαablaJ(θ),其中 α \alpha α是学习率,$
abla J(\theta) 是损失函数关于 是损失函数关于 是损失函数关于\theta$的梯度。

# 定义损失函数及其梯度
def loss_function(theta, X, y):return np.sum((np.dot(X, theta) - y) ** 2) / len(y)def gradient(theta, X, y):return 2 * np.dot(X.T, np.dot(X, theta) - y) / len(y)# 初始化参数
theta = np.zeros(X.shape[1])
alpha = 0.01  # 学习率
num_iterations = 1000# 梯度下降
for i in range(num_iterations):theta -= alpha * gradient(theta, X, y)print("优化后的参数:", theta)
拉格朗日乘数法

拉格朗日乘数法是一种求解约束优化问题的方法。在机器学习中,拉格朗日乘数法常用于支持向量机(SVM)中的对偶问题求解。假设有一个目标函数 f ( x ) f(\mathbf{x}) f(x)和一个约束条件 g ( x ) = 0 g(\mathbf{x}) = 0 g(x)=0,可以构造拉格朗日函数 L ( x , λ ) = f ( x ) + λ g ( x ) L(\mathbf{x}, \lambda) = f(\mathbf{x}) + \lambda g(\mathbf{x}) L(x,λ)=f(x)+λg(x),然后对 x \mathbf{x} x λ \lambda λ求偏导并令其等于零,解出 x \mathbf{x} x λ \lambda λ

from scipy.optimize import minimize# 定义目标函数和约束条件
def objective(x):return x[0]**2 + x[1]**2def constraint(x):return x[0] + x[1] - 1# 初始猜测
x0 = np.array([1, 1])# 定义约束字典
cons = {'type': 'eq', 'fun': constraint}# 求解约束优化问题
solution = minimize(objective, x0, constraints=cons)
print("最优解:", solution.x)

机器学习算法的Python实现

线性回归

线性回归是一种简单的监督学习算法,用于预测连续目标变量。给定输入特征 X \mathbf{X} X和目标变量 y \mathbf{y} y,线性回归模型试图找到一个线性关系 y = W X + b \mathbf{y} = \mathbf{W}\mathbf{X} + \mathbf{b} y=WX+b,其中 W \mathbf{W} W是权重矩阵, b \mathbf{b} b是偏置向量。可以使用最小二乘法或梯度下降法来求解模型参数。

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 生成模拟数据
X, y = np.random.rand(100, 1), np.random.rand(100)
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)
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)
逻辑回归

逻辑回归是一种用于二分类问题的监督学习算法。它通过将线性回归的输出映射到一个概率值来实现分类。具体来说,逻辑回归模型使用逻辑函数(也称为Sigmoid函数)将线性回归的输出转换为概率值: P ( y = 1 ∣ x ) = 1 1 + e − ( w T x + b ) P(y=1|\mathbf{x}) = \frac{1}{1 + e^{-(\mathbf{w}^T\mathbf{x} + b)}} P(y=1∣x)=1+e(wTx+b)1。可以使用最大似然估计或梯度下降法来求解模型参数。

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.preprocessing import label_binarize# 加载数据集并二分类化
iris = load_iris()
X, y = iris.data, iris.target
y = label_binarize(y, classes=[0, 1])[:, 0]  # 只保留类别0和1# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建并训练模型
model = LogisticRegression()
model.fit(X_train, y_train)# 预测并评估模型
y_pred = model.predict(X_test)
accuracy = np.mean(y_pred == y_test)
print("准确率:", accuracy)
http://www.dtcms.com/a/266579.html

相关文章:

  • 机器学习在智能建筑中的应用:能源管理与环境优化
  • 每日问题总结记录
  • 一、如何用MATLAB画一个三角形 代码
  • 基于AR和SLAM技术的商场智能导视系统技术原理详解
  • 京东小程序JS API仓颉改造实践
  • 深圳安锐科技发布国内首款4G 索力仪!让斜拉桥索力自动化监测更精准高效
  • 【centos8服务如何给服务器开发3306端口】
  • Python 中线程和进程在实际项目使用中的区别和联系
  • 解决HttpServletRequest无法获取@RequestBody修饰的参数
  • Java并发性能优化|读写锁与互斥锁解析
  • Python 中的可迭代对象与迭代器:原理与项目实战
  • 【Verilog】parameter、localparam和 `define的区别
  • Android View的绘制原理详解
  • 基于虚拟化技术的网闸安全交换:物理隔离时代的智能数据流通引擎
  • 最快实现的前端灰度方案
  • python打卡day58@浙大疏锦行
  • 算法19天|回溯算法:理论基础、组合、组合总和Ⅲ、电话号码的字母组合
  • 用原生 JS + Vue 实现一套可复用的前端错误监控系统
  • Python 机器学习核心入门与实战进阶 Day 2 - KNN(K-近邻算法)分类实战与调参
  • 【MATLAB代码】AOA与TDOA混合定位例程,适用于三维环境、4个锚点的情况,订阅专栏后可以获得完整代码
  • 计算机网络笔记(不全)
  • Windows 本地安装部署 Apache Druid
  • 无人机载重模块技术要点分析
  • Science Robotics发表 | 20m/s自主飞行+避开2.5mm电线的微型无人机!
  • CSS长度单位问题
  • 通过Claude 生成图片的prompt集锦(一)
  • 7.4项目一问题准备
  • 实验五-Flask的简易登录系统
  • 数据结构 之 【堆】(堆的概念及结构、大根堆的实现、向上调整法、向下调整法)(C语言实现)
  • K8s服务发布基础