数据科学学习之统计实验的设计、检验与分析

专栏/前文链接

本文为《数据分析与数据科学》专栏中的第三篇,
专栏的链接在这里.

第一篇博文的链接在这里.

第二篇博文的链接在这里.

希望本文与此专栏能够对接触,学习和研究数据科学的各位有所帮助。
本文将介绍如何设计统计实验并对其进行相关的检验和分析。

目录

*
专栏/前文链接
前言
1.A/B测试

+ 1.1 对照组
2.假设检验

+ 2.1 零假设
+ 2.2 备择假设
+ 2.3 单向假设检验和双向假设检验
3.重抽样

+ 3.1 置换检验
+ 3.2 穷尽置换检验和自助置换检验
4.统计显著性和p p p 值

+ 4.1 p p p 值
+ 4.2 α \alpha α值
5.t检验
6.多重检验
7.自由度
8.方差分析

+ 8.1 方差分析概述
+ 8.2 F统计量
9.卡方检验
10.多臂老虎机算法
后记

前言

统计实验设计的目标是能够设计出确认或推翻某个假设的实验。

一次统计实验包括提出假设,设计统计实验,收集实验中的数据并进行分析得出结论,再根据我们从有限数据集中得到的实验结果和结论的基础上作出推断,意在将结果应用于更大的过程或总体中。

数据科学学习之统计实验的设计、检验与分析

; 1.A/B测试

A/B测试A/B Testing)简单来说就是一种对照实验。它将实验分成两个组开展,进而确定两种处理(实验对象所接触的东西)、产品和过程等中较优的一个。在两组实验中,一般会有一组采用现有的标准处理,或者是不执行任何处理,称为 对照组,而另一组称为 实验组。我们通常假设实验组要优于对照组。A/B测试的结果易于测量,因此被广泛地用于Web设计和营销中。

在A/B测试中,我们将一位Web访问者称作是一个对象,对象会分配给两组处理中的一组,在理想情况下,对象是随机分配给一组处理的。这样,两个实验组之间的任何差异只有可能是这两个因素所导致的:1.不同处理的效果。2.将对象分配到不同处理过程中的运气因素。一些对象的效果可能本来就很好,而随机分配可能会导致效果好的对象集中在处理A或处理B中。

在A/B测试中,我们同样需要关注比较A组和B组时使用的 检验统计量(即度量)。在数据科学中,最常用的度量是二元变量,例如点击或未点击、购买或未购买等。在比较中所使用的度量,可以是连续变量,也可以是计数。

1.1 对照组

为什么要在实验中设计对照组,为什么不能只对一个组应用我们所关注的处理,并将结果与先前的经验进行对比?

这是因为,如果没有对照组,就不能确保除了处理的效果以外”其他条件均一致”,也不能确保所有差异的确是由处理(或偶然)导致的。除了处理,对照组与处理组具有相同的条件。如果我们只对比先前的经验,那么除了处理,可能还会有其他一些因素存在差异。

单盲研究双盲研究
单盲研究中,实验对象本身并不知道自己接受的是处理A还是处理B。如果对象知道自身所接受的处理,那么会对响应产生影响。 双盲研究是指研究者和协助者(例如医学研究中的医生和护士)都不知道哪个对象接受了哪种处理。如果处理是公开透明的,则盲测是不可行的,例如电脑与心理学家间的认知疗法。

在数据科学中,A/B测试常用于Web研究领域,其中的处理可以是网页的设计、产品的价格、标题用语等。我们需要思考如何遵守随机化的原则。通常,实验对象是Web访问者,所关注的结果是点击数、购买、访问时长、访问的页面数量、某个页面是否被访问等。在标准的A/B测试中,需要预先确定一个度量。我们可能需要采集多种行为度量,而且这些度量可能是我们所关注的。但是,如果希望实验能在处理A或处理B这两者之间做出一个决策,那么就需要预先确立一个度量,即检验统计量。如果在实验开展后再去选择某个检验统计量,这无疑会引入研究人员的一些偏好。

2.假设检验

假设检验也称为 显著性检验,其目的为确定一个观测到的效果是否是由随机性造成的。

人们经常会在思想上倾向于低估天然随机行为的范围,或是倾向于将随机事件曲解为具有某种显著性的模式。为此,人们提出了统计假设检验方法,目的是使研究人员免受随机性的愚弄。

曲解随机性
人们倾向于在实验中低估随机性,现在做如下实验:首先让一些人构想抛50次硬币的结果,并写下一系列随机的结果H(正面朝上)和T(反面朝上)。然后,让这些人实际去抛50次硬币,并记录结果。将真正的硬币抛掷结果和人工生成的结果各放一处。我们很容易看出来哪个结果是真实的,因为真实的结果中会出现一组连续的H和T。在真实的抛掷结果中,常常能看见五六个连续的H或T。但是,大多数人在构想随机抛硬币的结果时,如果已经有连续3~4个H或T时,就会暗示自己已经连续出现了足够多的H或T,最好就在这里切换成不同的结果,这样结果序列就会看起来更随机一些。
另外,抛硬币实验也说明了另一个问题,如果的确在现实世界中看到了类似于连续出现6个H或T的情况,例如一个标题比另一个标题好10%,我们倾向于将其归因于真实情况,而非巧合。

在一个设计适当的A/B测试中,处理A和处理B之间任何可观测到的差异,必定是由下面两个因素之一所导致的:1.分配对象中的随机可能性。2.处理A和处理B之间的真实差异。统计假设检验是对A/B测试(或任何随机实验)的进一步分析,意在评估随机性是否可以合理地解释A组和B组之间观测到的差异。

2.1 零假设

假设检验使用的逻辑是:”鉴于人们倾向于对异常的随机行为做出反应,并将其解释为有意义的真实行为,我们要在实验中证明,组间差异要比偶然性可能导致的差异更为极端。”这里包含了一个基线假设,即各个处理是相同的,并且组间差异完全是由偶然性所导致的。我们称该基线假设为 零假设。事实上,我们希望能证明零假设是错误的,并证明A组和B组结果之间的差异要比偶然性可能导致的差异更大。

一种实现方式是通过重采样置换过程,对A组和B组的结果做随机混洗,并反复将数据分配为规模相近的组,之后查看实验得到的差异与观测差异同样极端的频率。

2.2 备择假设

假设检验本身不仅包括零假设,还包括一个相抵消的备择假设。下面通过一些例子来说明:1.零假设是”A组和B组的均值间没有差异”,备择假设是”A不同于B”(可能更大,也可能更小)。2.零假设是”A

2.3 单向假设检验和双向假设检验

A/B测试通常是根据一个已有的默认选项(比如A)去测试一个新的选项(比如B),并且假定除非证明B明显优于A,否则我们将坚持使用A。在这种情况下,我们需要一个假设检验来免受倾向于B的偶然性的欺骗。我们并不在意在另一个方向上是否会受偶然性的愚弄,因为除非能证明B更好,否则我们将坚持A。所以,我们需要一种有方向的备择假设(即B比A好)。这种情况下,我们可以使用单向(或”单尾”)假设检验。 这意味着极端偶然性只会导致从一个方向上计入p值。

如果想要假设检验使我们免受任意方向上偶然性的愚弄,那么备择假设应该是双向的,即A不同于B,它可能更大,也可能更小,在这种情况下,我们要使用双向(或”双尾”)的假设。 这意味着极端偶然性导致可以从任意一个方向上计入p值。

3.重抽样

在统计学中, 重抽样是指从观测数据中反复地抽取数据值,目标是评估一个统计量中的随机变异性。重抽样还可用于评估并提高一些机器学习模型的准确性。例如,对于使用多个自助数据集构建的决策树模型,可以通过Bagging过程计算其平均值。

重抽样过程主要有两种类型,即自助法和置换检验。自助法用于评估一个估计量的可靠性,我们在前面已经做了介绍。本节将介绍用于检验假设的置换检验,它通常涉及两组或多组。

3.1 置换检验

置换检验,即将两组或多组样本组合在一起,并将观测值随机地或穷尽地重新分配给重抽样。置换过程涉及的样本通常指A/B测试或其他假设检验中的组。置换意味着改变一组值的顺序。要对一个假设进行置换检验,首先要将从A组和B组(和其他组)中得到的结果组合在一起。这就是零假设的逻辑,即无论处理指定给哪个组,都是无差别的。然后,我们从组合集中随机抽取出各个组,并查看组间的差异情况,实现对假设的检验,置换过程如下:
1.将各个组得出的结果组合为一个数据集。
2.对组合得到的数据做随机混洗,然后从中随机抽取(有放回)一个规模与A组相同的重抽样样本。
3.在余下的数据中,随机抽取(无放回)一个规模与B组相同的重抽样样本。
4.如果还有C组、D组甚至更多的组,执行同样操作。
5.无论对原始样本计算的是哪一种统计量或估计量(例如,组比例差异),现在对重抽样进行重新计算,并记录结果。这构成了一次置换迭代。
6.重复上述步骤,生成检验统计量的置换分布。

现在我们回头查看所观测到的组间差异,并与置换差异进行对比。如果观测到的差异位于置换差异内,那么置换检验的结果并不能证实任何事情,因为观测到的差异落在偶然可能产生的差异的范围内。但是,如果观测到的差异大部分落在置换分布之外,那么我们就可以得出”与偶然性无关”这一结论。如果使用专业术语描述,我们称差异是统计显著的。

代理变量
代理变量是一种可以代表我们所关注的真正变量的变量。真正关注的变量可能不可用,也可能度量的成本太高或耗时太长。最好代理变量中至少有一点关于真正变量的数据,这样可以评估真正变量与代理变量间的关联程度。

3.2 穷尽置换检验和自助置换检验

置换检验除了使用前面介绍的随机混洗过程之外,还有两种重要变体:1.穷尽置换检验。2.自助置换检验。

穷尽置换检验并不是随机混洗并分组数据,而是尝试所有可能的分组。穷尽置换检验只适用于规模较小的样本。如果做大量的重复混洗,那么随机置换检验的结果会近似于穷尽置换检验的结果,并在极限上逼近。穷尽置换检验有时也被称为准确检验,因为其统计学属性确保了零模型不会被检验为比α \alpha α值水平更显著。

自助置换检验是在置换检验第二步和第三步的抽取中,进行有放回抽样,而非无放回抽样。这样,重抽样过程不仅建模了随机分配对象给处理的过程,而且建模了从总体中随机抽取对象的过程。这两个都是统计学过程,但是它们之间的差别过于复杂,因而不被数据科学实践所关注。

在探索随机变异性中,置换检验是一种十分有用的启发式过程。它很容易编码,也很容易理解和解释。针对统计学中那些基于公式的形式主义和”假决定论”,置换检验提供了切实可行的绕行方法。
不同于依赖于统计学公式的方法,重抽样的一个优点在于给出了一种更加近乎于”万能”的推断方法。它所适用的数据可以是数值,也可以是二元的;样本规模可以相同,也可以不同;并且无须假设数据符合正态分布。

4.统计显著性和 p p p 值

统计显著性,用于衡量一个实验(也可以是对已有数据的研究)所生成的结果是否会比随机情况下可能给出的结果更极端。如果生成的结果超出了随机变异的范围,则我们称它是统计显著的。(统计显著性检验主要针对的是小规模样本中的抽样变异性。)

4.1 p p p 值

在衡量统计显著性时,人们经常使用p p p值,它表示随机模型生成的结果比观测结果更极端的频数。在估计置换检验的p p p值时,我们可以采用置换检验中生成大于等于观测差异值的检验次数所占的比例。如若p p p值为0.301,则表示随机性给出的差异在约30%的情况下大于或等于观测差异。

p值的意义
近年来,对p p p值的使用一直存在着相当大的争议。其根本问题在于,我们希望p p p值能包含更多的意义,并且希望p p p值能够表达: 结果由随机所导致的概率。而且我们希望该值越低越好,这样就可以得出某一假设得到证明的结论。这也是不少期刊编辑对p p p值的解释。但p p p值实际所表达的是: 给定一个随机模型,模型所给出的结果与观测结果同样极端的概率。这两者之间的差异并不明显,但的确存在。显著的p p p值并非如看上去那样,它并不能引导我们沿着一条似乎正确的”证明”道路走下去,如果我们理解了p p p值的真正含义,那么就此得出”统计显著”结论的逻辑基础是不太稳固的。
关于p p p值的使用:(1)p p p值可以表示数据与指定统计模型间的不兼容程度。(2)p p p值并不能测量所研究的假设为真的概率,也不测量仅通过随机性生成数据的概率。(3)不应仅根据p p p值是否超过了给定的阈值,就得出一个科学结论,或做出一个商业或政策决定。(4)正确的推断需要具有全面的的报告和完全的透明度。(5)p p p值(或统计显著性)并不测量效果的规模,也不测量结果的重要性。(6)p p p值本身并不能提供一种对模型或假设的很好量度。
对p p p值意义的辩论是颇具学术性的。如果是数据科学家想知道一个看上去有意义并且有用的模型结果是否落在随机变异的范围内,p p p值是一种有用的指标。作为一种在实验中使用的决策工具,p p p值不应该被视为一种决定性的因素,而应被视为是另一种可以辅助决策的信息。例如,有时可以将p p p值作为一些统计学或机器学习模型的中间输入值,根据p p p值决定一个特征应该包含在模型中,还是应该从模型中排除。

4.2 α \alpha α 值

统计显著性水平,α \alpha α值,是指假设零假设为真,则拒绝零假设的概率。完全由研究人员的判断力去确定一个结果是否”不太寻常”因而是偶然的是令人困扰的。在统计学家来看,正确的做法是提前设定一个阈值,例如”超过随机(零假设)结果5%”。这样的阈值被称为α \alpha α值。α \alpha α值的常见取值是5%和1%。α \alpha α值的选取具有一定的随意性,该过程无法确保在x x x%的情况下做出正确的决策。原因在于我们要回答的概率问题并不是”随机发生的概率是多少”,而是”给定一个随机模型,出现极端结果的概率是多少”。这样我们需要对随机模型的适当性进行逆推,但是在判断过程中没有任何可依据的概率,这个问题一直困扰着统计学家。

第一类错误第二类错误
第一类错误:错误地将仅由随机性导致的效果判定为真。
第二类错误:错误地将实际为真的效果判定为假(即由随机性导致的)。
实际上,第二类错误并不是一种错误,它是由于判断样本的规模过小,而无法检测到效果。如果p p p值不足以表明统计显著性(例如,超过5%),我们应称其为”效果未验证”,增大样本的规模,可能会生成较小的p p p值。
显著性检验(即 假设检验)的基本功能就是防止我们被随机性愚弄。因此,我们通常可以通过构造显著性检验去最小化第一类错误。

5.t检验

显著性检验具有多种类型,具体取决于数据集是计数数据还是测量数据、所具有的样本数量以及测量的具体内容。 t检验是其中一种常用的检验。t分布用于估计单个样本均值的分布情况。

t检验,主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。 t检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。它与f检验、卡方检验并列。t检验可分为单总体检验和双总体检验,以及配对样本检验。

所有的显著性检验都要求指定一个 检验统计量去测量所关注的效果,并确定观测到的效果是否落在随机变异的范围内。在重抽样检验中,数据的规模并不是十分重要。我们从数据本身创建参考(零假设)分布,并据此使用检验统计量。因为在一开始无法做到对数据随机混洗数千次,以用于重抽样检验。t检验可以很好地近似置换(随机混洗)分布。在使用t分布时,为了排除规模因素的影响,必须对检验统计量做归一化处理。我们可以使用重抽样,构造出一个能够反映观测数据和要检验的假设解决方案,而无须关心数据是数值型的还是二元的,1样本的规模是否平衡,以及样本方差等因素。

其他的检验方法在此不做介绍,这些方法都是将统计量做归一化处理后与标准的样本分布进行类比从而实现参数的检验。

6.多重检验

我们从足够多的视角去观察数据,并提出足够多的问题,几乎总是可以发现具有统计显著性的效果。

例如,给定随机生成的20个预测变量和一个结果变量,如果进行一组20次α \alpha α=0.05水平的显著性检验,那么很可能至少有一个预测因子会(错误地)显示为统计显著的。这被称为第一类错误,在计算第一类错误的概率时,可以首先计算在0.05水平上所有预测因子将被正确检验为非统计显著的概率。

上面介绍的问题涉及数据挖掘中的过拟合问题,即”模型拟合了噪声”。如果我们添加的变量越多,或者运行的模型越多,那么偶然出现”统计显著性”的概率就会越大。在有监督学习任务中,会给出一个验证集,从而降低过拟合的风险。

也就是说,对于这种对显著性进行多重检验的情况,我们需要使用一种矫正过程来保证结果确实是显著的而非是随机性导致的(矫正第一类错误)。通常在矫正过程中设置更严格的统计显著性界限,也就是划分α \alpha α值,使用更小的α \alpha α值。

总结来说,”多重性”有时仅仅是增加了随机性对某个结果得出显著性结论的风险,更多次的研究并非会带来更好的结果。因此,我们在预测建模时,通常使用交叉验证和验证集降低这种风险。

7.自由度

举一个简单的例子,如果我们知道含有10个值的样本的均值和其中九个值,那么就能确定最后一个值,该样本的自由度就为9。

自由度通常出现在传统统计学的无偏估计和检验中,对于数据科学而言,自由度似乎并没有那么重要,只有在进行回归中使用因子变化量时才与自由度有关联。

这种情况为:如果在回归算法中使用了完全冗余的预测变量,那么算法就会产生阻塞。例如,一个星期有7天,如果问题是具体是星期几,那么自由度是6,我们一旦在回归中包含了星期一至星期六,也就意味着包含了星期天。而由于 多重共线性问题,这将导致回归失败。

多重共线性:是指线性回归模型中的解释变量之间由于存在高度相关关系或精确相关关系而使模型估计失真或难以估计准确。

8.方差分析

8.1 方差分析概述

方差分析是一种检验多个组之间统计显著性差异的统计学方法。

在方差分析中,我们认为观测变量值的变动会受控制变量和随机变量两方面的影响。而根据控制变量的个数,将方差分析分为单因素方差分析和多因素方差分析。在方差分析中,将观测变量总的偏差平方和分解为组间离偏差平方和和组内偏差平方和两部分。

单因素方差分析通过比较观测变量总偏差平方和各部分所占的比例,从而推断控制变量是否给观测变量带来了显著性的影响(是否由随机性导致)。而多因素方差分析不仅能够分析多个因素对观测变量的独立影响,更能够分析多个控制因素的交互作用能否对观测变量的分布产生显著影响,进而最终找到利于观测变量的最优组合。

协方差分析
协方差分析将那些人为很难控制的控制因素作为 协变量,并在排除协变量对观测变量影响的条件下,分析控制变量(可控)对观测变量的作用,从而更加准确地对控制因素进行评价。即在分析观测变量变差时,考虑了协变量的影响,人为观测变量的变动受四个方面的影响:即控制变量的独立作用、控制变量的交互作用、协变量的作用和随机因素的作用,并在扣除协变量的影响后,再分析控制变量的影响。
协变量:在实验的设计中,协变量是一个独立变量(解释变量),不为实验者所操纵,但仍影响实验结果。

8.2 F统计量

若总体X ∼ N ( 0 , 1 ) X∼N(0,1)X ∼N (0 ,1 ),(X 1 X_1 X 1 ​,X 2 X_2 X 2 ​,…,X m X_m X m ​)与(Y 1 Y_1 Y 1 ​,Y 2 Y_2 Y 2 ​,…,Y n Y_n Y n ​)是来自X的两个独立样本,设统计量
F = Σ i = 1 m X i 2 / m Σ i = 1 n Y i 2 / n F=\frac{\Sigma_{i=1}^{m}X_i^2/m}{\Sigma_{i=1}^{n}Y_i^2/n}F =Σi =1 n ​Y i 2 ​/n Σi =1 m ​X i 2 ​/m ​
则称统计量 _F_服从自由度m和n的 _F_分布,记为F ∼ F ( m , n ) F∼F(m,n)F ∼F (m ,n )

在比较两组的均值时,我们可以使用t检验替代置换检验。类似地,对于方差分析,存在一种基于 _F_统计量的统计检验。 _F_统计量基于各组均值间的方差与由于残差所导致的方差间的比率。在此不做过多介绍,总的来讲, _F_统计量是处理的平方和除以误差的平方和。 _F_值仅取决于 _F_统计量,并且参考标准 _F_分布,以确定处理均值间的差异是否会大于随机变异的预期差异。

9.卡方检验

针对 分类数据计数数据),卡方检验用于检验数据与预期分布的拟合程度。卡方检验要求我们统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。通常在实践中,卡方统计量常与r × c r×c r ×c列联表一起使用,以评估变量间独立性的零假设是否合理。

卡方统计量等于皮尔逊残差的平方和,其计算公式为:
χ = Σ i r Σ j c R p 2 \chi=\Sigma_{i}^{r}\Sigma_{j}^{c}R_p^2 χ=Σi r ​Σj c ​R p 2 ​
其中,皮尔逊残差用R p R_p R p ​表示,其计算公式为:
R p = O b − E x E x R_p=\frac{Ob-Ex}{Ex}R p ​=E x O b −E x ​
“Ob”表示实际观测到的情况,”Ex”表示采用假设情况下的期望值。

一般检验步骤为:
(1)构造矩形数据,并进行随机混洗,抽出样本组
(2)计算各组混洗计数和预期计数间的平方差,并将它们相加。
(3)重复上述操作多次
(4)计算重抽样偏差的平方和超过观测值的频数,就是p值

卡方统计量的分布可以由卡方分布近似得到,合适的标准卡方分布取决于自由度。其自由度为( r − 1 ) × ( c − 1 ) (r-1)×(c-1)(r −1 )×(c −1 )。观测统计量在卡方分布中的位置越远,p值越小。并且卡方计算所给出的p值略小于重抽样的p值,这是因为卡方分布只是对统计量实际分布的一种近似。

费舍尔精确检验
在计数非常低的情况下(少于五个),重抽样过程本身就能给出更精确的p值,使用所有可能出现的重排情况及其频数确定观测结果的极端程度被称为 费舍尔精确检验

10.多臂老虎机算法

多臂老虎机Multi Armed Bandit)算法是强化学习方法中的一种情况,同样我们也可以将它看作是一种检验方法。传统的A/B测试基于随机抽样过程,会出现过度使用非最优处理的问题,而在MAB过程中,我们可以不断加入在实验过程中学习到的信息,从而减少非最优处理的次数,它解决了如何将抽样概率从非最优处理转移到最优处理的问题。

我们从强化学习框架的角度去理解多臂老虎机(MAB),将选择做出何种处理的我们作为智能体(agent),老虎机与他的多个机臂(选择不同处理)作为交互环境(environment),将每次拉动一个机臂作为一个动作(action),而收获的利益就是回报值(反馈值,reward),我们的目的就是在有限的动作中选出最优处理并收获最大利益。

下面我们给出一种算法来实现选择最优处理的过程(ε − \varepsilon-ε−贪心算法):
(1)确定一个较小的数ε \varepsilon ε。
(2)生成一个介于0和1之间的随机数。
(3)如果随机数落在0到ε \varepsilon ε之间,则随机选择一个动作,也可以说随机选择一个机臂进行摇动(进行探索的概率为ε \varepsilon ε)
(4)如果随机数大于或等于ε \varepsilon ε,则选择平均回报最高的动作(守成的概率为1 − ε 1-\varepsilon 1 −ε)

这是非常简单的一种强化学习方法,通过展示这样的例子我们就可以看到,MAB可以有效地应对三种以上的处理,并趋向于最佳选择的方向。在此不做更多复杂的介绍,对此希望深入研究的读者可参考其他强化学习或MAB的博文。

效果规模和检验效能
在统计检验中,期望能检测到的效果的最小规模
检验效能,是指在一定的样品特性下,检测到指定效果规模的概率。

后记

到此对统计实验的介绍就全部结束了,这篇博文主要是记录了《面向数据科学家的实用统计学》中的内容和学习心得,并与传统的数理统计知识进行了对比,笔者还会后续的其他专栏中介绍传统数理统计方面的实验设计,在这一专栏后续,将介绍回归、分类、统计机器学习和无监督学习的内容。希望对大家有所帮助和启发。

Original: https://blog.csdn.net/weixin_51617547/article/details/120293732
Author: 初飞墨
Title: 数据科学学习之统计实验的设计、检验与分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/696348/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球