仿真法,自助法

  • 仿真法/统计模拟方法(simulation based methods)
  • 自助法(Bootstrap method)
  • 三. 结语

在最后一章,小弟为大家介绍两个统计方法,说老实话,这两个方法可以说的是上古秘籍。统计的起源最早可追溯到1910年,那时候计算机还没出生呢,当中国还是清朝伪满洲的时候,有这么一群数学家利用纸和笔在条件很艰苦的情况下,想出了一些统计方法,这些方法就是本章要介绍的。我们不能忘记过去数学家们的智慧和对如今大数据时代的贡献。

仿真法/统计模拟方法(simulation based methods)

在18世纪,也就是中国乾隆时期,西方有这么个问题—蒲丰投针问题:
假设我们有一个以平行且等距木纹(黑线)铺成的地板(如图),

随意抛一支长度比木纹之间距离小的针(红线段),求针和其中一条木纹相交的概率。
经过蒲丰计算,如果条纹间距为a,针的长度为 l l l,那么针与其中平行线中任意一条相交的概率为 2 l π a \frac{2l}{\pi a} πa2l​.这里推导也是比较简单的(相关推导网上均有),但小弟在这还是写几笔:

设X表示针的中点到平行线的距离,X服从均匀分布(0, a 2 \frac{a}{2} 2a​),也就是(0<X< a 2 \frac{a}{2} 2a​)的概率是均匀的(数据分析模型第二章,连续均匀分布)
f ( X ) = { 1 a 2 − 0 = 2 a , 0 < X < a 2 0 , 其 他 f(X)=\begin{cases} \frac{1}{\frac{a}{2}-0}=\frac{2}{a}, & 0<X<\frac{a}{2} \\ 0, & 其他 \\ \end{cases} f(X)={2a​−01​=a2​,0,​0<X<2a​其他​

设Y表示针与平行线的夹角。Y服从均匀分布(0, π 2 \frac{\pi}{2} 2π​)
f ( Y ) = { 1 π 2 − 0 = 2 π , 0 < Y < π 2 0 , 其 他 f(Y)=\begin{cases} \frac{1}{\frac{\pi}{2}-0}=\frac{2}{\pi}, & 0<Y<\frac{\pi}{2} \\ 0, & 其他 \\ \end{cases} f(Y)={2π​−01​=π2​,0,​0<Y<2π​其他​

X和Y相互独立,那么X和Y的联合概率为:
f ( X , Y ) = { 2 a ∗ 2 π = 4 π a , 0 < X < a 2 , 0 < Y < π 2 0 , 其 他 f(X,Y)=\begin{cases} \frac{2}{a}*\frac{2}{\pi}=\frac{4}{\pi a}, & 0<X<\frac{a}{2},0<Y<\frac{\pi}{2} \\ 0, & 其他 \\ \end{cases} f(X,Y)={a2​∗π2​=πa4​,0,​0<X<2a​,0<Y<2π​其他​

当 X < l 2 s i n Y X<\frac{l}{2}sinY X<2l​sinY时,针与线相交。那么:
P { X < l 2 s i n Y } = ∫ 0 π 2 ∫ 0 1 2 s i n ( y ) f ( X , Y ) d x d y = ∫ 0 π 2 ∫ 0 1 2 s i n ( y ) 4 π a d x d y = 2 l π a P\{X<\frac{l}{2}sinY\}=\int_{0}^{\frac{\pi}{2}}\int_{0}^{\frac{1}{2}sin (y)}f(X,Y)dxdy=\int_{0}^{\frac{\pi}{2}}\int_{0}^{\frac{1}{2}sin(y)}\frac{4}{\pi a}dxdy=\frac{2l}{\pi a} P{X<2l​sinY}=∫02π​​∫021​sin(y)​f(X,Y)dxdy=∫02π​​∫021​sin(y)​πa4​dxdy=πa2l​
(根据数据分析模型第二章知识点和内容)
因为 X < l 2 s i n Y X<\frac{l}{2}sinY X<2l​sinY,所以 ∫ 0 1 2 s i n ( y ) \int_{0}^{\frac{1}{2}sin(y)} ∫021​sin(y)​,因为 0 < Y < π 2 0<Y<\frac{\pi}{2} 0<Y<2π​所以 ∫ 0 π 2 \int_{0}^{\frac{\pi}{2}} ∫02π​​. 先算 ∫ 0 1 2 s i n ( y ) ( ⋅ ) d x \int_{0}^{\frac{1}{2}sin(y)}(·)dx ∫021​sin(y)​(⋅)dx,后算 ∫ 0 π 2 ( ⋅ ) d y \int_{0}^{\frac{\pi}{2}}(·)dy ∫02π​​(⋅)dy。

有位叫蒙特卡洛(Monte Carlo)同学给了另外一个解决方法,那就是实验,硬干它。经过大量实验,记录多少次针与条纹相交的次数,从而得到那么针与其中平行线中任意一条相交的概率。我们也知道根据弱大数理论,如果实验多次,那么它估计的概率其实也是很准确的。

但当时人家蒙特卡洛同学本意不是为了估计针与条纹相交的概率,人家统计这个概率是为了估计 π \pi π值。利用实验得到的概率具体值和蒲丰利用微积分计算的概率 2 l π a \frac{2l}{\pi a} πa2l​,来反向估计出 π \pi π值。所以蒲丰投针问题也是用来计算 π \pi π值的。

以现在看,当时人家蒙特卡洛同学通过实验的方法来估计某一事件的概率,大家觉得这不就是小儿科么。但这就是早期统计的起源,也是最早的统计模拟方法。

有的时候,对于某件事,我们很难纯用数学来计算它的概率,举几个例子:

1.如果 X 1 , X 2 ~ N ( 0 , 1 ) X_1,X_2~N(0,1) X1​,X2​~N(0,1),那么 P ( ∣ X 1 ∣ + ∣ X 1 ∣ > 2 ) P(\sqrt{|X_1|}+\sqrt{|X_1|}>2) P(∣X1​∣ ​+∣X1​∣ ​>2)是多少?

2.如果 X 1 ~ P o i ( λ 1 ) , X 2 ~ P o i ( λ 2 ) X_1~Poi(\lambda_1),X_2~Poi(\lambda_2) X1​~Poi(λ1​),X2​~Poi(λ2​),那么 P ( X 1 − X 2 3 2 > 0 ) P(X_1-X_2^{\frac{3}{2}}>0) P(X1​−X223​​>0)是多少?

这些问题,要是靠纯数学计算推导是很难的,这个时候我们需要模拟这个事件,也就是做实验来计算它的概率。

实验概率/经验概率收敛(Convergence of Empirical Probabilities)
我们可以利用统计模拟方法来解决这些问题:

第一步:
反复m次,每一次从它的分布中产生 X 1 , X 2 . . , X p X_1,X_2..,X_p X1​,X2​..,Xp​个数据。

第二步:估计概率,利用实验
P ( X 1 , X 2 , . . , X p ∈ Z ) ≈ 1 m ∑ i = 1 m I ( X 1 , X 2 , . . , X p ∈ Z ) P(X_1,X_2,..,X_p∈Z)≈\frac{1}{m}\sum_{i=1}^{m}I(X_1,X_2,..,X_p∈Z) P(X1​,X2​,..,Xp​∈Z)≈m1​i=1∑m​I(X1​,X2​,..,Xp​∈Z)
I ( ⋅ ) I(·) I(⋅)为指标方程,即满足条件则为1,不满足条件则为0

举个例子:
X ~ N ( 0 , 1 ) X~N(0,1) X~N(0,1),计算 P { ∣ X ∣ > 1 } P\{\sqrt{|X|}>1\} P{∣X∣ ​>1}的概率

我们先利用纯数学来计算下:
设: Q = ∣ X ∣ Q=\sqrt{|X|} Q=∣X∣ ​,那么根据正态分布 N ( 0 , 1 ) N(0,1) N(0,1),得:
P ( Q = q ) = ( 2 3 π ) 1 2 q e x p ( − q 4 2 ) P(Q=q)=(\frac{2^3}{\pi})^{\frac{1}{2}}qexp(-\frac{q^4}{2}) P(Q=q)=(π23​)21​qexp(−2q4​)
那么:
P ( Q > 1 ) = ∫ 1 ∞ P ( q ) d q = 1 − 2 π ∫ 0 x e x p ( − t 2 ) d t = 0.3171 P(Q>1)=\int_{1}^{∞}P(q)dq=1-\frac{2}{\sqrt{\pi}}\int_{0}^{x}exp(-t^2)dt=0.3171 P(Q>1)=∫1∞​P(q)dq=1−π ​2​∫0x​exp(−t2)dt=0.3171

我们在通过实验概率/经验概率收敛的方法来算下:

#MATLAB或者R
X=rnorm(m,0,1)
mean(sqrt(abs(X))>1)
>m=100, 0.3300
>m=1000, 0.3310
>m=100000, 0.3176
>m=10^9, 0.317102

那么根据抽取 1 0 9 10^9 109次数据(每次实验抽一个数据),我们利用实验估计 P { ∣ X ∣ > 1 } P\{\sqrt{|X|}>1\} P{∣X∣ ​>1}的概率大约为0.317102.

我们可以发现其实通过实验来计算概率和纯数学计算的结果几乎一样,当我们的实验次数足够多的情况下。

当然了这个方法也有缺点:
那就是实验多少次才算足够,当我们计算出的概率结果比 1 m \frac{1}{m} m1​还要小,说明我们的计算已经被 1 m \frac{1}{m} m1​所影响了,那样计算出的概率结果是不准确的。因为如果当m足够大时,我们的 1 m \frac{1}{m} m1​会趋近于0.

但我们有解决这个缺点的办法:
我们会先叫实验的次数和每次实验抽取多少数据均为m,如果最后计算的概率结果小于 1 m \frac{1}{m} m1​,那就说明估计不准确,对于较小值的概率结果,我们则需要较大的实验次数,试验次数至少是 1 概 率 结 果 \frac{1}{概率结果} 概率结果1​的10倍。

伪随机数(Pseudo Random Numbers)
在做仿真法/统计模拟法时,我们会需要一些随机数,例如:根据分布随机生成数据,随机生成数字。
虽然计算机可以随机生成数字,但如果计算机是根据一些特定规则进而随机生成数字,这类随机数被称为伪随机数。伪随机数可以用计算机大量生成,是模拟研究中重要的一步,可以提高效率。

伪随机数最初是利用均匀分布的思想,但如今小弟就不知道了,因为创造伪随机数的方法多了,例如马特塞特旋转演算,线性同余法,乘同余法,后面的两种方法均是离散数学范畴但还是用到了均匀分布还是比较简单的。据小弟所知,大部分编程语言创造伪随机数还是利用均匀分布的思想。

小弟在此就分享下利用均匀分布来创建伪随机数,若有其他创造伪随机数的方法,那基本上是大同小异。

均匀分布随机变量产生其他分布的随机变量
首先我们要有个均匀分布 U ( 0 , 1 ) U(0,1) U(0,1),选取变量∈(0,1)。那么我们可以利用均匀分布变量∈(0,1)来得到其他分布的变量。

第一步:给定其他分布或者概率密度函数 Z = F ( Y ) Z=F(Y) Z=F(Y)

第二步:计算它的反函数 F − 1 ( Z ) = Y F^{-1}(Z)=Y F−1(Z)=Y,那么我们都知道这个 Z Z Z∈(0,1)。有的没有反函数就分段。

第三步:生成随机变量X从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)

第四步: 带入反函数 F − 1 ( X ) = Y F^{-1}(X)=Y F−1(X)=Y那么我们便利用均匀分布的变量 X X X,得到了其他分布的变量 Y Y Y了。

我们既然可以利用均匀分布随机变量得到其他分布的随机变量。那么,如何叫它随机呢?

随机化:
随机化主要是在于随机选取均匀分布的变量上。
f ( X 0 , X 1 , . . . , X n − 2 , X n − 1 ) = X n f(X_0,X_1,...,X_{n-2},X_{n-1})=X_n f(X0​,X1​,...,Xn−2​,Xn−1​)=Xn​
举个例子:
我们先初始给一个 X 0 X_0 X0​的值,该值被称为种子(seed)。 f ( ⋅ ) f(·) f(⋅)被称为转换方程。这里转换方程就很多了,各有各的优点,例如有的方法可以使随机数更均匀,有的影响随机数列的周期长短,有的需要参数间互为质数等等。
当我们有了 X 0 X_0 X0​,我们利用 f ( ⋅ ) f(·) f(⋅)得到 X 1 X_1 X1​,再利用 X 0 , X 1 X_0,X_1 X0​,X1​带入 f ( ⋅ ) f(·) f(⋅)中得到 X 2 X_2 X2​。但无论怎样我们的 X 0 , X 1 , . . . , X n − 2 , X n − 1 ∈ ( 0 , 1 ) X_0,X_1,...,X_{n-2},X_{n-1}∈(0,1) X0​,X1​,...,Xn−2​,Xn−1​∈(0,1).

这样我们的实现了在均匀分布上随机选取变量,从而随机产生其他分布上的变量。

伪随机数缺点:
好的种子比较关键。另外如果使用相同的种子,那么它们产生的伪随机数是相同的。

自助法(Bootstrap method)

自助法也经常被用在统计模拟方法中,自助法和统计模拟法均为大家族多次采样方法中的一员。我们在前两章其实已经了解了它们家族的另外一员,那就是CV(交叉验证)。

对于交叉验证,我们估计对于未来数据(测验数据)预测的差值。

对于自助法, 它是用来看看我们的估计是否稳定(例如标准差,置信区间等等)

在第三章中,我们经过多次取样,我们会得到样本分布,即如下图:

Population, 则是我们的总体数据,多次取样(samples),取相同数量的数据,再利用每次取样得来的样本数据估计总体参数。

举个例子:
我们目前有一组很感兴趣的样本,那么我们可以利用上图的自助法分布来估计这组由感兴趣样本所估计出的参数 θ ˉ \bar \theta θˉ偏差和方差

假如我们已经反复取样了M次,分别估计它们的参数,偏有了M个 θ ˉ ( i ) \bar \theta^{(i)} θˉ(i),那么我们可以估计出该感兴趣样本参数的 θ ˉ \bar \theta θˉ的偏差和方差

估计 θ ˉ \bar \theta θˉ的偏差:
b i a s = 1 M ∑ i = 1 M ( θ ˉ − θ ˉ ( i ) ) bias=\frac{1}{M}\sum_{i=1}^{M}(\bar \theta-\bar \theta^{(i)}) bias=M1​i=1∑M​(θˉ−θˉ(i))

估计 θ ˉ \bar \theta θˉ的方差:
V a r = ( 1 M − 1 ) ∑ i = 1 M ( θ ˉ ( i ) − θ ˉ ) 2 Var=(\frac{1}{M-1})\sum_{i=1}^{M}(\bar \theta^{(i)}-\bar \theta)^2 Var=(M−11​)i=1∑M​(θˉ(i)−θˉ)2

除此之外,经过多次取样后,我们自然也会得到样本的分布。就像我们之前第三章和第四章内容所讲,经过利用样本的估计参数后(就是一些数学转换),我们自然也会得到估计参数的分布。

举个例子:
我们抽一次样本得 y = ( y 1 , y 2 , . . , y n ) y=(y_1,y_2,..,y_n) y=(y1​,y2​,..,yn​),该样本有n个数据,并作为我们感兴趣的样本。

我们利用该感兴趣的样本来估计参数 θ ˉ \bar \theta θˉ

利用自助法逻辑:
1.抽取M次数样本,每个样本均也需要有n个数据
2.每个样本分别估计参数记作 θ ˉ ( i ) , i = 1 , 2 , 3.. , M \bar \theta^{(i)},i=1,2,3..,M θˉ(i),i=1,2,3..,M

那么我们便可以做很多事情了,估计我们兴趣样本的偏差,方差。当然了,因为我们有了 θ ˉ ( i ) , i = 1 , 2 , 3.. , M \bar \theta^{(i)},i=1,2,3..,M θˉ(i),i=1,2,3..,M的分布,我自然也可以计算这个分布的置信区间。

大家不要被小弟上述例子从而局限了想象力,自助法的本质就是多次取样。还记得第八章中的一幅图么,即如下:

我们不看绿线,就看图中橘色虚线和线段,即平均拟合模型和95%平均拟合模型。这里95%其实就是95% θ ˉ ( i ) , i = 1 , 2 , 3.. , M \bar \theta^{(i)},i=1,2,3..,M θˉ(i),i=1,2,3..,M的分布置信区间,然后把估计的参数依次带入到模型里去,然后在把你想预测的数据代入进去,这样你的预测就会有个范围即95%。至于橘色线段即平均拟合,则是算的预测值的均值罢了。

在第6章,我们也接触过简单线性回归对于预测的置信区间,还记得么 ( Y − β ˉ 0 − β ˉ 1 x 0 ) / [ n + 1 n + ( x 0 − x ˉ ) 2 ( ∑ i = 1 n x i 2 − n x ˉ 2 ) R S S n − 2 ] ~ t n − 2 ({Y-\bar\beta_0-\bar\beta_1 x_0})/{[\sqrt{\frac{n+1}{n}+\frac{(x_0-\bar x)^2}{(\sum_{i=1}^{n}x^2_i-n\bar x^2)}} \sqrt{\frac{RSS}{n-2}}}]~t_{n-2} (Y−βˉ​0​−βˉ​1​x0​)/[nn+1​+(∑i=1n​xi2​−nxˉ2)(x0​−xˉ)2​ ​n−2RSS​ ​]~tn−2​, x 0 x_0 x0​则是测试数据。对没错,有了分布我们便可以得到关于简单线性回归的预测95%置信区间。你可以用纯数学的方式来找到关于某个模型的分布,但现实很残酷,有些模型过于复杂,利用纯数学的方式我们是很难做的,旦旦一个简单线性回归的分布都如此复杂,就不要说比简单新型回归更复杂的模型了。还是以上图为例,该图其实是多项式分布模型,绿色线为真多项式分布,并且有5项,要想用数学找到该模型的分布是很困难的。所以才会有蒙特塔罗的思想,就是多做实验,多抽样,用简单粗暴的方式。

总之一句话,多做实验,多动手,多取样,再看分布,有时候你觉得能用数学推,到最后你会发现现实很残酷。

自助法的优点:
简单粗暴,很容易做,也很容易理解。
估计准确度会随着样本的增加而增加
自助法经常用在计算偏差,方差,预测差,置信区间。

自助法缺点:
算起来太慢了。
对于某些问题需要转换,例如拉索

排列检验(Permutation tests)
在最后,小弟介绍一个另一个统计方法,即排列检验,经常用在样本分布上面。其实大家早就知道了,它就是p值。

简单回顾下
H 0 : β = 0 , H 1 ≠ 0 H_0:\beta=0, H_1≠0 H0​:β=0,H1​​=0
计算p值,看是否拒绝原假设。

那么如何利用p值用在多次抽样上面呢?
我们用例子来解释:

我们要用排列检验计算p值,来看是否 β ˉ = 1.4310 \bar\beta=1.4310 βˉ​=1.4310

现在我们从这些数据(总体)里取样。取个m次,分别估计参数 β ˉ ( i ) \bar\beta^{(i)} βˉ​(i).
此时我们计算p值:
p ≈ 1 m ∑ i = 1 m I ( ∣ β ˉ ( i ) ∣ > ∣ β ˉ ∣ ) p≈\frac{1}{m}\sum_{i=1}^{m}I(|\bar\beta^{(i)}|>|\bar\beta|) p≈m1​i=1∑m​I(∣βˉ​(i)∣>∣βˉ​∣)
I ( ⋅ ) I(·) I(⋅)符合条件为1,不符合条件为0

我们来张图:

经过m=10000次的抽样,我们估计10000个 β ˉ ( i ) \bar\beta^{(i)} βˉ​(i)即我们的x轴.计算频率,则有了y轴。我们利用所有数据估计的 β ˉ \bar\beta βˉ​=1.4310.可以看到 P ( ∣ β ˉ ( i ) ∣ > ∣ β ˉ ∣ ) P(|\bar\beta^{(i)}|>|\bar\beta|) P(∣βˉ​(i)∣>∣βˉ​∣)即上图±1.4310的两个外端概率是很小的约为0.0013(p值太小)拒绝原假设。我们其实能够清楚看到,也侧面说明了, β ˉ ≠ 1.4310 \bar\beta≠1.4310 βˉ​​=1.4310。

排列检验与我们之间的假设检验区别在于,排列检验不需要基于原假设,但假设检验需要基于原假设去计算。

在排列检验里,其实它更注重的是多次取样后的数据分布。然后根据条件,计算最小概率即p值来进行观察原假设或者备择假设。

排列检验的优点:
对于非正态分布的模型计算p值更准确
好写代码,很好应用

排列检验的缺点
结果很容易受到采样的次数影响。
可能会运行很慢

三. 结语

有公式推导错误的或理论有谬误的,请大家指出,我好及时更正,感谢。

感谢大家来阅读小弟我分享的一些关于基础统计的知识。如果将来有时间,小弟会陆续分享更多知识,例如高等数据分析,机器学习,计算机视觉,神经网络,优化等几门课的知识分享。也希望小弟可以坚持分享下来吧。

数据分析模型 第十一章相关推荐

  1. 数据分析模型 第三章

    参数估计,偏差和评测估计 一. 参数估计 二. 偏差和评测估计 三. 结语 一. 参数估计 参数估计(parameter estimation). 正如第一章模型的介绍中所提到的,一般当我们手上有了一 ...

  2. 大数据笔试真题集锦---第十一章:Sqoop面试题

    第十一章目录 第十一章 Sqoop sqoop本质是一款使用MR进行数据迁移的工具. 目前业界普遍用1.4.6版本,该版本与CDH集成. hive对外的一个统一存储格式的接口,使用hcatalog对接 ...

  3. 第十一章 数据可视化 - 地图可视化

    目录 疫情地图的使用 疫情地图-国内疫情地图 疫情地图-省级疫情地图 疫情地图的使用 第一阶段-第十一章-01-数据可视化案例-地图-基础地图使用_哔哩哔哩_bilibili "" ...

  4. 《大数据分析原理与实践》——第2章 大数据分析模型

    第2章 大数据分析模型 大数据分析模型讨论的问题是从大数据中发现什么.尽管对大数据的分析方法林林总总,但面对一项具体应用,大数据分析非常依赖想象力.例如,对患者进行智能导诊,为患者选择合适的医院.合适 ...

  5. 【译】 WebSocket 协议第十一章——IANA 注意事项(IANA Considerations)

    概述 本文为 WebSocket 协议的第十一章,本文翻译的主要内容为 WebSocket 的 IANA 相关注意事项. IANA 注意事项(协议正文) 11.1 注册新 URI 协议 11.1.1 ...

  6. 开发日记-20190915 关键词 汇编语言王爽版 第十一章

    第十一章 标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下三种作用. (1)用来存储相关的指令的某些执行结果 (2)用来为CPU执行相关的指令提供 ...

  7. [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...

    第十一章 探索Shell 我们现在将注意力从API转向Windows Shell本身.从这一章往后,我们的目标主要集中在清晰和全面的揭示探测器的工作原理和Shell 命名空间的构成对象上,最后给出客户 ...

  8. 第十一章 机器学习系统设计-机器学习老师板书-斯坦福吴恩达教授

    第十一章 机器学习系统设计 11.1 确定执行的优先级:垃圾邮件分类例子 11.2 误差分析 11.3 不对称分类的误差评估 11.4 精准率和召回率的权衡 11.5 机器学习数据 11.1 确定执行 ...

  9. 《Deep Learning With Python second edition》英文版读书笔记:第十一章DL for text: NLP、Transformer、Seq2Seq

    文章目录 第十一章:Deep learning for text 11.1 Natural language processing: The bird's eye view 11.2 Preparin ...

最新文章

  1. 失败 安装scikit_scikit-learn0.22版本最新发布
  2. 树莓派 安装中文字体、中文输入法fcitx和googlepinyin输入法
  3. error: undefined reference to 'cv::_OutputArray::_OutputArray(std::__ndk1
  4. 实体类中存在List集合,怎么在xml文件中,对应
  5. SpringBoot集成Actuator健康指示器health
  6. python刚出来多少薪资-Python工资待遇的几个层级,你工作几年了?目前是哪个层级?...
  7. 使用ol,添加图书销售排行榜
  8. 华为od与中软外包哪个更好_记录下入职中软一个月(外包华为
  9. 程序员常用的刷题网站
  10. 零基础零起步,三周带你重塑《钢铁侠》之路
  11. 笔记本双系统安装Ubuntu 20.04.3 LTS没有WIFI的解决方法
  12. shineblink 紫外线测量
  13. JQuery实现表单验证(注册页面)
  14. ubuntu20.04安装cuda库
  15. HSV颜色空间和RGB颜色空间相互转换C语言实现
  16. Environment Variables
  17. 数据透视表(2)|计算字段、计算项
  18. 激光SLAM第三章作业去除运动畸变
  19. K8S---Helm
  20. 拟人退火算法解3SAT

热门文章

  1. 今天520情人节,你确定不学一下「情话设计模式」?
  2. 穹顶之下——大数据下生活
  3. 计算机项目管理缩写,项目管理英文缩写!!!
  4. php接口统计,EKL PHP 调取_search接口查询登录统计
  5. 基于android平台的语音机器人服务娱乐系统
  6. 微信小程序开发笔记1——使用npm脚本实现自动化切换环境配置
  7. 商家们为何在私域流量展开竞争?
  8. SDH原理--1.SDH概述
  9. Discuz!开发之替换系统IP库为纯真IP库的方法
  10. VTK:绘制圆锥体(附完整源码)