AI学习笔记二

张开发
2026/4/4 18:35:48 15 分钟阅读
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~111维 # 改为 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(axis0) # 按列求和 [4,6] arr.sum(axis1) # 按行求和 [3,7]二梯度下降法1原理梯度下降Gradient Descent是最常用的一阶优化算法核心目标沿着函数下降最快的方向一步步走到最小值点。其基本公式为xt1​xt​η⋅f(xt)要设置η以及迭代次数m当函数有多个变量时每次迭代对每个变量进行xt1​xt​η⋅f(xt)得到新方程。2梯度下降python代码实现import numpy as np import matplotlib.pyplot as plt from torchaudio.functional import pitch_shift # 举例用梯度下降求yx22x5的最小值 xnp.linspace(-6,4,100) yx**22*x5 plt.plot(x,y) plt.show() # 初始化xt步长以及迭代次数m x3 a0.8 m10 #y的导数是2x2 for i in range(m): xx-a*(2*x2) 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(): datanp.loadtxt(线性回归data.csv, delimiter,) ndata.shape[1] - 1 xdata[:, 0:n] ydata[:, -1].reshape(-1, 1) return x,y def G_Des(x,y,theta,iterations,alpha): cnp.ones(x.shape[0]).transpose() xnp.insert(x,0,valuesc,axis1) mx.shape[0] nx.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,yloaddata() thetanp.zeros(x.shape[1]1).reshape(-1,1) iterations400 alpha0.01 thetaG_Des(x,y,theta,iterations,alpha) print(theta) plt.scatter(x,y) h_thetatheta[0]theta[1]*x plt.plot(x,h_theta) plt.show()5进行特征归一化提高模型准确率归一化 把所有特征的数据缩放到同一个尺度范围里。def featureNormalize(x): munp.average(x, axis0) sigmanp.std(x, axis0, ddof1) x(x-mu)/sigma return x,mu,sigma6计算损失函数def computeCost(x,y,theta): mx.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, valuesc, axis1) return np.dot(x, theta)可以看出预测结果与实际值差异不大。8梯度下降分类批量梯度下降随机梯度下降小批量梯度下降9模型评估指标1均方误差import numpy as np y_truenp.array([1,2,3,4,5]) y_prenp.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))

更多文章