自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白马负金羁

数据挖掘 | 统计分析 | 图像处理 | 程序设计

  • 博客(417)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 机器学习中的数学修炼(含勘误表!)

数学是机器学习和数据科学的基础,任何期望涉足相关领域并切实领悟具体技术与方法的人都无法绕过数学这一关。机器学习中的数学修炼——为你打开一道通往机器学习世界的数学之门:笔者系统地整理并介绍了机器学习中所涉及的必备数学基础,这些都是笔者从浩如烟海的数学知识中精心萃取的,在学习和研究机器学习技术时所必须的内容...

2020-08-03 10:21:42 7400 24

原创 欢迎订阅我的专栏,好文章一网打尽

博主当前围绕人工智能这个主题开设了三个专栏:【机器学习之术】、【机器学习之道】、【自然语言处理】,这些文章皆为以往博客中精华内容的汇总,已经收录的文章超过70篇(日后笔者还会适时更新),总计有近160万次点阅。希望这些内容可以帮助读者解开学习过程中的一些疑惑,使得订阅者能最大程度地从中收获新知

2020-04-15 05:55:17 12287 9

原创 图像处理中的数学修炼(第2版)上市:新旧版同时在售

自《图像处理中的数学修炼》原书第一版于2017年2月上市以来,加印重印多次,在京东和当当等主流在线购书网站上已经累计有超过3200个有效购买评论,并且在这两个网站上的好评度都超过99%。结合第一版书籍读者给出的反馈,同时为了适应相关技术的快速发展,在首版发行三年之后的2020年,笔者再度与清华大学出版社合作,乘势推出全新的《图像处理中的数学修炼》(第2版),现第一、二版同时在售

2020-04-06 08:38:37 11498 1

原创 机器学习中的数学原理详解(Python版)

Python机器学习中的数学修炼一书以机器学习为主导,系统地整理并介绍了机器学习中所涉及的必备数学基础。具体包括微积分、概率论与数理统计、数值计算、信息论、凸优化、泛函分析基础与变分法,以及蒙特卡洛采样等话题。为了帮助读者加深理解并强化所学,本书还从上述数学基础出发进一步介绍了回归、分类、聚类、流形学习、集成学习,以及概率图模型等机器学习领域中的重要话题。其间,本书将引领读者循序渐进地拆解各路算法的核心设计思想及彼此间的关联关系,并结合具体例子演示基于Python进行实际问题求解的方法

2015-12-09 15:42:53 11203 2

原创 深入理解二叉树与递归:从LeetCode实践出发【2】(题号235、236、1026、1123)

递归是强大的问题求解工具,是程序设计中的一种重要思想和机制。递归有助于写出清晰易懂的代码,能有效提高程序的整体风格。此外,很多算法的实现都有赖于递归函数,例如DFS、回溯、动态规划等。二叉树是一种典型的递归数据结构。因此,很多跟二叉树有关的问题用递归的代码来求解都是最方便的

2021-04-12 12:20:54 108 1

原创 深入理解二叉树与递归:从LeetCode实践出发【1】(题号1448、129、617、814、98、333、124)

递归是强大的问题求解工具,是程序设计中的一种重要思想和机制。递归有助于写出清晰易懂的代码,能有效提高程序的整体风格。此外,很多算法的实现都有赖于递归函数,例如DFS、回溯、动态规划等。二叉树是一种典型的递归数据结构。因此,很多跟二叉树有关的问题用递归的代码来求解都是最方便的。本文主要以LeetCode中的题目为例,演示利用递归的方法解决二叉树有关问题的技巧与方法

2021-04-12 08:54:10 506 1

原创 深入理解优先队列与堆:从Leetcode实践出发【2】(题号23、215、857、295)

堆是一种非常有用的数据结构类型,它可以用作执行优先级队列的存储结构,也可以用来实现堆排序。Python中对优先级队列和堆,都提供了很好的支持。LeetCode题库中有相当一部分会考察堆的使用与理解,本文将从LeetCode实战的角度出发,演示堆(或优先级队列)在问题求解中的具体应用

2021-04-08 17:46:03 204

原创 深入理解优先队列与堆:从Leetcode实践出发【1】(题号253、670、146、767)

在实际应用中,队列中的元素可能需要一定的优先级,每次从队列中取出具有特定优先级的元素。这种队列叫做优先级队列(Priority Queue)。实现优先级队列的方法有很多种,使用堆(Heap)来实现是一种比较常见且高效的方法。Python中对优先级队列和堆,都提供了很好的支持。LeetCode题库中有相当一部分会考察堆的使用与理解,本文将从LeetCode实战的角度出发,演示堆(或优先级队列)在问题求解中的具体应用

2021-04-08 12:14:41 220 12

原创 深入理解拓扑排序:从Leetcode实践出发(题号207、210、269)

在图论中,对于一个有向无环图(DAG, Directed Acyclic Graph)而言,拓扑排序(Topological Sorting)就是其所有顶点的线性序列,这种序列的先后顺序取决于顶点之间的依赖关系。本文会介绍拓扑排序的基本算法,并用其解决几道经典的LeetCode问题

2021-04-04 04:07:39 190 10

原创 深入理解Python超快速解题语法:从Leetcode实践出发(题号58、1313、1431、1470、1512、1672)

人生苦短,我用Python。严格来说,本文所涉及之内容并不与具体的数据结构或算法相关,但不可否认,正确的使用Python中的特殊语法确实可以快速解决一些LeetCode题目。事实上,在之前的文章中,已经见识过使用Python中正则表达式模块来处理一些字符串问题会大大简化编程工作量。本文中的例子,大部分甚至只需要一行代码即可搞定

2021-04-03 05:57:47 76

原创 深入理解字典树:从Leetcode实践出发(题号208、211、720)

字典树,即Trie树(或前缀树),是为了快速检索单词而设计的一种特殊的树型搜索结构。本文将通过若干LeetCode题目来演示利用Trie树解决实际问题的基本方法,部分内容摘录引用自《算法之美:隐匿在数据结构背后的原理》一书

2021-04-02 04:09:05 321

原创 深入理解正则表达式:从Leetcode实践出发(题号65、1023)

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。许多程序设计语言都支持利用正则表达式进行字符串操作,例如Python中的re模块,它提供Perl风格的正则表达式模式

2021-04-02 02:19:21 242 1

原创 深入理解并查集:从Leetcode实践出发【2】(题号924、990、684)

不相交集(Disjoint Set)又称并查集,是解决等价或划分问题的一种有效的数据结构(树和森林常常被用来描述不相交集)。前一篇文章已经介绍了关于这种特殊数据结构的基本知识,并采用Python3实现了并查集类。本文将继续以LeetCode题目为例来具体实践如何利用并查集这种特殊的数据结构解决实际问题

2021-03-29 19:36:09 256 3

原创 深入理解并查集:从Leetcode实践出发【1】(题号547、721)

不相交集(Disjoint Set)又称并查集,是解决等价或划分问题的一种有效的数据结构(树和森林常常被用来描述不相交集)。本文主要节选《算法之美:隐匿在数据结构背后的原理》一书中的相关章节来介绍并查集的基本原理和操作,此处会采用Python3重新实现相关算法。同时,本文还将以一道LeetCode题目为例来具体说明如何利用并查集这种特殊的数据结构解决实际问题

2021-03-27 09:32:00 87

原创 深入理解双指针类型问题:从Leetcode实践出发(题号15、16、18、209)

双指针类型题目的处理对象往往是线性表(例如数组、链表、字符串等),这种类型的题目在LeetCode中是比较普遍的,但难道往往不大。本文并不打算覆盖所有可能的子类型,仅抛砖引玉地讨论几道有一定代表性(同时也可能不太容易想到解法)的问题

2021-03-23 10:30:49 74

原创 深入理解归并与排序:从Leetcode实践出发(题号21、147、148)

排序是算法设计中最基本的问题之一。很多语言也都内置了排序函数,实际开发中需要手工编写排序函数的情况并不多见。但如果涉及到链表排序的话,通常内置函数就不能直接使用了。事实上,LeetCode题库中有相当多涉及排序的问题,也有很多操作链表的问题。本文主要讨论其中几个把链表和排序结合在一起的问题,并复习一下关于归并排序的知识

2021-03-21 12:56:39 67

原创 深入理解回溯法:从Leetcode实践出发【4】(题号51、52、37)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文是回溯法系列文章的最后一弹,其中选取的Leetcode题目难度级别为Hard,而且是非常经典的算法问题

2021-03-17 06:24:36 120

原创 深入理解二分查找:从LeetCode实践出发【2】(题号875、658、29、240、436、378)

二分查找(Binary Search)是数据结构与算法课程中应该讲到的一个非常重要的内容。通常,二分查找算法可以借由递归的结构来实现,也可以通过迭代来实现。但是在实际应用中二分查找可能变化出许多更为复杂的形式,面对这些变种题目时能否得心应手地来处理,便考察了你是否真正掌握了二分查找的精髓

2021-03-12 14:55:22 93

原创 深入理解栈结构:从Leetcode实践出发【2】(题号901、496、739、503、84、85、42)

栈是一种非常重要的线性数据结构,它的特点在于最后入栈的数据项也将是最先被处理的数据项。Leetcode中涉及很多与栈相关的题目。此外,像树的深度遍历除了使用递归以外,另外一种写法就是利用栈来迭代(循环)实现。而DFS(也包括回溯法)相关的题目在Leetcode中更是非常普遍。因此,牢固掌握栈的使用,并攻克相关类型题目也非常重要

2021-03-10 07:48:57 71

原创 深入理解栈结构:从Leetcode实践出发【1】(题号20、32、1249、150、735)

栈是一种非常重要的线性数据结构,它的特点在于最后入栈的数据项也将是最先被处理的数据项。Leetcode中涉及很多与栈相关的题目,而且可以基于栈实现的DFS(也包括回溯法)相关的题目在Leetcode中更是非常普遍。牢固掌握栈的使用,并攻克相关类型题目也非常重要。本文将基于Leetcode中的题目来实际展示一下栈的使用

2021-03-10 06:06:43 69

原创 深入理解深度优先搜索:从Leetcode实践出发【3】(题号785、207、797、802、1319)

在图中进行搜索是一个非常重要的话题,具体来说,又分为深度优先搜索(DFS,Depth First Search)和广度优先搜索(BFS, Breadth First Search)两种。其中,前者的理解难度要大于后者,而且在Leetcode解题中,前者应用得也更多。在涉及到回溯或动态规划时,往往也需要借助到DFS来编程实现。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下DFS有关的一些话题

2021-03-06 17:53:50 565 5

原创 深入理解深度优先搜索:从Leetcode实践出发【2】(题号733、559、695、200、690、17)

在树(或者图)中进行搜索是一个非常重要的话题,具体来说,又分为深度优先搜索(DFS,Depth First Search)和广度优先搜索(BFS, Breadth First Search)两种。其中,前者的理解难度要大于后者,而且在Leetcode解题中,前者应用得也更多。在涉及到回溯或动态规划时,往往也需要借助到DFS来编程实现

2021-03-06 04:45:13 255 1

原创 深入理解回溯法:从Leetcode实践出发【3】(题号22、79、131、526、1079)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下回溯法编程的基本套路

2021-03-05 08:12:17 88

原创 深入理解回溯法:从Leetcode实践出发【1】(题号46、47、78、90、784)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下回溯法编程的基本套路import copyclass Solution:...

2021-03-01 03:56:41 82

原创 深入理解动态规划:从Leetcode实践出发【5】(题号198、213、983、416、322)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-25 09:31:31 961

原创 深入理解动态规划:从Leetcode实践出发【4】(题号121、300、516、416)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-23 17:17:17 71

原创 Carlini-Wagner的L0攻击(Adversarial Examples)

Nicholas Carlini与其导师David Wagner 在2017年IEEE Symposium on Security & Privacy上发表的论文中提出了后来以他们名字命名的AE生成算法——Carlini-Wagner攻击(或简称为CW攻击),论文也荣获当年度的会议最佳学生论文奖。论文中,作者提出了L0、L2、L_inf三种攻击方式,本文主要以ImageNet数据集为例演示其中L0攻击的效果

2021-02-23 13:39:26 258

原创 深入理解动态规划:从Leetcode实践出发【3】(题号1143、718)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-23 13:38:36 102

原创 深入理解哈希:从Leetcode实践出发【2】(题号523、560、525、974)(前缀和类型题目)

前缀和类型题目是Leetcode中比较特别的且又比较普遍的一类题目。它隐式地使用了动态规划的思想,但是在具体编码实现时,又必须借助哈希表(字典)。因此,它同时考察了两方面知识的掌握情况。但是,前缀和相关问题的动规的部分通常状态转移方程是有定式的,所以真正考察的点更应该是如何定义字典

2021-02-23 09:19:44 355

原创 深入理解动态规划:从Leetcode实践出发【2】(题号96、91、338、343)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-21 09:57:10 70

原创 深入理解动态规划:从Leetcode实践出发【1】(题号70、139、140)

动态规划是一种非常重要的算法设计思想。历史上有很多著名的算法都是基于这种思想设计而来的,例如:Needleman–Wunsch算法、CYK算法、FFT算法、维特比算法等等。动态规划的核心思想有两个:首先是将一个大问题拆解为若干子问题;其次是将曾经计算过的结果储存起来以备多次使用。实践中,动态规划方面的编程题目,变化多端,难度较大。本系列教程,博主希望可以帮助读者做到从入门到精通,循序渐进地深入理解并掌握相关题目的求解技巧

2021-02-21 08:30:03 146

原创 深入理解深度优先搜索:从Leetcode实践出发【1】(题号94、144、145、104、230)

在树(或者图)中进行搜索是一个非常重要的话题,具体来说,又分为深度优先搜索(DFS,Depth First Search)和广度优先搜索(BFS, Breadth First Search)两种。其中,前者的理解难度要大于后者,而且在Leetcode解题中,前者应用得也更多。在涉及到回溯或动态规划时,往往也需要借助到DFS来编程实现。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下DFS有关的一些话题

2021-02-07 09:19:47 184

原创 【订阅前必读】机器学习的“道”与“术”专栏的说明

本专栏着重介绍各类常用的经典机器学习方法之原理思路、数学细节、应用实践(基于Python, R和MATLAB),具体涉及内容包括但不限于支持向量机、期望最大化模型、AdaBoost、GDBT、概率图模型(包括贝叶斯网络及HMM)、kNN、朴素贝叶斯、k均值、CART和C4.5决策树等

2021-02-02 12:15:05 1974

原创 【订阅前必读】深入理解数字图像处理专栏的说明

这是本博客中图像处理方面的精华文章集合,专注经典图像处理算法的原理解析与编程实现,总计访问量已近百万,热门文章的主题包括(但不限于)自适应图像去噪、图像去雾(暗通道法、优化对比度法等)、抠图与图像融合(泊松编辑、贝叶斯法等)、对比度增强(CLAHE等

2021-02-02 08:11:51 7796 8

原创 深入理解回溯法:从Leetcode实践出发【2】(题号77、39、40、216、93)

回溯法(Backtracking)是一种重要的算法设计思想。它常常借助深度优先遍历(DFS)来实现,另外一类常借助DFS来实现的算法是动态规划,因此,二者的编码往往会使用到递归。在Leecode上有很多会用到回溯法来解决的编程问题。本文将从Leetcode题目求解的角度出发,通过实践来探讨一下回溯法编程的基本套路

2021-02-02 06:33:20 353 5

原创 Python中的四种队列(queue)、堆(heap)

Python中提供了四种内置的队列实现,特别地其中的优先级队列可以用来实现堆。此外,在Python中我们也直接使用堆。熟练掌握这些数据结构,在问题求解时可以大大简化代码的实现。文末将结合一道Leetcode题目来作为演示

2021-01-29 18:42:28 1455

原创 Python图像处理之小波去噪原理:硬阈值VS软阈值

在之前的文章中,我们已经体验了在Python中利用小波变换对图像进行去噪的效果,本文将更加侧重其背后的原理。特别地,我们将理清软阈值与硬阈值等相关概念。首先,下面所示为利用小波变换对图像做去噪处理的一个基本框架

2021-01-02 17:43:47 3896 2

原创 深度学习的黑魔法防御术:恶意样本(Adversarial Example) 的防御策略综述

随着深度学习研究的深入,相关应用已经在许多领域展现出惊人的表现。一方面,深度神经网络(DNN)的强大能力着实吸引着学术界和产业界的眼球。另外一方面,深度学习的安全问题也开始引起广泛地关注。对于一个给定的深度神经网络,经过训练,它可能在具体任务上的表现出甚至超过人类。但是在原本能够被正确分类的图像中引入稍许(人眼不易察觉的)扰动,神经网络就可能被误导,从而导致错误的结果。经过精心调整的能够误导神经网络的输入就被称为是恶意样本(Adversarial Example)

2020-12-30 16:47:08 3213 1

原创 Python图像处理之小波去噪

在此前的文章中,我们讨论了在Python中利用pywt包提供的API对图像做小波分解的基本方法。小波变换在图像处理中的一个具体应用就是平滑去噪。后续我们还会从原理上讨论如何利用小波变换来设计图像去噪算法。但在此之前,本文将主要演示,利用Python中已有的API进行图像小波去噪的方法及效果

2020-12-28 04:44:26 7276 11

原创 Python图像处理之小波变换

小波变换或小波分析在很多领域中都有重要应用,例如石油勘探、数据压缩,以及接下来所要探讨的图像处理等。作为后续系列文章的铺垫,本文将主要介绍在Python中进行小波分析所需要用到的一个重要的软件包PyWavelets。关于小波的一些原理性的知识,请参考我已出版的《图像处理中的数学修炼》一书

2020-12-27 17:24:46 4729 17

在Word中写出像LaTeX一样的公式

Word中编辑数学公式的技巧(毕业论文排版必备),在Word中写出像LaTeX一样的的公式。

2015-12-21

白马负金羁的留言板

发表于 2020-01-02 最后回复 2020-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除