理解傅里叶变换
傅里叶变换 傅立叶变换是将时域的函数转换成频域上的函数,是对于同一个函数的不同视角,在信号处理中有非常重要的作用。数学定义如下: F(w)=F(f(t))=∫f(t)e−iwtdtF(w)=F(f(t))=\int{f(t)e^{-iwt}}dt F(w)=F(f(t))=∫f(t)e−iwtdt 笛卡尔坐标系中的变换 对着数学公式来理解傅里叶变换确实有点难度,下面先从笛卡尔坐标系了解什么是变换。 上图为一个简单的二维笛卡尔坐标系,从图中我们可以看出A点坐标为(-3,1),B点坐标为(2,3),那么为什么可以这样表示呢? 这是由于笛卡尔坐标系中定义了一组标准正交基ex=(1,0)e_x=(1, 0)ex=(1,0)和ey=(0,1)e_y=(0,1)ey=(0,1),(PS:基是向量,正交基指不同基的内积为0,标准基指基的模为1) 以点D为中心那么点A的位置可以表示为−3ex+ey-3e_x+e_y−3ex+ey,点B的位置可以表示为2ex+3ey2e_x+3e_y2ex+3ey,从式中可以看出点的坐标是由基前面的系数表示的。 上面笛卡从尔坐标系中点的坐标表示也是一种变换 ...
Python 代码优化技巧(一)
Python相比于C++来说有着十分用户友好的编程方式与众多的机器学习和深度学习库,入门快、学习轻松,但其性能劣势一直为人诟病。因此,很多工程师致力于提高python代码性能。本文记录下目前我所知道的Python代码加速方法! Numba Numba 是一个开源的 JIT 编译器可以纯Python和Numpy代码转为快速地机器码执行,但其不能加速Pandas代码而且在多线程的任务出容易出错! numba可以将python变为C的性能,并且所有代码的改动点只需要加一行代码! 参考官网地址:https://numba.pydata.org/ 下面以官方计算π\piπ的例子来测试性能提升幅度: 1234567891011121314151617181920212223242526272829303132333435363738from numba import jitimport randomimport timedef monte_carlo_pi(nsamples): acc = 0 for i in range(nsamples): x = random.ra ...
机器学习相关面试问题
贝叶斯概率 P(y_i∣x)=P(x∣y_i)P(y_i)P(x)P\left(y\_{i} | x\right)=\frac{P\left(x | y\_{i}\right) P\left(y\_{i}\right)}{P(x)} P(y_i∣x)=P(x)P(x∣y_i)P(y_i) 极大似然估计 判别式和生成式算法各有哪些?区别是什么? 区别:二者最本质的区别是建模对象的不同。 判别式模型的评估对象是最大化条件概率P(Y|X)并对此进行建模; 生成式模型的评估对象是最大化联合概率P(X,Y)并对此进行建模。 判别式模型:线性回归、决策树、支持向量机SVM、kNN、神经网络等; 生成式模型:隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA。 集成学习 决策树和随机森林的区别 决策树 + Bagging + 随机特征选择 = 随机森林(bagging,包含CART决策树等) 随机森林可以防止过拟合原因(随机性): 产生决策树的样本是随机生成。 构建决策树的特征值是随机选取。 树产生过程中裂变的时候是选择N个最佳方向中的随机一个裂变的。 Bagging ...
Python 功能模块库汇总
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具。 pyenv – 简单的 Python 版本管理工具。 Vex – 可以在虚拟环境中执行命令。 virtualenv – 创建独立 Python 环境的工具。 virtualenvwrapper- virtualenv 的一组扩展。 包管理 管理包和依赖的工具 pip – Python 包和依赖关系管理工具。 pip-tools – 保证 Python 包依赖关系更新的一组工具。 conda – 跨平台,Python 二进制包管理工具。 Curdling – 管理 Python 包的命令行工具。 wheel – Python 分发的新标准,意在取代 eggs。 包仓库 本地 PyPI 仓库服务和代理。 warehouse – 下一代 PyPI。 Warehousebandersnatch – PyPA 提供的 PyPI 镜像工具。 devpi – PyPI 服务和打包/测试/分发工具。 localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。 分 ...
uTools 强大的生产力工具集
本文推荐一款强大的生产力工具集,介绍来自官方文档。 uTools是什么? uTools是一个极简、插件化、跨平台的现代化桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。 通过快捷键(默认alt+space)就可以快速呼出这个搜索框。它相当聪明,可以支持输入、拖拽、自动粘贴等作为输入源,相应的插件也早已准备就绪,统一的设计风格和操作方式,助你高效的得到结果。 当你熟悉它后,能够为你节约大量时间,让你可以更加专注地改变世界。 uTools能做什么? 最简单的,uTools可以作为一个程序快速启动器,支持英文、英文驼峰、中文拼音、拼音首字母来打开你的本地程序。除程序外,win10和mac用户还可以快速搜索并打开「控制面板」内的细项。总之,你只要还记得一个大概的名字,直接输入基本都能找到。 针对中文特别优化,例如可以通过搜索记事本或jsb打开记事本,而不是搜索notepad。 程序启动器仅仅是最基础的功能,uTools最大的特点就是拥有强大的插件系统,每个插件都有简洁美观、易于操作的界面,输入plugins进入插件管理,你就可以根据自己的需求挑选安装,组合成自己最趁手的工具合集 ...
图卷积网络 GCN(二)图上的傅里叶变换和逆变换
背景知识 如要了解谱图卷积,首先需要学习图理论基础和图中如何进行傅里叶变换。 对于傅里叶变换,本文不再赘述。详细内容可以参考: 理解傅里叶变换 深入理解傅里叶变换 图上的傅立叶变换 傅立叶变换是将时域的函数转换成频域上的函数,是对于同一个函数的不同视角,数学定义如下: F(w)=F(f(t))=∫f(t)e−iwtdt(1)\mathcal{F}(w)=\mathcal{F}(f(t))=\int{f(t)e^{-iwt}}dt \quad\quad\quad (1) F(w)=F(f(t))=∫f(t)e−iwtdt(1) 公式(1)表示的意义是傅立叶变换是时域信号 f(t)f(t)f(t) 与基函数 e−iwte^{-iwt}e−iwt 的积分。 为什么选择e−iwte^{-iwt}e−iwt作为基函数?原因有二: e−iwte^{-iwt}e−iwt是正交函数系。 e−iwte^{-iwt}e−iwt是拉普拉斯算子Δ\DeltaΔ的特征函数。 至于e−iwte^{-iwt}e−iwt由何种推导得来的请参考: 理解傅里叶变换 先解释下拉普拉斯算子Δ\DeltaΔ的定义 在数 ...
图卷积网络 GCN (一)研究背景和空域图卷积
研究背景 首先,为什么需要研究图卷积网络GCN(Graph Convolution Network)呢? 目前算法研究处理的数据主要分为两种: Euclidean 结构数据:主要有图片、语音、文本等数据结构,例如图像、视频中像素点是排列整齐的矩阵,可以被CNN(Convolution Neural Network)高效地处理。 Non-Euclidean 结构数据:主要有图(graph)和三维几何等数据,CNN 无法直接处理在这些数据。 因此,研究 GCN 的原因可以分为以下三点: CNN 无法直接处理 Non-Euclidean 数据。学术表达是传统离散卷积无法在 Non-Euclidean 的结构数据上无法保持平移不变性;简而言之就是在图结构数据中每个顶点的邻居节点数据不同,无法使用相同大小的卷积核来进行卷积运算。 由于 CNN 无法直接处理 Non-Euclidean 结构数据,而卷积操作可以有效地提取数据的特征。因此,如何在图数据中利用卷积来提取空间特征来进行机器学习是一个亟待解决的问题,也是 GCN 研究的重点内容。 如果研究的问题本身不具备拓扑图结构,是否可以 ...
【2020/WWW】Structural Deep Clustering Network
文章链接:https://arxiv.org/abs/2002.01633 源码链接:https://github.com/bdy9527/SDCN TL;DR 本文提出了一种结构深度聚类网络(SDCN),将结构信息集成到深度聚类中。设计了一个传递算子将autoencoder学习到的表示传递到相应的GCN层,并设计了双重自监督机制来统一这两种不同的深层神经结构并指导整个模型的更新。通过这种方式,从低阶到高阶的多重数据结构,自然地与自动编码器学习到的多重表示相结合。 模型/算法 如图所示。首先构造一个基于原始数据的KNN(K-Nearest Neighbor)图。然后将原始数据和KNN图分别输入到自动编码器和GCN中。将自动编码器的每一层与GCN的相应层连接起来,通过传递操作符将特定于自动编码器的表示集成到结构感知的表示中。用一种双重自我监督机制来监督自动编码器和GCN的训练进度。 kNN Graph 构建KNN图两种常用的方法: Heat Kernel(用于连续数据) Sij=e−∥xi−xj∥2t\mathrm{S}_{i j}=e^{-\frac{\left\|x_{i} ...
Python 项目中自动生成 requirements.txt
背景 为了使python项目易于复现,需要考虑到项目中依赖包的版本。本文介绍所了解的两种自动生成 requirements.txt 的方法 生成依赖 pip freeze > requirements.txt 适用于创建了虚拟环境venv的项目。 对于没有创建虚拟环境的项目,这种方法会将本地所有安装的库都列入 requirements.txt 中。 详情参考:https://github.com/bndr/pipreqs pipreqs pipreqs 说明文档 安装 pip install pipreqs 使用 pipreqs ./ 注:出现编码错误时使用 pipreqs ./ --encoding utf-8 问题:如果出现 pip 安装 read timed out 问题,可以延长 pip 默认安装时间: pip --default-timeout=100 install pipreqs。 参考:https://blog.csdn.net/qq_38316655/article/details/81463917 安装依赖 如果可以使用外网,可以直接使用命令 p ...
PyTorch Geometric 安装与入门
早期基于 DGL 库学习卷积神经网络,写过一个 GCN demo。后来PyTorch的几何扩展库出来了,发现学术界很多paper都是基于 PyG 实现的,因此学习下 PyG 如何使用。PyG 全称为 PyTorch Geometric。 事实上这两个库都非常实用,但 PyG 和 DGL 这两大框架应该如何选择呢?没有好坏之分,个人只是从工具生态中进行判断,给出这两个库在Github中 Fork 和 Star 数量,可以说明 PyG 维护人员和受欢迎的程度还是要高一点的啊! PyG 安装 PyG 全称是PyTorch-Geometric,是一个PyTorch基础上的一个库,专门用于图形式的数据,可以加速图学习算法的计算过程,比如稀疏化的图等。 参考:https://github.com/rusty1s/pytorch_geometric 对于 PyTorch 版本为1.5.0,安装一下库: 12345$ pip install torch-scatter==latest+${CUDA} -f https://pytorch-geometric.com/whl/to ...
PopRank:异质信息网络中对象级别的节点排序模型
论文标题 | Object-Level Ranking: Bringing Order to Web Objects 论文来源 | WWW 2005 论文链接 | http://www.ra.ethz.ch/CDstore/www2005/docs/p567.pdf 源码参考 | https://github.com/TommyCpp/nx-poprank TL;DR 网页检索的主要任务是按照应答用户查询的相关性和流行度对相关对象进行排名。由于不同网页对象间存在不同的关系类型,传统的 PageRank 模型在计算对象的流行度(Popularity)时不再有效。本文提出一种对特殊域中对象级排名的链接分析模型,明确的对每种的对象关系分配一个流行度传播因子(PPF,Popularity Propagation Factor),研究不同种类关系的不同 PPF 如何影响网页对象的流行度排名,同时提出一种自动搜索 PPF 的方法。 Algorithm/Model 网页链接构成的图称为网页图,这种图为同质图且算法 PageRank 和 HITS 可以通过分析链接来对网页进行排序。网页中不同种类的对 ...
红包算法和洗牌算法
红包算法 解决红包金额随机生成的问题。 红包分配规则: 所有人抢到金额之和等于红包金额。 每个人至少抢到一分钱。 保证所有人抢到金额的概率相等。 法一:二倍均值法 设剩余红包金额为M,剩余人数为N,金额公式: 每次抢到的金额=(0, M / N X 2) 公式保证每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。 问题:除了最后一次,每次抽到的金额都小于人均金额的两倍,并不是任意的随机。 法二:线段切割法 划分方法如下: 如何在[0, M]确定N-1个切割点? 当所有切割点确定以后,子线段的长度也随之确定。这样每个人来抢红包的时候,只需要顺次领取与子线段长度等价的红包金额即可。 问题:切割点重复出现如何解决? 洗牌算法 从n个数中随机抽出m个不重复的数。 参考 三种洗牌算法,介绍其中常用的Knuth-Durstenfeld Shuffle。 Knuth 和 Durstenfeld 在Fisher 等人的基础上对算法进行了改进,算法时间复杂度为O(n),空间复杂度为O(1)。该算法的基本思想和 Fisher 类似,每次从未处理的数据中随机取出一个数字 ...
FINCH:基于最近邻的无参数聚类方法
论文标题 | Efficient Parameter-free Clustering Using First Neighbor Relations 论文来源 | CVPR 2019 论文链接 | Efficient Parameter-free Clustering Using First Neighbor Relations 源码链接 | https://github.com/ssarfraz/FINCH-Clustering TL;DR 本文中提出一种无超参、无需指定距离阈值或聚类数量的无监督聚类方法。整体思想感觉和层次聚类相差不大但使用了最近邻的样本点聚类。 Algorithm/Model 文中使用邻居矩阵来表示样本间的邻接关系,其定义如下: A(i,j)={1, if j=ki1 or kj1=i or ki1=kj10, otherwise A(i, j)=\left\{\begin{array}{lr}{1,} & {\text { if } j=k_{i}^{1} \text { or } k_{j}^{1}=i \text { or } k_{i}^{1}=k ...
Windows 高效软件推荐
本文对2019年所使用的windows软件工具进行总结和推荐。 桌面美化 此图片为本人目前桌面截图,以简洁实用为标准。主要涉及到以下软件: 每日壁纸精选 微软商店 每日壁纸精选 此应用可以自动下载必应壁纸来自动更新电脑桌面壁纸。应用占用开机内存较小,壁纸质量高而且免费,因此选择这款应用。 TranslucentTB github TranslucentTB 此应用可以将菜单栏虚化或者透明化,占用内存较小,个人感觉使桌面更加美观。也可以直接在微软商店下载。效果如下所示: 文件及其快捷方法 此处可根据自身的需求和习惯进行定制,个人习惯如下: 桌面上仅保存一个文件夹work;里面保存待处理的文件和一些快捷方式,可以使桌面看起来更加整洁。 任务栏中固定一些使用频率较高的软件,减少搜索时间。 系统效率工具 Snipaste 截图工具 官网地址 目前发现最好用的截图工具,可以在屏幕上贴上多个图片+自定义截图快捷键,在阅读、撰写文献、对比图片中非常实用。强烈推荐! 火绒安全软件 官网地址 目前使用存在感最低的软件,因为这款软件中不绑定软件、没有广告弹窗等等多个优点。强烈推荐其中的弹窗 ...
《明智行动的艺术》 随笔
用理由辩护 很多时候我们说服对方是需要理由的,在话语前加“因为”就是告诉人们你是有理由的,即使有时候这个“因为”后面跟着的理由并非无懈可击。可以尽量的多使用“因为”,它是人与人之间交流的润滑剂。 选择疲劳症 我们在做了大量的比较和决定时,会出现“选择疲劳症”,头脑会麻木,思维会渐渐不清晰,这时我们可以暂时休息一下,之后头脑会变得清晰,在做选择和决定时,会做出更好的决定。 关联谬误 有时我们会将被使用过的物品和使用过它的人进行关联,导致我们有可能不会使用这件物品,或者喜欢使用这件物品——这就是关联谬误。 平均数的问题 如果一个数值不会给平均值带来很大影响,那么“平均”这个概念是有意义的;如果一个数值极大或极小,它会给平均值带来很大影响,平均的概念就没有意义。 激励排挤效应 用奖金激励员工努力工作,在大多数情况下是能够起到好的作用,但有时会带来相反的作用。员工会形成“认真对待有提成或提成高的工作,糊弄没提成或提成低的工作”的思维。 废话倾向 当你面对一件事情没有什么想法的时候,不要为了表现自己而废话连篇,那样只会让你显得无知、肤浅。如果你对一件事表达不清楚,表述的含糊不清,说明你并没有 ...