算法学习
文章平均质量分 90
Kanny广小隶
每一个不曾起舞的日子,都是对生命的辜负。
展开
-
图机器学习——5.1 图神经网络:GNN初步介绍
图神经网络(Graph Neural Network,GNN)下面我们开始介绍一个图机器学习中非常重要的部分——图神经网络(Graph Neural Network,GNN)。后面这一整个大部分的内容,也主要参考:CS224W: Machine Learning with Graphs.1. 符号定义假设我们已知图GGG包含下述信息:图中所有的节点集合(vertex set):VVV;邻接矩阵(adjacency matrix):A\boldsymbol{A}A;节点特征(node feat原创 2022-05-23 15:30:39 · 1632 阅读 · 3 评论 -
HoroPCA: Hyperbolic Dimensionality Reduction via Horospherical Projections 学习笔记——2.方法与代码
本文承接上一篇文章:HoroPCA: Hyperbolic Dimensionality Reduction via Horospherical Projections 学习笔记——1.背景介绍1. HOROPCA算法为了介绍HOROPCA的具体算法,我们首先介绍传统欧氏空间中的PCA算法。1)欧氏空间PCA给定一个数据集SSS与目标维度KKK,PCA会贪婪地寻找一系列主成分p1,…,pKp_{1}, \ldots, p_{K}p1,…,pK使得最大化正交投影πo,p1,…,pkE(⋅)\pi_原创 2021-10-31 23:12:02 · 271 阅读 · 0 评论 -
HoroPCA: Hyperbolic Dimensionality Reduction via Horospherical Projections 学习笔记——1.背景介绍
HoroPCA学习笔记1. 背景介绍本篇博客学习的文章为:HoroPCA: Hyperbolic Dimensionality Reduction via Horospherical Projections。传统欧氏空间(Euclidean spaces)的主成分分析(Principal Component Analysis,PCA)是一种基本的降维技术,它寻找最能解释原始数据的一系列方向。下面将PCA推广到一般的双曲空间。给定一个方向,PCA依赖于下述几个核心点:这些方向所张成的仿射子空间(原创 2021-10-31 23:08:26 · 514 阅读 · 0 评论 -
双曲嵌入论文与代码实现——2. 方法与代码
本篇接上一篇:双曲嵌入论文与代码实现——1. 数据集介绍1. 方法说明首先学习相关的论文中的一些知识,并结合进行代码的编写。文中主要使用Poincaré embedding。整体的空间为一个ddd维的开球:Bd={x∈Rd∣∥x∥<1}\mathcal{B}^{d}=\left\{\boldsymbol{x} \in \mathbb{R}^{d} \mid\|\boldsymbol{x}\|<1\right\}Bd={x∈Rd∣∥x∥<1},∥⋅∥\|\cdot\|∥⋅∥为欧几里得范原创 2021-10-31 22:54:54 · 1300 阅读 · 1 评论 -
双曲嵌入论文与代码实现——1. 数据集介绍
双曲嵌入论文与代码实现由于双曲嵌入相关的文章已经有了一系列的代码。本篇博客主要目的实现最开始的双曲嵌入论文,将论文中有些直接写出来的内容进行了细节的推导,同时实现对应的代码。学习的文章:Poincaré Embeddings for Learning Hierarchical Representations主要参考的代码:poincare_embeddingsgensim – Topic Modelling in Python - poincare.py由于有些代码难以运行,有些比较难原创 2021-10-31 22:16:16 · 5682 阅读 · 0 评论 -
数据率失真理论(RATE DISTORTION THEORY)
数据率失真理论(Rate distortion theory)或称信息率-失真理论(information rate-distortion theory)是信息论的主要分支,其的基本问题可以归结如下:对于一个给定的信源(source, input signal)分布与失真度量,在特定的码率下能达到的最小期望失真是多少;或者为了满足一定的失真限制,可允许的最大码率为何,DDD 定义为失真的符号。要完全避免失真几乎不可能。处理信号时必须允许有限度的失真﹐可减小所必需的信息率。1959年﹐Claude Shan原创 2021-07-19 21:50:37 · 8636 阅读 · 4 评论 -
ReduNet 代码解读【Numpy 版本】
最近学习了ReduNet里面代码的框架,作为一个经常使用R的童鞋来说受益匪浅。本篇博客主要来介绍一下里面的代码的结构。这里我们主要针对用Numpy库构建的网络结构与代码逻辑进行学习与分析。下面对一个Iris数据的demo进行分析。首先是通过parser进行传参,在使用下述命令运行代码时,可以将参数纳入到代码中。python3 iris.py --layers 4000 --eta 0.1 --eps 0.1iris.py文件中传参部分如下所示。参数包括layers(网络层数), eta(超参数,原创 2021-07-19 21:45:16 · 1542 阅读 · 1 评论 -
ReduNet 中的一些原理 及 The Rate-Distortion Function
两种编码率总体空间的编码率(coding rate):R(Z,ϵ)≐12logdet(I+dmϵ2ZZ⊤),R(\boldsymbol{Z}, \epsilon) \doteq \frac{1}{2} \log \operatorname{det}\left(\boldsymbol{I}+\frac{d}{m \epsilon^{2}} \boldsymbol{Z} \boldsymbol{Z}^{\top}\right),R(Z,ϵ)≐21logdet(I+mϵ2dZZ⊤),以及类内空间原创 2021-07-19 21:40:29 · 1920 阅读 · 5 评论 -
ReduNet: A White-box Deep Network from the Principle 学习
最近在学习马毅老师的 NeurIPS 2020 中稿文章 MCR2,当时引起很多的报告,并且也上了热搜。抱着看一看的态度,认真学习了几篇核心的文章,并进行理解。作为 ReduNet: A White-box Deep Network from the Principle 的前置文章之一的,Deep Networks from Optimizing Rate Reduction,首先对其进行了学习。文章考虑的问题是针对分类问题,如何能够使得分类更加准确。使用的方法考虑到了数据的压缩与表示,非常类似对比学原创 2021-07-19 21:33:44 · 2551 阅读 · 1 评论 -
降低核方法在大样本高维数据情形复杂度的一些方法
目前使用核方法很容易遇到的问题是,当遇到大规模机器学习上时。目前有一些论文的方法来降低核方法在大样本高维数据情形的计算复杂度与空间复杂度。这里进行一个简单的归纳总结。1. 运用Bochner’s theorem有一种做法是使用那些平移不变的Kernel(高斯与拉普拉斯核),运用Bochner’s theorem,将核函数估计进行简化,而后从计算出来的分布中进行采样,从而可以达到降维的目的(May A, Garakani A B, Lu Z, et al. Kernel Approximation Me原创 2021-07-19 21:18:36 · 711 阅读 · 1 评论 -
深度学习如何引入先验知识(临床医生的诊断经验)
深度学习的问题在使用传统的深度学习网络对病灶进行分割时,如,FCNN, U-Net, Dense U-Net等,网络均只考虑了本身图像上的信息,让网络本身通过大量的图像与label的对应关系,进行深度学习模型的训练。这一系列过程中没有任何人工的干预以及人为的先验信息。当数据量十分巨大时,这种做法往往能够取得非常好的分割效果,但当数据量相对较小时,如很多医学影像数据往往只有几十张精准标注的图像,引入医生本身的解剖学信息往往能够取得更好的分割效果。但问题的难点在于如何将医生的临床知识进行量化表示,并与深度学习原创 2021-01-11 22:20:44 · 5168 阅读 · 0 评论 -
Boosting 系列算法——7. LightGBM
LightGBM (Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练。其在Higgs数据集上LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6,并且准确率也有提升。GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。LightGBM提出的原创 2020-12-19 15:29:18 · 470 阅读 · 1 评论 -
Boosting 系列算法——6. XGBoost
1. 算法导出在XGBoost中,使用的目标函数相比于GBDT,添加一个新的正则项,主要目的是衡量模型的复杂程度,直接在损失函数中直接控制树的复杂度。Obj=∑i=1NL(yi,F(xi))⏟训练损失+∑m=1MΩ(hm)⏟树的复杂度,Obj=\sum_{i=1}^N \underbrace{L\left(y_i, F(\mathbf{x}_i)\right)}_{\text {训练损失}}+\sum_{m=1}^M \underbrace{\Omega\left(h_{m}\right)}_{\tex原创 2020-12-19 15:22:01 · 316 阅读 · 1 评论 -
Boosting 系列算法——5. Gradient Tree Boosting / Gradient Boosting Decision Tree (GBDT)
1. 算法介绍梯度提升通常与固定大小的决策树 (尤其是CART树)一起作为基学习器。对于这种特殊情况,Friedman在文章《Greedy function approximation: A gradient boosting machine.》中提出了一种对梯度增强的改进方法,以提高模型的学习与泛化能力。GBDT的第mmm步的弱学习器——回归树hm(x)h_{m}(\mathbf{x})hm(x)对模型当前的pseudo-residuals进行拟合。令JmJ_{m}Jm为树的叶子数。树将输入空间划原创 2020-12-19 15:14:21 · 541 阅读 · 1 评论 -
Boosting 系列算法——4. Gradient Boosting
1. 算法导出Gradient Boosting 是一种用于回归和分类问题的机器学习技术,其产生的预测模型是弱预测模型的集成,如采用典型的决策树 作为弱预测模型,这时则为梯度提升树(GBT或GBDT)。像其他提升方法一样,它以分阶段的方式构建模型,但它通过允许对任意可微分损失函数进行优化作为对一般提升方法的推广。Gradient Boosting 算法通过迭代的方式,将多个弱分类器结合成一个强分类器。最简单的解释是在最小二乘回归中,通过最小化均方误差1N∑i(y^i−yi)2{\tfrac {1}{N}原创 2020-12-19 14:23:55 · 1176 阅读 · 1 评论 -
Boosting 系列算法——3. Adaboost 的延伸算法
1. AdaBoost 的另一个理解角度前文所述的均为离散情况下的AdaBoost,简称:Discrete AdaBoost。下面我们从另一个角度来推导出Discrete AdaBoost算法。首先考虑最小化指数风险:C(F)=E(e−yF(x)).C(F)=\mathbb{E}\left(e^{-y F(\mathbf{x})}\right).C(F)=E(e−yF(x)).由于E(e−yF(x)∣x)=P(y=1∣x)e−F(x)+P(y=−1∣x)eF(x),∂E(e−yF(x)∣x)∂F(原创 2020-12-19 11:03:46 · 305 阅读 · 2 评论 -
Boosting 系列算法——2. Adaboost
1. 算法介绍AdaBoost 算法的全称是 Adaptive Boosting,其本质是用一系列弱分类器线性组合构造强分类器。弱分类器的性能只需比随机分类稍微好一些,依靠他们即可构造出一个非常准确的强分类器。强分类器的计算公式为:FM(x)=∑m=1Mαmhm(x),F_M(\mathbf{x}) = \sum_{m=1}^M \alpha_m h_m(\mathbf{x}),FM(x)=m=1∑Mαmhm(x),其中,x\mathbf{x}x是输入向量,FM(x)F_M(\mathbf原创 2020-12-19 10:53:28 · 436 阅读 · 3 评论 -
Boosting 系列算法——1. 简单概述
写在最前博主准备写几篇博客,主要将目前比较常见的一些Boosting算法进行汇总整理,帮助大家更好的进行机器学习算法的学习。同时对将来找工作的童鞋们也能有一些帮助。本系列博客参考了大量网上的内容(包括Wiki,中英文博客等),涉及到的相关Boosting算法的原始论文,以及李航老师的《统计学习方法》,三位大牛的《The Elements of Statistical Learning》,还有周志华老师的《集成学习》。为了方便大家对整个Boosting算法的理解,并且处于严谨的考虑,这一系列博客都将采用原创 2020-12-19 10:39:43 · 787 阅读 · 2 评论 -
可解释性神经网络——3.一种新的可解释性神经网络GAMI-Net
在之前,我们介绍了两种可解释性神经网络:可解释性神经网络——1.xNN可解释性神经网络——2.添加约束的xNN这里我们再介绍另一种网络结构:GAMI-Net,对应的文章为GAMI-Net: An Explainable Neural Network based on Generalized Additive Models with Structured InteractionsAccurate Intelligible Models with Pairwise Interactions原创 2020-08-03 10:44:24 · 4217 阅读 · 0 评论 -
可解释性神经网络——2.添加约束的xNN
在前面的文章中,我们介绍了 一种可解释性神经网络——xNN,而在本篇博客中,我们将要介绍一种针对前面文章的一种改进方法,使网络结构的可解释性更强,预测准确率更高。文章名称:Enhancing Explainability of Neural Networks through Architecture ConstraintsEnhancing Explainability of Neural Networks through Architecture Constraints模型介绍本博客所介绍的模型原创 2020-07-20 18:15:23 · 5379 阅读 · 4 评论 -
可解释性神经网络——1.xNN
引言随着深度学习的兴起,其在许多领域都能够取得远胜于传统方法的表现,如今许多行业都已经用到了深度学习以及神经网络来进行分析或者预测,解决实际的一些问题。但其可解释性差也一直是令人所诟病的一点,也就是我们常说的“黑箱问题”。例如:在识别一段话的语义情境时,计算机直接通过神经网络,给出这段话是积极的还是消极的,并且给出一个百分比作为置信度。但我们并不知道为什么计算机能够直接给出这样的结果,其内部的判断机制,都无法知晓。那么及时这个模型的准确率非常高,在实际使用时,我们也会为其画上一个大大的问号,使用时也会相原创 2020-07-20 17:48:03 · 7671 阅读 · 5 评论 -
【牛客】剑指Offer——21.栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)Python解答本题的思路是创建一个辅助栈,先挨个比较原先的序列(栈的压入顺序),...原创 2019-05-19 21:19:20 · 220 阅读 · 0 评论 -
【牛客】剑指Offer——20.包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。Python解答在压元素进栈时,同时此时栈内元素与当前元素的最小值也压入辅助栈。弹出时,对应最小值辅助栈的元素也对应弹出。# -*- coding:utf-8 -*-class Solution: def __init__(self): self.sta...原创 2019-05-19 21:05:15 · 215 阅读 · 0 评论 -
【牛客】剑指Offer——19.顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:[1, 2, 3, 4 ][5, 6, 7, 8 ][9, 10, 11, 12][13, 14, 15, 16]则依次打印出数字:1, 2, 3, 4 ,8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10.Python解答(参考...原创 2019-05-19 20:37:57 · 221 阅读 · 0 评论 -
【LeetCode】四数之和
题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组 。注意:答案中不可以包含重复的四元组。示例给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[...原创 2019-04-14 10:28:17 · 202 阅读 · 0 评论 -
【牛客】剑指Offer——35.数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size...原创 2019-07-09 11:18:57 · 186 阅读 · 0 评论 -
【牛客】剑指Offer——22.从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。Python解答# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass So...原创 2019-06-30 22:39:31 · 185 阅读 · 0 评论 -
【牛客】剑指Offer——23.二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。Python解答# -*- coding:utf-8 -*-class Solution: def VerifySquenceOfBST(self, sequence): # write code here ...原创 2019-06-30 22:43:36 · 214 阅读 · 0 评论 -
【牛客】剑指Offer——24.二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)Python解答# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# sel...原创 2019-06-30 22:48:27 · 196 阅读 · 0 评论 -
【牛客】剑指Offer——27.字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。Python解答# -*- coding:utf-8 -*-class Solution: def Permuta...原创 2019-06-30 22:53:46 · 225 阅读 · 0 评论 -
【牛客】剑指Offer——28.数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。Python 解答复杂做法# -*- coding:utf-8 -*-class Solution: def MoreThanHalfNum_Solution(s...原创 2019-08-31 09:42:31 · 196 阅读 · 0 评论 -
【牛客】剑指Offer——18.二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5Python 解答# -...原创 2019-05-08 21:28:38 · 154 阅读 · 0 评论 -
【牛客】剑指Offer——17.树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)什么叫树的子结构我们用《剑指Offer》当中的一张图来表示:Python 解答# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# se...原创 2019-04-30 16:17:16 · 178 阅读 · 0 评论 -
【LeetCode】宝石与石头
给定字符串 J 代表你现在拥有代表宝石的类型,和字符串 S 代表你拥有的石头。S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S 中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例1 输入: J = "aA", S = "aAAbbbb" 输出: 3示例2原创 2018-03-30 21:25:09 · 3927 阅读 · 0 评论 -
【LeetCode】寻找重复的电子邮箱
编写一个 SQL查询,来查找名为 Person 的表中的所有重复电子邮件。示例:+----+---------+| Id | Email |+----+---------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |+----+---------+根据以上输入,您的查询应返回以下结果:+---------+...原创 2018-04-16 15:01:49 · 1034 阅读 · 2 评论 -
【LeetCode】判断路线成圈
初始位置 (0, 0) 处有一个机器人。给出它的一系列动作,判断这个机器人的移动路线是否形成一个圆圈,换言之就是判断它是否会移回到原来的位置。移动顺序由一个字符串表示。每一个动作都是由一个字符来表示的。机器人有效的动作有 R(右),L(左),U(上)和 D(下)。输出应为 true 或 false,表示机器人移动路线是否成圈。示例 1: 输入: "UD" 输出: true...原创 2018-04-20 20:11:03 · 732 阅读 · 0 评论 -
【LeetCode】汉明距离
两个整数之间的汉明距离汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意: 0≤x,y<2310≤x,y<2310 ≤ x, y < 2^{31}.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指...原创 2018-04-21 11:05:07 · 501 阅读 · 0 评论 -
【LeetCode】转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。示例 1: 输入: “Hello” 输出: “hello”示例 2: 输入: “here” 输出: “here”示例 3: 输入: “LOVELY” 输出: “lovely”Python解法1(有点作...原创 2018-09-07 21:17:09 · 381 阅读 · 0 评论 -
【LeetCode】二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,15,7,null,null],3/ \9 20/ \15 7返回它的最大深度 3 。示例 1:写在前面的碎碎念首先看到题目的时候,觉得很简单,以为二叉树的储存结构就是题目中所提到的list:[3,9...原创 2019-01-17 21:46:01 · 231 阅读 · 0 评论 -
【LeetCode】求众数(四种方法)
题目给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于n/2n/2n/2的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2...原创 2019-01-21 15:08:00 · 10688 阅读 · 1 评论