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

AI学习笔记二

一,NumPy库

1,定义

NumPy 是 Python 科学计算的核心库,专为多维数组(ndarray)设计,比 Python 原生列表快 10~100 倍,是数据分析、机器学习、深度学习的基础。

2,基础代码示例

import numpy as np arr1 = np.array([1, 2, 3, 4]) arr2 = np.array([[1,2], [3,4]]) print("数组形状:", arr1.shape) # (行数, 列数) print("数组维度:", arr1.ndim) # 维度数 print("元素类型:", arr1.dtype) # 元素数据类型 print("元素总数:", arr1.size) # 总元素个数 print("**************************************************") print("数组形状:", arr2.shape) # (行数, 列数) print("数组维度:", arr2.ndim) # 维度数 print("元素类型:", arr2.dtype) # 元素数据类型 print("元素总数:", arr2.size) # 总元素个数

3,数组创建

import numpy as np # 1. 全 0 数组 print(np.zeros((2, 3))) # 2行3列,全0 # 2. 全 1 数组 print(np.ones((3, 2))) # 3行2列,全1 # 3. 固定值数组 print(np.full((2,2), 5)) # 2x2,所有元素=5 # 4. 等差数组(最常用) print(np.arange(0, 10, 2) )# 0到9,步长2 → [0 2 4 6 8] # 5. 均分数组(指定元素个数) print(np.linspace(0, 10, 5) )# 0-10均分5个点 → [0,2.5,5,7.5,10] # 6. 单位矩阵 print(np.eye(3)) # 3x3单位矩阵
[[0. 0. 0.] [0. 0. 0.]] ************************************** [[1. 1.] [1. 1.] [1. 1.]] ************************************** [[5 5] [5 5]] ************************************** [0 2 4 6 8] ************************************** [ 0. 2.5 5. 7.5 10. ] ************************************** [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]

4,数组索引与切片

import numpy as np arr = np.array([10,20,30,40,50]) print(arr[0]) # 取第1个元素 →10 print(arr[-1]) # 取最后1个 →50 print(arr[1:4]) # 切片 索引1~3 →[20 30 40] print("************************************************") arr = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 取单个元素 print(arr[1, 2]) # 第2行、第3列 →6 # 取整行 print(arr[0]) # 第1行 →[1 2 3] # 取整列 print(arr[:, 1]) # 所有行、第2列 →[2 5 8] # 取子矩阵(切片) print(arr[0:2, 1:3]) # 前2行、第2-3列

5,数组操作:形状修改、拼接、拆分

import numpy as np arr = np.arange(12) # 0~11,1维 # 改为 3行4列 arr2 = arr.reshape(3,4) print(arr2) print(arr2.flatten() ) # 展平为1维 a = np.array([[1,2], [3,4]]) b = np.array([[5,6], [7,8]]) # 垂直拼接(上下) print(np.vstack((a,b))) # 水平拼接(左右) print(np.hstack((a,b))) arr = np.arange(12).reshape(3,4) # 垂直拆分(按行) print(np.vsplit(arr, 3)) # 水平拆分(按列) print(np.hsplit(arr, 2))

6,矩阵点乘

a = np.array([[1,2], [3,4]]) b = np.array([[5,6], [7,8]]) np.dot(a, b) # 矩阵点乘

7,轴方向运算

arr = np.array([[1,2],[3,4]]) arr.sum(axis=0) # 按列求和 [4,6] arr.sum(axis=1) # 按行求和 [3,7]

二,梯度下降法

1,原理

梯度下降(Gradient Descent)是最常用的一阶优化算法,核心目标:沿着函数下降最快的方向,一步步走到最小值点

其基本公式为:xt+1​=xt​+η⋅(f(xt)')

要设置η以及迭代次数m,当函数有多个变量时,每次迭代对每个变量进行xt+1​=xt​+η⋅(f(xt)'),得到新方程。

2,梯度下降python代码实现

import numpy as np import matplotlib.pyplot as plt from torchaudio.functional import pitch_shift # 举例用梯度下降求y=x2+2x+5的最小值 x=np.linspace(-6,4,100) y=x**2+2*x+5 plt.plot(x,y) plt.show() # 初始化xt,步长,以及迭代次数m x=3 a=0.8 m=10 #y的导数是2x+2 for i in range(m): x=x-a*(2*x+2) print(x)

从图看出我选定的随机点x为3位于最低点右侧,所以要向左趋近,同时可以看出,步长a过小,趋近最低点的迭代次数变多,处理时间变长。如下图,在迭代次数不变的情况下,结果离正确值较远。

当a过大,结果将会发生震荡。

3,梯度下降求解线性回归问题

其基本思路为

  • 假设数据满足假设函数
  • 定义损失函数(比如均方误差),衡量预测有多准
  • 梯度下降去更新 θ,让损失最小

这样就完成了简单的线性回归。

首先在线性回归里,假设函数(Hypothesis Function)就是你假设用来拟合数据的那个数学模型。其公式表达为

其次,代价函数 = 衡量预测值和真实值差多少的函数,我们的目标就是让它最小,代价函数最常用的是均方误差 MSE

其中m为样本的数量。

对代价函数求偏导的过程如下:

对θ变量进行梯度下降可以得到

对于以上公式可以举例

写出假设函数:

对θ进行初始化:

假设迭代100次

每一次分别对θ变量进行梯度下降

以θ0为例

第一次迭代公式如图。

4,线性回归python代码实现

import numpy as np import matplotlib.pyplot as plt def loaddata(): data=np.loadtxt('线性回归data.csv', delimiter=',') n=data.shape[1] - 1 x=data[:, 0:n] y=data[:, -1].reshape(-1, 1) return x,y def G_Des(x,y,theta,iterations,alpha): c=np.ones(x.shape[0]).transpose() x=np.insert(x,0,values=c,axis=1) m=x.shape[0] n=x.shape[1] for num in range(iterations): for j in range(n): theta[j]=theta[j]+(alpha/m)*np.sum((y-np.dot(x,theta))*x[:,j].reshape(-1,1)) return theta x,y=loaddata() theta=np.zeros(x.shape[1]+1).reshape(-1,1) iterations=400 alpha=0.01 theta=G_Des(x,y,theta,iterations,alpha) print(theta) plt.scatter(x,y) h_theta=theta[0]+theta[1]*x plt.plot(x,h_theta) plt.show()

5,进行特征归一化,提高模型准确率

归一化 = 把所有特征的数据,缩放到同一个尺度范围里。

def featureNormalize(x): mu=np.average(x, axis=0) sigma=np.std(x, axis=0, ddof=1) x=(x-mu)/sigma return x,mu,sigma

6,计算损失函数

def computeCost(x,y,theta): m=x.shape[0] return np.sum(np.power(np.dot(x,theta)-y,2))/(2*m)

7,计算预测结果

def predict(x): x = np.array(x).reshape(-1, 1) c = np.ones(x.shape[0]).T x = np.insert(x, 0, values=c, axis=1) return np.dot(x, theta)

可以看出预测结果与实际值差异不大。

8,梯度下降分类

批量梯度下降

随机梯度下降

小批量梯度下降

9,模型评估指标

1,均方误差

import numpy as np y_true=np.array([1,2,3,4,5]) y_pre=np.array([5,6,7,8,9]) def mse(y_true, y_pre): return np.sum(np.power(y_true - y_pre, 2))/len(y_true) print(mse(y_true, y_pre))

2,均方根误差

def rmse(y_true, y_pre): return np.sqrt(np.sum(np.power(y_true - y_pre, 2))/len(y_true)) print(rmse(y_true, y_pre))

3,平均绝对误差

def mae(y_true, y_pre): return np.sum(np.abs(y_true-y_pre))/len(y_true) print(mae(y_true, y_pre))
http://www.jsqmd.com/news/587754/

相关文章:

  • PE结构 --->8.PE对齐的概念 文件对齐VS磁盘对齐
  • task jitter计算方法
  • 告别繁琐安装:用快马平台在线环境,三步创建你的第一个网页应用
  • 【ESP32-S3 深度实战】从小智AI底层移植到自定义LVGL表情:M5Stack CoreS3 避坑与架构指南
  • 硬件笔记——立创逻辑派开关电源案例解读
  • 零基础学Java:用快马AI生成你的第一个集合与对象管理程序
  • 提升开发效率:用快马一键生成智能排序工具模块
  • PE结构 ---> 9.RvaToFoa 内存状体到文件状态
  • 如何用PHP实现线程安全的单例模式?
  • 《黄金周人山人海,节后门可罗雀——景区怎么把这个差距缩小?》
  • 3种突破:ctfileGet如何解除城通网盘限速枷锁
  • 快马平台快速构建mysql博客系统原型:十分钟搞定数据库与api
  • Oracle EBS 资产类别是 真正的树形层级结构(通过弹性域实现父子关系),而 SAP 资产类别(Asset Class)是 扁平结构(无系统内置层级)
  • 飞牛openclaw使用指南(免费模型,不消耗token,响应快,无qps限制,无限使用!!)
  • 实战指南:基于快马生成openclaw千问的智能文档问答系统完整项目
  • 番茄小说下载器:3分钟搭建你的个人离线图书馆完整指南
  • 面试“逆袭率”第一的秘密:让我为你细细阐述
  • Oracle EBS和SAP在资产类别层级关系上的差异
  • 【小兔鲜电商前台 | 项目笔记】第三天
  • 在Windows系统下使用fastboot命令
  • 【SMPL-X】AMASS动捕数据集与SMPL格式概述
  • 房屋建筑学——变形缝
  • Flink 个人学习实时数据管道框架--2 技术架构设计
  • 简单工厂、工厂方法、抽象工厂的PHP代码区别?
  • LLM 怎么生成回答?揭秘“思考“过程
  • Phi-4-mini-reasoning作品集:离散数学归纳法严谨性验证生成案例
  • OpenClaw人人养虾:后台执行
  • MySQL函数及条件查询相关用法
  • 2025_NIPS_Fast Monte Carlo Tree Diffusion: 100× Speedup via Parallel Sparse Planning
  • AI赋能论文研究:调用快马平台模型智能分析文本与提取关键词