数学基础
文章平均质量分 93
数学基础
_Rye_
左手代码右手诗
一行代码一行诗
展开
-
程序员需要读哪些数学书?
数学领域涉及的面很广,相关的书籍也很多。咱们这个专栏我从数学的三个主要方面,介绍程序员常用的数学知识,包括离散数学、概率和统计和线性代数。所以还是围绕这个专栏的三大模块,来推荐相应的书籍。原创 2024-04-19 18:06:26 · 955 阅读 · 0 评论 -
位操作的三个应用实例
所以,使用误差的百分比可以避免由于不同的 n,导致的迭代次数有过大差异。首先,right 是没有超过最大值的,那么 (right -left)/2 自然也就没有超过范围,即使 left 加上了 (right -left)/2,也不会超过 right 的值,所以运算的整个过程都不会产生溢出。仔细观察,你会发现偶数的二进制最后一位总是 0,而奇数的二进制最后一位总是 1,因此对于给定的某个数字,我们可以把它的二进制和数字 1 的二进制进行按位“与”的操作,取得这个数字的二进制最后一位,然后再进行判断。原创 2024-04-19 16:13:46 · 764 阅读 · 0 评论 -
我们为什么需要反码和补码?
在第 1 讲里,介绍了十进制数转二进制数。这里面很多人对逻辑右移和算术右移中提到的符号位和补码有疑惑。这里面涉及了几个重要的概念,包括符号位、溢出、原码、反码和补码。我详细讲一下这几个点的来龙去脉。首先我们来看,什么是符号位,为什么要有符号位?用一句话来概括就是,符号位是有符号二进制数中的最高位,我们需要它来表示负数。在实际的硬件系统中,计算机 CPU 的运算器只实现了加法器,而没有实现减法器。那么计算机如何做减法呢?我们可以通过加上一个负数来达到这个目的。比如,3-2 可以看作 3+(-2)。原创 2024-04-19 08:55:57 · 1127 阅读 · 0 评论 -
51 | 综合应用篇答疑和总结:如何进行个性化用户画像的设计?
在综合应用篇之前,我们分别从基础模块、概率统计模块和线性代数模块出发,详细阐述了不同编程技术背后的数学知识。在综合应用这个模块,我们又从几个非常实用的案例出发,讲解了如何结合不同的编程技术,设计并架构大型的系统,最终为商业需求提供解决方案。如今的数据系统越来越庞大,系统设计时常常会用到缓存系统来提升记录查找的效率。对缓存系统的强烈需求也催生了很多开源的项目,例如 Memcached 和 Redis 等等,这些系统都已经相当成熟。而在这个模块,我们同时使用了哈希函数和队列,实现了一个最简单的缓存系统。原创 2024-04-18 16:51:23 · 745 阅读 · 0 评论 -
50 | 推荐系统(下):如何通过SVD分析用户和物品的矩阵?
在今天的内容中,我们回顾了 SVD 奇异值分解的核心思想,解释了如何通过 XX’ 和 X’X 这两个对称矩阵的特征分解,求得分解后的 U 矩阵、V 矩阵和 Σ 矩阵。另外,我们也解释了在用户对电影评分的应用场景下,SVD 分解后的 U 矩阵、V 矩阵和 Σ 矩阵各自代表的意义,其中 Σ 矩阵中的奇异值表示了 SVD 挖掘出来的电影主题,U 矩阵中的奇异向量表示用户对这些电影主题的评分,而 V 矩阵中的奇异向量表示了电影和这些主题的相关程度。我们还通过 Python 代码,实践了这种思想在推荐算法中的运用。原创 2024-04-18 15:04:29 · 1066 阅读 · 0 评论 -
49 | 推荐系统(上):如何实现基于相似度的协同过滤?
在今天的内容中,通过一个常用的实验数据,设计并实现了最简单的基于用户的协同过滤。我们最关心的是这个数据中,用户对电影的评分。有了这种二元关系,我们就能构建矩阵,并通过矩阵的操作来发现用户或物品之间的相似度,并进行基于用户或者物品的协同过滤。对于最终的计算结果,你可以尝试分析针对不同用户的推荐,看看协同过滤推荐的效果是不是合理。在你分析推荐结果的时候,可能会参考 movie.csv 这个文件中所描述的电影类型。这些电影类型都是一开始人工标注好的。原创 2024-04-18 10:35:08 · 837 阅读 · 0 评论 -
48 | 搜索引擎(下):如何通过查询的分类,让电商平台的搜索结果更相关?
上一节,阐述了如何使用哈希的数据结构设计倒排索引,并使用倒排索引加速向量空间模型的计算。倒排索引提升了搜索执行的速度,而向量空间提升了搜索结果的相关性。可是,在不同的应用场景,搜索的相关性有不同的含义。无论是布尔模型、向量空间模型、概率语言模型还是其他任何更复杂的模型,都不可能“一招鲜,吃遍天”。今天,就结合自己曾经碰到的一个真实案例,为你讲解如何利用分类技术,改善搜索引擎返回结果的相关性。你可能会觉得奇怪,这分类技术,不是监督式机器学习中的算法吗?它和信息检索以及搜索技术有什么关系呢?且听我慢慢说来。原创 2024-04-18 10:07:30 · 1034 阅读 · 0 评论 -
47 | 搜索引擎(上):如何通过倒排索引和向量空间模型,打造一个简单的搜索引擎?
上一节,我们充分利用了哈希表时间复杂度低的特点,设计了一个简单的缓存系统。在实际项目中,哈希表或者类似的哈希数据结构,有着更为广泛的运用。比如,搜索引擎中的倒排索引,也是基于哈希表结构来设计的。这种倒排索引可以大大提升数据对象的检索效率。除了搜索的效率,搜索引擎另一个需要考虑的问题是相关性,也就是说,我们需要保证检索出来的信息是满足用户需求的。最简单的基于倒排索引的实现,属于一种布尔排序模型,它只考虑了单词是不是出现在文档之中,如果出现了就返回相应的文档,否则就不返回,对应于布尔模型中的真假值。原创 2024-04-17 17:50:46 · 807 阅读 · 0 评论 -
46 | 缓存系统:如何通过哈希表和队列实现高效访问?
缓存(Cache)是计算机系统里非常重要的发明之一,它在编程领域中有非常非常多的应用。小到电脑的中央处理器(CPU)、主板、显卡等硬件,大到大规模的互联网站点,都在广泛使用缓存来提升速度。而在网站的架构设计中,一般不会像 PC 电脑那样采用高速的缓存介质,而是采用普通的服务器内存。但是网站架构所使用的内存容量大得多,至少是数个吉字节 (GB)。我们可以把缓存定义为数据交换的缓冲区。它的读取速度远远高于普通存储介质,可以帮助系统更快地运行。原创 2024-04-17 16:52:20 · 674 阅读 · 0 评论 -
45 | 线性代数篇答疑和总结:矩阵乘法的几何意义是什么?
回答完两个问题之后,来总结一下线性代数这个模块。线性代数最基本的概念包括了向量、矩阵以及对应的操作。向量表示了一组数的概念,非常适合表示一个对象的多维特征,因此被广泛的运用在信息检索和机器学习的领域中。而矩阵又包含了多个向量,所以适合表示多个数据对象的集合。同时,矩阵也可以用于表达二维关系,例如网页的邻接矩阵,用户对物品的喜好程度,关键词在文档中的 tf-idf 等等。由于向量和矩阵的特性,我们可以把它们运用在很多算法和模型之中。原创 2024-04-17 16:15:26 · 2978 阅读 · 0 评论 -
44 | 奇异值分解:如何挖掘潜在的语义关系?
之前介绍的 PCA 主成分分析,要求矩阵必须是对称的方阵,因此只适用于刻画特征之间关系的协方差矩阵。但是,有的时候我们需要挖掘的是样本和特征之间的关系,例如文档和词条。这个时候矩阵并不是对称的方阵,因此无法直接使用 PCA 分析。为此,SVD 奇异值分解提供了一种可行的方案。它巧妙地运用了矩阵 X 和自己的转置相乘,生成了两种对称的方阵,并通过这两者的特征分解,获得了 SVD 中的左奇异向量所组成的矩阵 U 和右奇异向量所组成的矩阵 V,并最终推导出奇异值矩阵Σ。原创 2024-04-17 15:29:39 · 834 阅读 · 0 评论 -
43 | PCA主成分分析(下):为什么要计算协方差矩阵的特征值和特征向量?
今天我们继续来聊 PCA 主成分分析的下半部分。上一节,我们讲解了一种特征降维的方法:PCA 主成分分析。这个方法主要是利用不同维度特征之间的协方差,构造一个协方差矩阵,然后获取这个矩阵的特征值和特征向量。根据特征值的大小,我们可以选取那些更为重要的特征向量,或者说主成分。最终,根据这些主成分,我们就可以对原始的数据矩阵进行降维。PCA 方法的操作步骤有些繁琐,并且背后的理论支持也不是很直观,因此对于初学者来说并不好理解。原创 2024-04-17 14:28:46 · 2146 阅读 · 1 评论 -
42 | PCA主成分分析(上):如何利用协方差矩阵来降维?
在概率统计模块,详细讲解了如何使用各种统计指标来进行特征的选择,降低用于监督式学习的特征之维度。接下来的几节,我会阐述两种针对数值型特征,更为通用的降维方法,它们是(Principal Component Analysis)和这两种方法是从矩阵分析的角度出发,找出数据分布之间的关系,从而达到降低维度的目的,因此并不需要监督式学习中样本标签和特征之间的关系。原创 2024-04-17 11:35:07 · 1240 阅读 · 0 评论 -
41 | 线性回归(下):如何使用最小二乘法进行效果验证?
今天我们使用了具体的案例来推导最小二乘法的计算过程,并用 Python 代码进行了验证。通过最近 3 节的讲解,相信你对线性方程组求精确解、求近似解、以及如何在线性回归中运用这些方法,有了更加深入的理解。实际上,从广义上来说,最小二乘法不仅可以用于线性回归,还可以用于非线性的回归。其主要思想还是要确保误差ε最小,但是由于现在的函数是非线性的,所以不能使用求多元方程求解的办法来得到参数估计值,而需要采用迭代的优化算法来求解,比如梯度下降法、随机梯度下降法和牛顿法。原创 2024-04-17 10:32:59 · 1104 阅读 · 0 评论 -
40 | 线性回归(中):如何使用最小二乘法进行直线拟合?
今天我们探讨了为什么简单的线性方程组无法满足线性函数拟合的需求,最主要的原因就是现实的观测数据往往不是精确的线性关系,存在一定的误差。我们所要做的就是,在允许一定范围的误差前提下,找到一种线性关系,尽量的满足观察数据,使得我们所定义的误差最小。最小二乘法通过向量空间的欧氏距离之平方,定义了预测值和真实值之间的误差。在给定自变量和因变量的观测值之后,最小二乘法可以帮助我们推导出所有自变量的系数,并最小化误差。我使用矩阵的形式,为你推导了整个过程。原创 2024-04-17 09:06:51 · 2531 阅读 · 0 评论 -
39 | 线性回归(上):如何使用高斯消元求解线性方程组?
今天我们一起探讨了求解线性方程组最常见的方法之一,高斯消元法。这个方法主要包含了消元和回代两个步骤。这些步骤都可以使用矩阵的操作来进行。从矩阵的角度来说,消元就是把系数矩阵变为上三角矩阵,而回代是把这个上三角矩阵变为单位矩阵。我们可以直接把用于消元和回代的矩阵,用于由系数和因变量值组成的增广矩阵,并获得最终的方程解。线性方程组的概念,也是线性回归分析的基础。在线性回归时,我们也能获得由很多观测数据值所组成的方程组。但是,在进行线性回归分析时,方程组的处理方式和普通的方程组求解有一些不同。原创 2024-04-16 18:06:29 · 1097 阅读 · 0 评论 -
38 | 矩阵(下):如何使用矩阵操作进行协同过滤推荐?
今天首先简要地介绍了推荐系统的概念和主要思想。为了给用户提供可靠的结果,推荐系统需要充分挖掘历史数据中,用户和物品之间的关系。协同过滤的推荐算法就很好地体现了这一点。一旦涉及用户和物品的这种二元关系,矩阵就有用武之地了。我通过矩阵来表示用户和物品的关系,并通过矩阵计算来获得协同过滤的结果。协同过滤分为基于用户的过滤和基于物品的过滤两种,它们的核心思想都是相同的,因此矩阵操作也是类似的。在这两个应用场景下,矩阵点乘体现了多个用户或者物品之间的相似程度,以及聚集后的相似程度所导致的最终推荐结果。原创 2024-04-16 17:55:52 · 1272 阅读 · 0 评论 -
37 | 矩阵(上):如何使用矩阵操作进行PageRank计算?
我们可以把向量看作一维数组,把矩阵看作二维数组。矩阵的点乘,是由若干个向量的点乘组成的,所以我们可以通过矩阵的点乘操作,挖掘多组向量两两之间的关系。今天我们讲了矩阵的点乘操作在 PageRank 算法中的应用。通过表示网页的邻接二元关系,我们可以使用矩阵来计算 PageRank 的得分。在这个应用场景下,矩阵点乘体现了多个马尔科夫过程中的状态转移。矩阵点乘和其他运算操作,还可以运用在很多其他的领域。原创 2024-04-16 17:30:25 · 705 阅读 · 0 评论 -
36 | 文本聚类:如何过滤冗余的新闻?
这一节,介绍了如何在机器学习的聚类算法中,使用向量空间模型。在聚类中,数据对象之间的相似度是很关键的。如果我们把样本转换为向量,然后使用向量空间中的距离或者夹角余弦,就很自然的能获得这种相似度,所以向量空间模型和聚类算法可以很容易的结合在一起。为了给你加深印象,介绍了一个具体的 K 均值算法,以及向量空间模型在其中所起到的作用,并通过 Python 的 sklearn 代码演示了几个关键的步骤。向量空间模型和 K 均值算法的结合,虽然简单易懂,但是一开始怎样选择这个群组的数量,是个关键问题。原创 2024-04-16 16:24:34 · 783 阅读 · 0 评论 -
35 | 文本检索:如何让计算机处理自然语言?
首先,我们先来看一下,什么是信息检索,以及最基本的排序模型有哪些。这样,你就能理解为什么我们需要使用向量空间模型了。现在的信息检索技术已经相当成熟,并影响我们日常生活的方方面面。搜索引擎就是这项技术的最佳体现,人们输入一个查询,然后系统就能返回相关的信息。笼统地说,信息检索就是让计算机根据用户信息需求,从大规模、非结构化的数据中,找出相关的资料。这里的“非结构化”其实是针对经典的关系型数据库(Relation Database)而言的,比如 DB2、Oracle DB、MySQL 等等。原创 2024-04-16 15:58:22 · 625 阅读 · 0 评论 -
34 | 向量空间模型:如何让计算机理解现实事物之间的关系?
上一节,讲到了向量和向量空间的一些基本概念。为了帮助你更好地理解向量空间模型,这里给出向量和向量空间的严格定义。首先假设有一个数的集合 F,它满足“F 中任意两个数的加减乘除法(除数不为零)的结果仍然在这个 F 中”,我们就可以称 F 为一个“域”。我们处理的数据通常都是实数,所以这里我只考虑实数域。而如果域 F 里的元素都为实数,那么 F 就是实数域。如果 x1,x2,……,xn∈F,那么 F 上的 n 维向量就是:或者写成转置的形式:向量中第 i 个元素,也称为第 i 个分量。原创 2024-04-16 15:33:09 · 936 阅读 · 0 评论 -
33 | 线性代数:线性代数到底都讲了些什么?
相对于概率统计,线性代数中的基本概念和知识点可能没有那么多。但是对于刚入门的初学者,这些内容理解起来会比较费力。在这一节里,进行了大致的梳理,帮助你学习。标量和向量的区别,标量只是单独的一个数,而向量是一组数。矩阵是向量的扩展,就是一个二维数组。我们可以使用哈希表的链地址法表示稀疏矩阵。标量和向量或矩阵的加法、乘法比较简单,就是把这个标量和向量或矩阵中所有的元素轮流进行相加或相乘。向量之间的加法和矩阵之间的加法,是把两者对应的元素相加。向量之间的相乘分为叉乘和点乘,在专栏里默认向量乘法为点乘。原创 2024-04-16 15:01:29 · 1087 阅读 · 0 评论 -
32 | 概率统计篇答疑和总结:为什么会有欠拟合和过拟合?
第二模块中,介绍了很多概率统计中常用的概念。随机变量和它的概率分布体现了事物发生的不确定性。而条件概率、联合概率和边缘概率体现了多个随机变量之间的关系以及是不是相互独立,通过这三者的关系,我们可以推导出贝叶斯定理。在贝叶斯定理和变量独立性假设的基础之上,我讲了朴素贝叶斯算法中的公式推导,以及如何使用先验概率来预测后验概率。由于朴素贝叶斯假定多个变量之间相互独立,因此特别适合特征维度很多、特征向量和矩阵很稀疏的场景。基于词包方法的文本分类就是个非常典型的例子。原创 2024-04-16 14:22:59 · 622 阅读 · 0 评论 -
31 | 统计意义(下):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
方差分析可以帮助我们检测差异的显著性,它分析的内容是受一个或多个因素影响的因变量在不同水平分组的差异。不过单因素的方差分析要求因变量属于正态分布总体,并具有方差齐性。如果因变量的分布明显的是非正态,或者方差的差异很显著,那么我们就不能直接使用这种方法。对于方差不齐的情况,我们可以选择适当的函数,例如对数、倒数等等,对原始数据进行转换,直到方差齐性变得显著,或者剔除明显属于“均值±标准差”之外的数据。当然,对于非正态分布的数据,我们也可以使用非参数的分析。原创 2024-04-16 11:42:31 · 2948 阅读 · 0 评论 -
30 | 统计意义(上):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
今天我互联网公司常见的 A/B 测试实验入手,讲解了一个更科学的方法来比较不同算法的效果,它就是统计学里的差异显著性检验。这个方法包含了一些你平时可能不太接触的概念,你首先需要理解显著性差异、统计假设检验和 P 值。其中最为重要的就是显著性差异的概念,因为这是差异显著性检验区别于简单的平均值方法的关键。为了便于你的记忆,这里再用一个形象的比喻来带你复习一遍。考了 90 分,我问他:“你比班上平均分高多少?原创 2024-04-16 11:14:39 · 1666 阅读 · 0 评论 -
29 | 归一化和标准化:各种特征如何综合才是最合理的?
今天介绍了在机器学习领域里,如何使用统计里的数据分布来进行特征值的转换。这里,梳理了几个要点,便于你的记忆。第一点,为什么有时候需要转换特征值?因为不同类型的特征取值范围不同,分布也不同,相互之间没有可比性。因此在线性回归中,通过这些原始值分析得到的权重,并不能代表每个特征实际的重要性。第二点,如何使用归一化进行特征值转换?这里的归一化是指使用特征取值范围中的最大值和最小值,把原始值转换为 0 到 1 之间的值。这样处理的好处在于简单易行,便于理解。原创 2024-04-16 10:42:59 · 1131 阅读 · 0 评论 -
28 | 熵、信息增益和卡方:如何寻找关键特征?
在编程领域中,机器学习已经有了十分广泛的应用,它主要包括监督式学习(Supervised Learning)和非监督式的学习(Unsupervised Learning)。监督式学习,是指通过训练资料学习并建立一个模型,并依此模型推测新的实例,主要包括分类(Classification)和回归(Regression)。无论是在监督学习还是非监督学习中,我们都可以使用特征选择。不过,我今天要聊的特征选择,会聚焦在监督式学习中的特征处理方法。原创 2024-04-16 10:13:44 · 864 阅读 · 0 评论 -
27 | 决策树:信息增益、增益比率和基尼指数的运用
通过这两节的介绍,我想你对信息熵、信息增益、基尼指数等信息论的概念,以及基于这些概念的决策树分类算法应该有了一定了解。决策树算法的优势在于,容易理解和实现。此外,对于通过样本训练所得的树结构,其每个结点都是基于某个数据特征的判定,对于我们的阅读和解释来说都是很方便的。当然,决策树也有不足。之前我已经提到,这类算法受训练样本的影响很大,比较容易过拟合。在预测阶段,如果新的数据和原来的训练样本差异较大,那么分类效果就会比较差。为此人们也提出了一些优化方案,比如剪枝和随机森林。如果感兴趣,你可以自己去研究一下。原创 2024-04-16 09:04:42 · 1388 阅读 · 0 评论 -
26 | 信息熵:如何通过几个问题,测出你对应的武侠人物?
还是拿刚刚那个“测测你是哪个武侠人物”的小游戏举例子。我设计了一个测试题,你可以看看下面这个图表。这个表里一共有 10 个人物。每个人物都有性别、智商、情商、侠义和个性共 5 个属性。相应地,我会设计 5 道题目分别测试这 5 个属性所占的比例。最后,将测出的 5 个属性和答案中的武侠人物对照,就可以找到最接近的答案,也就是被测者对应的武侠人物。这个过程非常简单,你应该很容易就能理解。在这个设计过程中,起决定性作用的环节其实就是,如何设计这 5 道题目。比如,题目的先后顺序会不会直接影响要回答问题的数量。原创 2024-04-15 17:41:36 · 979 阅读 · 0 评论 -
25 | 马尔科夫模型:从PageRank到语音识别,背后是什么模型在支撑?
马尔科夫模型考虑了 n 个状态之间的转移及其对应的关系。这个状态是比较抽象的含义,在不同的应用领域代表不同的含义。在概率语言模型中,状态表示不同的词,状态之间的转移就代表了词按照一定的先后顺序出现。在 PageRank 这种链接分析中,状态表示不同的网页,状态之间的转移就代表了人们在不同网页之间的跳转。在马尔科夫模型中,我们知道了每种状态及其之间转移的概率,然后求解序列出现的概率。然而,有些现实的场景更为复杂,比如说我们观测到的不是状态本身,而是状态按照一定概率分布所产生的输出。原创 2024-04-15 17:02:58 · 930 阅读 · 0 评论 -
24 | 语言模型:如何使用链式法则和马尔科夫假设简化概率模型?
之前介绍了用于分类的朴素贝叶斯算法。我们讲了,朴素贝叶斯算法可以利用贝叶斯定理和变量之间的独立性,预测一篇文章属于某个分类的概率。除了朴素贝叶斯分类,概率的知识还广泛地运用在其他机器学习算法中,例如语言模型、马尔科夫模型、决策树等等。今天我就来说说,基于概率和统计的语言模型。语言模型在不同的领域、不同的学派都有不同的定义和实现,因此为了避免歧义,我这里先说明一下,我们谈到的语言模型,都是指基于概率和统计的模型。原创 2024-04-15 16:23:37 · 701 阅读 · 0 评论 -
23 | 文本分类:如何区分特定类型的新闻?
在这一讲中,讲了一个文本分类系统的几个关键步骤,其中最重要的是自然语言的处理和分类模型的训练和预测。自然语言的处理是关键的预处理步骤,它将文本转换成计算机所能处理的数据。常见方法包括中文分词,英文的取词干和归一化,还有适用于各种语言的停用词、同义词和扩展词等。如果不考虑这些词出现的先后顺序,以及表达的深层次语义,那么我们就可以使用词包的方法,将大段的文章和语句转化成单词所组成的集合。之后,我们就能统计每个单词属于每个分类的条件概率,以及分类和单词的先验概率。原创 2024-04-15 15:50:18 · 817 阅读 · 0 评论 -
22 | 朴素贝叶斯:如何让计算机学会自动分类?
今天从一个看似非常简单的判断水果的例子出发,介绍了如何通过物体的属性及其数值,让计算机理解现实世界中的事物,并通过朴素贝叶斯方法来对其进行分类。在朴素贝叶斯方法的推导过程中,讲了如何使用贝叶斯法则,将后验概率的估计转换为先验概率和条件概率。朴素贝叶斯训练过程包括基于样本数据的先验概率和条件概率统计,分类过程就包括了使用贝叶斯法则,结合新样本的属性数据以及训练好的模型数据,进行最终的预测。最后,将朴素贝叶斯和其他常见分类算法,比如 KNN 近邻、决策树、SVM 向量机,做了对比。原创 2024-04-15 15:08:36 · 1133 阅读 · 0 评论 -
21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
这一讲继续讨论了概率分布相关的内容,不过这次的重点是多个随机变量相关的联合概率、条件概率、边缘概率。这里概念有点多,但是都很重要,因为这三者之间的推算关系,直接构成了贝叶斯定理的核心,所以你要花点时间理解并记住它们。而贝叶斯定理定义了先验概率、后验概率和似然函数,后验概率和似然函数及先验概率的乘积成正比关系。此外,通过多个变量之间的独立性,我们可以简化联合概率的计算问题。贝叶斯定理和变量之间独立性的假设,对后面理解朴素贝叶斯算法很有帮助。原创 2024-04-15 11:44:37 · 2410 阅读 · 0 评论 -
20 | 概率基础(上):一篇文章帮你理解随机变量、概率分布和期望值
通过这讲的内容,你对概率的基本知识应该有所了解。本讲中,我通过抛硬币和汽车驾驶的例子,讲述了概率论中一些最基本,也是最重要的概念,包括随机现象、随机变量、概率分布和期望值。离散型的随机变量在计算机编程中的应用更为广泛。它可以和排列组合的思想结合起来,通过不同排列或组合的数量,计算每种情况出现的概率。如果把这种概率和每种情况下的复杂度数值结合起来,就可以计算复杂度的期望值。另外,离散型概率也可以运用在机器学习的分类算法中。原创 2024-04-15 11:05:27 · 1655 阅读 · 0 评论 -
19 | 概率和统计:编程为什么需要概率和统计?
通过第一个模块的学习,我想你对离散数学在编程领域中的应用,已经有了比较全面的认识。可以看出来,数据结构和基础算法体现的大多数都是离散数学的思想。这些思想更多的时候是给我们提供一种解决问题的思路,在具体指导我们解决问题的时候,我们还需要更多的数学知识。比如说,在机器学习、数据挖掘等领域,概率统计就发挥着至关重要的作用。那关于概率统计,我们需要掌握哪些知识呢?这些知识究竟可以用在什么地方呢?第二模块的第一节,我们就来聊聊这些问题,让你对这一模块的学习做到心中有数。原创 2024-04-15 10:13:30 · 1085 阅读 · 0 评论 -
18 | 总结课:数据结构、编程语句和基础算法体现了哪些数学思想?
之前的 17 讲,我们从小处着眼,介绍了离散数学中最常用的一些知识点。讲到了很多。这些知识点看似是孤立的,但是内部其实有很多联系。今天这一节,我们就来总结一下前面讲过的内容,把之前讲过的内容串联起来。原创 2024-04-15 09:09:07 · 652 阅读 · 0 评论 -
17 | 时间和空间复杂度(下):如何使用六个法则进行复杂度分析?
今天我们接着聊复杂度分析的实战。上一讲,从数学的角度出发,结合自身经验给你总结了几个分析复杂度的法则。但是在实际工作中我们会碰到很多复杂的问题,这个时候,正确地运用这些法则并不是件容易的事。今天,就结合几个案例,教你一步步使用这几个法则。原创 2024-04-12 17:50:45 · 897 阅读 · 0 评论 -
16 | 时间和空间复杂度(上):优化性能是否只是“纸上谈兵”?
作为程序员,你一定非常清楚复杂度分析对编码的重要性。计算机系统从最初的设计、开发到最终的部署,要经过很多的步骤,而影响系统性能的因素有很多。如果将整个系统的构建比作生产汽车,那么计算复杂度相当于在蓝图设计阶段,对整个汽车的性能进行评估。如果我们能够进行准确的复杂度分析,那么就能从理论上预估汽车的各项指标,避免生产出一辆既耗油又开得很慢的汽车。可是,你也常常会发现,要准确地分析复杂度并不容易。这一讲,来说说如何使用数学的思维,来进行系统性的复杂度分析。原创 2024-04-12 17:19:49 · 591 阅读 · 0 评论 -
15 | 从树到图:如何让计算机学会看地图?
我们经常使用手机上的地图导航 App,查找出行的路线。那计算机是如何在多个选择中找到最优解呢?换句话说,计算机是如何挑选出最佳路线的呢?前几节,我们讲了数学中非常重要的图论中的概念,图,尤其是树中的广度优先搜索。在广度优先的策略中,因为社交网络中的关系是双向的,所以我们直接用无向边来求解图中任意两点的最短通路。这里,我们依旧可以用图来解决这个问题,但是,影响到达最终目的地的因素有很多,比如出行的交通工具、行驶的距离、每条道路的交通状况等等,因此,我们需要赋予到达目的地的每条边,不同的权重。原创 2024-04-12 16:48:08 · 593 阅读 · 0 评论
分享