博客
关于我
机器学习(numpy/matplotlib/scipy)学习笔记
阅读量:369 次
发布时间:2019-03-05

本文共 5570 字,大约阅读时间需要 18 分钟。

技术文档 - 傅里叶变换与机器学习算法

时域到频域——傅里叶变换

傅里叶变换是一种将时域信号转换为频域信号的数学工具,广泛应用于信号处理、图像分析以及音频处理等领域。通过傅里叶变换,我们可以将复杂的时域信号分解为更易于分析的频域信号,从而能够提取出信号中的低频、高等等有用信息。

频域到时域——逆傅里叶变换

逆傅里叶变换是傅里叶变换的逆过程,用于将频域信号还原为时域信号。在实际应用中,逆傅里叶变换可以帮助我们去掉不需要的高频成分,从而更清晰地观察信号的低频部分。

CNN——卷积神经网络

卷积神经网络(CNN)是一种深度学习模型,广泛应用于图像分类、目标检测等任务。CNN的核心结构包括卷积层和池化层,通过卷积操作提取局部特征,池化操作进一步降低维度,提高模型的鲁棒性。

强分类器:Logistic回归/SVM

Logistic回归是一种强分类器,适用于二分类问题。它通过逻辑函数将线性分类问题转换为非线性问题,输出类别概率。支持向量机(SVM)是一种强分类器,通过构造最大间隔平面将数据分隔,实现分类。

弱分类器:决策树

决策树是一种弱分类器,通过将数据分成不同的子集,逐步进行分类。决策树的优点是易于解释和实现,适合小数据集的分类任务。

回归

回归是预测任务的一种,分为连续回归和分类回归。连续回归用于预测连续变量(如温度、价格等),而分类回归用于预测类别变量(如性别、物品分类等)。

最小二乘法的目标:求误差的最小平方和

最小二乘法是一种优化算法,通过最小化预测值与实际值之间误差的平方和,找到最佳模型参数。它广泛应用于线性回归、分类等任务。

线性回归

线性回归是一种简单的统计方法,用于建立自变量与因变量之间的线性关系。它通过最小化预测误差,找到最佳拟合直线。

KNN(K邻近算法)

K邻近算法是一种分类算法,通过在测试样本周围找到的K个最近邻域内的平均值或众数来进行预测。它简单易实现,但对大数据集的性能较差。

ridge:岭回归

岭回归是一种放松L2正则化的线性回归方法,通过引入惩罚项使模型参数的绝对值被限制,从而防止模型过拟合。

lasso:

Lasso回归是一种结合了L1和L2正则化的回归方法,通过同时对模型参数进行L1和L2正则化,能够同时选择重要的特征和防止过拟合。

logistic回归

Logistic回归是一种用于分类的回归模型,通过对数似然函数进行优化,找到分类决策边界。

NLL:负对数似然

在分类或回归问题中,通常使用损失函数(代价函数)作为其目标函数。负对数似然是一种常用的损失函数,通过最大化对数似然来最小化损失。

ROC:接收器运作特征曲线

ROC曲线是用于评估分类器性能的图形,通过绘制真正率与假正率的曲线,帮助我们理解模型的分类能力。

AUC:面积下曲线

AUC(Area Under Curve)是ROC曲线下的面积,反映分类器对正类样本的整体性能,值越大表示分类器性能越好。

NumPy库

NumPy是一个强大的数值处理库,提供了高效的数组操作功能。NumPy数组的维数称为秩,二维数组的秩为2。每个线性数组称为一个轴,axis=0表示沿列操作,axis=1表示沿行操作。

NumPy数组操作

  • np.array()用于创建数组。
  • dt=np.dtype()用于查看数据类型。
  • a.shape返回数组的行列值。
  • a.reshape(m,n)改变数组的行列值。
  • np.fromiter()从可迭代对象创建数组。
  • np.arange()生成等差数列。
  • np.linspace()生成等差数列。
  • np.logspace()生成等比数列。
  • a[start:stop:step]截取数组部分。
  • y = x[[0,1,2], [0,1,0]]通过花式索引提取特定元素。
  • b = a[1:3, 1:3]截取子数组。
  • c = a[1:3,[1,2]]通过索引数组提取元素。
  • d = a[...]提取所有行或列。
  • a[x>5]过滤大于5的元素。
  • x[[4,2,1,7]]通过索引数组提取特定元素。
  • x[[-4,-2,-1,-7]]通过倒序索引提取元素。
  • x[np.ix_([1,5,7,2],[0,3,1,2])]通过多维索引提取元素。

广播操作

广播是NumPy对不同形状数组进行运算的方式,通过自动扩展数组的维度进行计算。

转置操作

  • a.T得到数组的转置。
  • np.transpose(a)同样得到数组的转置。

元组操作

  • for x in np.nditer(a)遍历数组元素。
  • for element in a.flat遍历数组元素。
  • a.flat是一个数组元素迭代器。
  • a.flatten()返回一份数组拷贝。
  • a.ravel()将数组展开为一维数组,修改会影响原始数组。

轴操作

  • np.rollaxis(arr, axis, start)向后滚动特定轴到指定位置。
  • np.swapaxes(arr, axis1, axis2)交换两个轴。
  • a.ndim返回数组的维度。
  • np.squeeze(arr, axis)去除指定轴的维度。
  • np.concatenate((a1, a2, …), axis)沿指定轴连接数组。
  • np.stack(arrays, axis)沿新轴连接多个数组。
  • np.hstack(arrays, axis)水平堆叠数组。
  • np.vstack(arrays, axis)垂直堆叠数组。
  • np.split(ary, indices_or_sections, axis)沿指定轴分割数组。
  • np.hsplit(ary, indices_or_sections)水平分割数组。
  • np.vsplit(ary, indices_or_sections)垂直分割数组。
  • np.resize(arr, shape)返回指定大小的新数组。
  • np.append(arr, values, axis=None)在数组末尾添加值。
  • np.insert(arr, obj, values, axis)在指定位置插入值。
  • np.delete(arr, obj, axis)从数组中删除指定子数组。
  • np.unique(arr, return_index, return_inverse, return_counts)去除重复元素。

按位操作

  • np.bitwise_and(a, b)按位与操作。
  • np.bitwise_or(a, b)按位或操作。
  • np.invert(a, dtype=np.uint8)对数组进行位取反。
  • np.binary_repr(a, width=8)返回二进制表示。
  • np.left_shift(10,2)左移2位。
  • np.right_shift(40,2)右移2位。

数学函数

  • np.sin(a)计算正弦函数。
  • np.arcsin(sin)计算反正弦函数。
  • np.add(a, b)加法运算。
  • np.subtract(a, b)减法运算。
  • np.multiply(a, b)乘法运算。
  • np.divide(a, b)除法运算。
  • np.reciprocal(a)计算倒数。
  • np.power(a, b)计算幂运算。
  • np.mod(a, b)计算余数。
  • np.amin(a, axis)计算最小值。
  • np.amax(a, axis)计算最大值。
  • np.ptp(a, axis)计算最大值与最小值之差。
  • np.median(a, axis)计算中位数。
  • np.mean(a, axis)计算算术平均值。
  • np.average(a, axis, weights=b)计算加权平均值。
  • np.std(a)计算标准差。
  • np.var(a)计算方差。

排序操作

  • np.sort(a, axis, kind, order)按指定方式排序。
  • np.argsort(a)返回排序后的索引值。
  • np.lexsort((a, b))对多个序列进行排序。
  • np.partition(a, 3)将数组按指定值分割。
  • np.partition(a, (1, 3))根据多个条件分割数组。
  • np.argpartition(a, 2)找到数组的第3小元素。
  • np.argpartition(a, -2)找到数组的第2大元素。
  • np.argmax(a, axis)找到沿指定轴的最大值索引。
  • np.argmin(a, axis)找到沿指定轴的最小值索引。
  • np.nonzero(a)返回非零元素的索引。
  • np.where(condition, x)返回满足条件元素的索引。
  • np.extract(condition, x)根据条件抽取元素。

矩阵运算

  • np.dot(a, b)计算内积或矩阵乘积。
  • np.vdot(a, b)计算向量点积。
  • np.inner(a, b)计算向量内积。
  • np.matmul(a, b)计算矩阵乘积。
  • np.linalg.det(a)计算矩阵行列式。
  • np.linalg.solve(a)求解线性方程组。
  • np.linalg.inv(a)计算矩阵逆。

文件操作

  • np.save(file, arr, allow_pickle=True, fix_imports=True)将数组保存为.npy文件。
  • b = np.load('outfile.npy')读取.npy文件。
  • np.savez(file, *args, **kwds)将多个数组保存为.npz文件。
  • np.loadtxt(FILENAME, dtype=int, delimiter=' ')读取文本文件。
  • np.savetxt(FILENAME, a, fmt="%d", delimiter=",")将数组保存为文本文件。

Matlib库

  • np.matlib.empty(shape, dtype, order)创建空矩阵。
  • np.matlib.zeros((行数,列数))创建全零矩阵。
  • np.matlib.ones((行数,列数))创建全一矩阵。
  • np.matlib.eye(n, M, k, dtype)创建单位矩阵。
  • np.matlib.rand((行数,列数))创建随机填充矩阵。

Matplotlib绘图

  • import matplotlib
  • from matplotlib import pyplot as plt
  • plt.title('Matplotlib demo')设置图像标题。
  • plt.xlabel('x axis caption', fontproperties=zhfont1)设置x轴标签。
  • plt.ylabel('y axis caption', fontproperties=zhfont1)设置y轴标签。
  • plt.plot(x, y, 'ob')绘制图像,使用蓝色圆圈标记。
  • plt.show()显示图像。

Subplot

  • plt.subplot(2, 1, 1)创建子图表格。
  • plt.plot(x, y_sin)绘制第一个子图。
  • plt.subplot(2, 1, 2)创建第二个子图表格。
  • plt.plot(x, y_cos)绘制第二个子图。
  • plt.show()显示所有子图。

##柱形图

  • plt.bar(x, y, align='center')
  • plt.bar(x2, y2, color='g', align='center')
  • plt.title('Bar graph')
  • plt.ylabel('Y axis')
  • plt.xlabel('X axis')
  • plt.show()

##图像显示

  • plt.imshow(img)显示二维数组图像。
  • plt.show()显示图像。

Scipy库

Scipy库提供了丰富的科学计算工具,包括:

  • scipy.cluster: 矢量量化和K-均值聚类。
  • scipy.constants: 物理和数学常数。
  • scipy.fftpack: 傅里叶变换。
  • scipy.integrate: 积分程序。
  • scipy.interpolate: 插值。
  • scipy.io: 数据输入输出。
  • scipy.linalg: 线性代数程序。
  • scipy.ndimage: n维图像处理。
  • scipy.odr: 正交距离回归。
  • scipy.optimize: 优化算法。
  • scipy.signal: 信号处理。
  • scipy.sparse: 稀疏矩阵。
  • scipy.spatial: 空间数据结构和算法。
  • scipy.special: 特殊数学函数。
  • scipy.stats: 统计工具。

常用函数示例

  • linalg.det(a)计算矩阵行列式。
  • linalg.inv(a)计算矩阵逆。
  • fftpack.fftfreq(sig.size, d=time_step)计算采样频率。
  • fftpack.fft(sig)计算快速傅里叶变换。
  • stats.norm.fit(a)计算均值和标准差。
  • integrate.quad(fun, a, b)对函数在区间[a, b]上进行积分。
  • optimize.minimize(func, x0, method='Nelder-Mead')求标量函数最小值。
  • linalg.eig(a)计算矩阵特征向量。
  • linalg.svd(a)对矩阵进行奇异值分解。
  • linalg.qr(a)对矩阵进行QR分解。
  • linalg.solve(a, b)求解线性方程组ax = b。
  • stats.norm.ppf(q, loc=0, scale=1)计算正态分布的分位数。
  • stats.t.ppf(q, dof=6)计算t分布的分位数。

转载地址:http://jhbwz.baihongyu.com/

你可能感兴趣的文章
5.redo undo
查看>>
编码格式简介(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)
查看>>
《JVM的内存》
查看>>
c++中istringstream及ostringstream超详细说明
查看>>
c++中ifstream及ofstream超详细说明
查看>>
c++中endl操作符以及它的兄弟们
查看>>
c++中explicit和mutable关键字探究
查看>>
c语言结构体字节对齐详解
查看>>
linux c/c++面试知识点整理(八)
查看>>
epoll的基本使用
查看>>
linux网络编程系列(十二)--滑动窗口、拥塞控制、断线重连机制
查看>>
c++11&14-编译
查看>>
Deep residual learning for image recognition
查看>>
IO控制方式
查看>>
IO控制器
查看>>
Java 异常
查看>>
BP神经网络学习--MATLAB源码详细注释
查看>>
LeetCode122.买卖股票的最佳时机2Golang版
查看>>
还在花冤枉钱找人做电子签名?看这儿,教你制作纯手写电子签名
查看>>
Java 知识点总结篇(2)
查看>>