机器学习2:朴素贝叶斯分类器Naïve Bayes Classifier(基于R language&Python)

2023-11-11

  朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法(朴素贝叶斯法与贝叶斯估计是不同的概念)。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对个给定的输入 x x x,利用贝叶斯定理求出后验概率最大的输出 y y y。朴素贝叶斯方法实现简单,学习与预测的效率都很高,是一种常用的方法1

  假如对于机器学习是用来干什么的也不是很清楚的话,可以先阅读一下周志华老师的西瓜书(清华大学出版社)或者李航老师的统计学习方法(清华大学出版社)。可以粗糙地理解为,机器学习是通过一些已知结果的样本来训练一个训练器,再将这个训练器运用到未知结果的样本上,用以推测其结果。我们在机器学习中通常要做的就是预测问题、参数优化问题和模型比较问题。

还有阿里云大学上的免费公开课:https://edu.aliyun.com/course/838?spm=5176.13345299.1392555.36.458ef153vkLC1h

朴素贝叶斯分类器

基本原理方法

模型目标

  设输入空间(又称样本空间、属性空间) X ⊆ R n \mathcal{X} \subseteq \mathbb{R}^n XRn n n n 维向量的集合,输出空间为类别标记的集合 Y = { C 1 , C 2 , ⋯   , C K } \mathcal{Y}=\{C_1,C_2,\cdots,C_K\} Y={C1,C2,,CK}。输入为特征向量 x ∈ X x\in \mathcal{X} xX,输出为类标记 y ∈ Y y\in \mathcal{Y} yY X X X 是定义在输入空间 X \mathcal{X} X 上的随机变量, Y Y Y 是定义在输出空间 Y \mathcal{Y} Y 上的随机变量。

  首先,我们需要确定一个损失函数,将最小化该损失函数的期望值(即,最小化期望风险函数)作为建模目标:期望风险越小,说明模型预测结果和真实结果越相近。不妨考虑 0-1 损失函数作为损失函数的例子:

L ( Y , f ( X ) ) = { 0 , f ( X ) = Y , 1 , f ( X ) ≠ Y . L(Y,f(X))= \begin{cases} 0, & f(X)= Y, \\ 1, & f(X) \neq Y. \end{cases} L(Y,f(X))={0,1,f(X)=Y,f(X)=Y.

这里 f ( X ) f(X) f(X) 为预测值, Y Y Y为真实类别值。这个损失函数意味着,当样本的模型预测结果和真实类别一致时,损失函数值为0;样本的模型预测结果和真实类别不一致时,损失函数值为1。

  其次,期望风险/平均损失(Expected Prediction Error,EPE) 可以写作:

E [ L ( Y , f ( X ) ) ] E[L(Y,f(X))] E[L(Y,f(X))]

其中,

L ( Y , f ( X ) ) = { 0 , f ( X ) = Y , 1 , f ( X ) ≠ Y . L(Y,f(X))= \begin{cases} 0, & f(X)= Y, \\ 1, & f(X) \neq Y. \end{cases} L(Y,f(X))={0,1,f(X)=Y,f(X)=Y.

  根据重期望公式,EPE可以分解为:

E [ L ( Y , f ( X ) ) ] = E X [ E Y ∣ X [ L ( Y , f ( X ) ) ] ] E[L(Y,f(X))]=E_X[E_{Y|X}[L(Y,f(X))]] E[L(Y,f(X))]=EX[EYX[L(Y,f(X))]]

  最后,我们寻找的朴素贝叶斯训练器 f ( ⋅ ) f(\cdot) f() 要能够最小化EPE。为了最小化 EPE,我们找到了一个它的充分条件:在 X = x X=x X=x 给定情况下,让 E Y ∣ X = x [ L ( Y , f ( X ) ) ] E_{Y|X=x}[L(Y,f(X))] EYX=x[L(Y,f(X))] 都达到最小。能达到这个条件,就足以达到最小化 EPE 的目的。该充分条件可以表达为:

a r g m i n   E Y ∣ X = x [ L ( Y , f ( X ) ) ] =   a r g m i n   0 ⋅ P ( L ( Y , f ( X ) ) = 0 ∣ X = x ) + 1 ⋅ P ( L ( Y , f ( X ) ) = 1 ∣ X = x ) =   a r g m i n   0 ⋅ P ( f ( X ) = Y ∣ X = x ) + 1 ⋅ P ( f ( X ) ≠ Y ∣ X = x ) =   a r g m i n   1 − P ( f ( X ) = Y ∣ X = x ) =   a r g m a x P ( f ( X ) = Y ∣ X = x ) \begin{aligned} & argmin\ E_{Y|X=x}[L(Y,f(X))] \\ =\ & argmin\ 0 \cdot P(L(Y,f(X))= 0|X=x) + 1 \cdot P(L(Y,f(X))= 1|X=x) \\ =\ & argmin\ 0 \cdot P(f(X)= Y|X=x) + 1 \cdot P(f(X) \neq Y|X=x) \\ =\ & argmin\ 1-P(f(X) = Y|X=x) \\ =\ &argmax P(f(X) = Y|X=x) \end{aligned} = = = = argmin EYX=x[L(Y,f(X))]argmin 0P(L(Y,f(X))=0X=x)+1P(L(Y,f(X))=1X=x)argmin 0P(f(X)=YX=x)+1P(f(X)=YX=x)argmin 1P(f(X)=YX=x)argmaxP(f(X)=YX=x)

  因此,基于最小化EPE的最优贝叶斯训练器 f ( ⋅ ) f(\cdot) f() 要满足以下条件:

f ( x ) =   a r g m a x P ( f ( X ) = Y ∣ X = x ) =   a r g m a x k ∈ { 1 , 2 , ⋯   , K } P ( f ( X ) = C k ∣ X = x ) \begin{aligned} f(x) =\ &argmax P(f(X) = Y|X=x) \\ =\ &argmax_{k \in \{1,2,\cdots,K\}} P(f(X) = C_k|X=x) \end{aligned} f(x)= = argmaxP(f(X)=YX=x)argmaxk{1,2,,K}P(f(X)=CkX=x)

这是寻找最优训练器的后验概率最大化准则。根据这个准则,得到的训练器 f ( ⋅ ) f(\cdot) f() 对于输入 X = x X=x X=x 得到的训练结果分类为:使条件概率 P ( f ( X ) = C k ∣ X = x ) P(f(X) = C_k|X=x) P(f(X)=CkX=x) 取值最大的那个分类 C k C_k Ck。 比如 i , j ∈ { 1 , 2 , ⋯   , K } i,j \in \{1,2,\cdots,K\} i,j{1,2,,K},若

P ( f ( X ) = c i ∣ X = x ) > P ( f ( X ) = c j ∣ X = x ) P(f(X) = c_i|X=x) > P(f(X) = c_j|X=x) P(f(X)=ciX=x)>P(f(X)=cjX=x)

X = x X=x X=x 通过得到训练器 f ( ⋅ ) f(\cdot) f() 的训练结果分类为第 i i i 类。

贝叶斯错误 Bayes error

  贝叶斯分类器的错误率称为贝叶斯错误。理论上,贝叶斯分类器是基于“后验概率最大化准则”进行分类的最优分类器,因此,贝叶斯错误常用来作为比较其他分类器效果如何的基底

模型假设

  朴素贝叶斯分类器是一系列基于贝叶斯定理的简单概率分类器,输入空间需要满足假设:在特征(又称属性)之间具有很强的相互独立性,需注意这是一种条件独立性(下文会解释)。

概率模型 Probabilistic Model

  给定一个分类实例问题,用向量 X = ( x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) ) X=(x^{(1)},x^{(2)},\cdots,x^{(m)}) X=(x(1),x(2),,x(m)) 来表示 m m m 个属性/特征的输入。利用贝叶斯定理,条件概率 P ( f ( X ) = C k ∣ X = x ) P(f(X) = C_k|X=x) P(f(X)=CkX=x) 可以分解为:

P ( f ( X ) = C k ∣ X = x ) = P ( f ( X ) = C k ) p ( X = x ∣ f ( X ) = C k ) P ( X = x ) P(f(X) = C_k|X=x)=\frac{P(f(X) = C_k)p(X = x|f(X) = C_k)}{P(X = x)} P(f(X)=CkX=x)=P(X=x)P(f(X)=Ck)p(X=xf(X)=Ck)

简记为

p ( C k ∣ x ) = p ( C k ) p ( x ∣ C k ) p ( x ) = p ( C k , x ) p ( x ) p(C_k|x)=\frac{p(C_k)p(x|C_k)}{p(x)}=\frac{p(C_k,x)}{p(x)} p(Ckx)=p(x)p(Ck)p(xCk)=p(x)p(Ck,x)

其中的原理即

p o s t e r i o r ( 后 验 分 布 ) = p r i o r ( 先 验 分 布 ) × l i k e l i h o o d ( 可 能 性 ) e v i d e n c e posterior(后验分布)=\frac{prior(先验分布) \times likelihood(可能性)}{evidence} posterior=evidenceprior×likelihood

  实际上,我们仅需关注该分数的分子,因为分母“evidence”是给定 x x x 之后能够确定下来的常数。在贝叶斯定理中 p ( x ) = ∑ k = 1 K p ( c k ) p ( x ∣ c k ) p(x)=\sum_{k=1}^K p(c_k)p(x|c_k) p(x)=k=1Kp(ck)p(xck),即在不同类别 c k c_k ck 下,可能会出现属性/特征 x x x 的可能性,对于我们给定的属性/特征 x x x p ( x ) p(x) p(x)也是一定的。

  因此,在比较 p ( C i ∣ X = x ) p(C_i|X=x) p(CiX=x) p ( C j ∣ X = x ) p(C_j|X=x) p(CjX=x) 大小时,若“去除相同的分母 p ( x ) p(x) p(x)”直接比较 p ( C i , x ) p(C_i,x) p(Ci,x) p ( C j , x ) p(C_j,x) p(Cj,x) 大小,结果也是一样的。

  我们来考虑 p ( C k , X ) p(C_k,X) p(Ck,X) 的估计,根据条件概率乘法公式的推广,可得:

p ( C k , X ) =   p ( C k ) p ( x ( 1 ) , x ( 2 ) , ⋯   , x ( m ) ∣ C k ) =   p ( C k ) p ( x ( 1 ) ∣ C k ) p ( x ( 2 ) ∣ C k , x ( 1 ) ) ⋯ p ( x ( m ) ∣ C k , x ( 1 ) , x ( 2 ) , ⋯   , x ( m − 1 ) ) \begin{aligned} p(C_k,X)=&\ p(C_k)p(x^{(1)},x^{(2)},\cdots,x^{(m)}|C_k) \\ =&\ p(C_k)p(x^{(1)}|C_k)p(x^{(2)}|C_k,x^{(1)})\cdots p(x^{(m)}|C_k,x^{(1)},x^{(2)},\cdots,x^{(m-1)}) \end{aligned} p(Ck,X)== p(Ck)p(x(1),x(2),,x(m)Ck) p(Ck)p(x(1)Ck)p(x(2)Ck,x(1))p(x(m)Ck,x(1),x(2),,x(m1))

  由“朴素贝叶斯”的不同属性/特征的条件独立性假设可知,给定类别 C k C_k Ck,假设每个特征 x i x_i xi 条件独立于每个其他特征 x j x_j xj 。这意味着:

p ( x ( 2 ) ∣ C k , x ( 1 ) ) =   p ( x ( 2 ) ∣ C k ) ⋯ p ( x ( m ) ∣ C k , x ( 1 ) , x ( 2 ) , ⋯   , x ( m − 1 ) ) =   p ( x ( m ) ∣ C k ) \begin{aligned} p(x^{(2)}|C_k,x^{(1)})=&\ p(x^{(2)}|C_k) \\ \cdots \\ p(x^{(m)}|C_k,x^{(1)},x^{(2)},\cdots,x^{(m-1)}) =&\ p(x^{(m)}|C_k) \end{aligned} p(x(2)Ck,x(1))=p(x(m)Ck,x(1),x(2),,x(m1))= p(x(2)Ck) p(x(m)Ck)

  关于朴素贝叶斯的独立性,我们用一个例子来解释:如果水果是红色,圆形且直径约10厘米,则可以认为是苹果。朴素贝叶斯分类器的“独立性”便认为无论颜色、形状和直径这三个特征之间是否存在任何相关性,每一个特征都会独立地影响这种水果是否被归为苹果的可能性。

  因此,联合模型可以表示为

p ( C k ∣ x ) = p ( C k , x ) e v i d e n c e ∝ p ( C k , x ) =   p ( C k ) ∏ i = 1 m p ( x ( i ) ∣ C k ) p(C_k|x) =\frac{p(C_k,x)}{evidence} \propto p(C_k,x)=\ p(C_k)\prod_{i=1}^m p(x^{(i)}|C_k) p(Ckx)=evidencep(Ck,x)p(Ck,x)= p(Ck)i=1mp(x(i)Ck)

  那么朴素贝叶斯分类器就是为 y ^ = C k \hat{y}=C_k y^=Ck 分配类标签 k k k 的函数,如下所示:

f ( x ) = y ^ = a r g m a x k ∈ { 1 , 2 , ⋯   , K } p ( C k ) ∏ i = 1 m p ( x ( i ) ∣ C k ) f(x) = \hat{y}=argmax_{k\in\{1,2,\cdots,K\}} p(C_k)\prod_{i=1}^m p(x^{(i)}|C_k) f(x)=y^=argmaxk{1,2,,K}p(Ck)i=1mp(x(i)Ck)

事件模型 Event Model

   p ( x ( i ) ∣ C k ) p(x^{(i)}|C_k) p(x(i)Ck) 被称为事件模型。

连续事件模型
高斯朴素贝叶斯 Gaussian Naïve Bayes

  高斯朴素贝叶斯训练器的事件模型为:

p ( x = v ∣ c ) = 1 2 π σ c 2 e − ( v − μ c ) 2 2 σ c 2 p(x=v|c)=\frac{1}{\sqrt{2\pi \sigma_c^2}} e^{-\frac{(v-\mu_c)^2}{2 \sigma_c^2}} p(x=vc)=2πσc2 1e2σc2(vμc)2

其中不同类别 c c c σ c \sigma_c σc μ c \mu_c μc 会改变。

离散事件模型
贝努利贝叶斯 Bernoulli Naïve Bayes

  贝努利朴素贝叶斯训练器的事件模型为:
p ( x ( j ) = l ∣ c k ) = p k j l ( 1 − p k j ) 1 − l , l = 0 , 1 p(x^{(j)}=l|c_k)=p_{kj}^l(1-p_{kj})^{1-l},l=0,1 p(x(j)=lck)=pkjl(1pkj)1l,l=0,1

其中 p k j p_{kj} pkj 为在类别 c k c_k ck 下事件 x ( j ) x^{(j)} x(j) 发生的概率。

多项式贝叶斯 Multinomial Naïve Bayes

  多项式朴素贝叶斯训练器的事件模型为:
p ( x ( j ) = l ∣ c k ) = p k j l p(x^{(j)}=l|c_k)=p_{kjl} p(x(j)=lck)=pkjl

多项式朴素贝叶斯分类器在对数空间中表示时变为线性分类器。

概率估计

特征/属性取值是离散值

  根据概率模型

f ( x ) = y ^ = a r g m a x k ∈ { 1 , 2 , ⋯   , K } p ( C k ) ∏ i = 1 m p ( x ( i ) ∣ C k ) f(x) = \hat{y}=argmax_{k\in\{1,2,\cdots,K\}} p(C_k)\prod_{i=1}^m p(x^{(i)}|C_k) f(x)=y^=argmaxk{1,2,,K}p(Ck)i=1mp(x(i)Ck)

可知我们需要估计两个量:一个是类别为 C k C_k Ck 的可能概率 P ^ ( Y = C k ) \hat{P}(Y=C_k) P^(Y=Ck) ;另一个是输入特征的第 j j j 个特征 X ( j ) = l X^{(j)}=l X(j)=l 的条件概率 P ^ ( X ( j ) = l ∣ C k ) \hat{P}(X^{(j)}=l|C_k) P^(X(j)=lCk)

极大似然估计 Maximum Likelihood Esitimation,MLE

  先验概率的极大似然估计为:

P ^ ( Y = C k ) = ∑ i = 1 n I ( y i = C k ) n \hat{P}(Y=C_k)=\frac{\sum_{i=1}^n I(y_i=C_k)}{n} P^(Y=Ck)=ni=1nI(yi=Ck)

其中 I ( ⋅ ) I(\cdot) I() 为示性函数。

  这个公式的含义是: ∑ i = 1 n I ( y i = C k ) \sum_{i=1}^n I(y_i=C_k) i=1nI(yi=Ck) 表示在训练集中,样本类别为 C K C_K CK 的样本数量, n n n 表示样本总数,因此, ∑ i = 1 n I ( y i = C k ) n \frac{\sum_{i=1}^n I(y_i=C_k)}{n} ni=1nI(yi=Ck) 表示已有训练集中样本的类别为 C K C_K CK 的比例。

  每个类别为 C k C_k Ck 的样本中,第 j j j 个特征为第 l l l 种取值的条件概率的极大似然估计为:

P ^ ( X ( j ) = l ∣ C k ) = ∑ i = 1 n I ( x i ( j ) = l , y i = C k ) ∑ i = 1 n I ( y i = C k ) \hat{P}(X^{(j)}=l|C_k)=\frac{\sum_{i=1}^n I(x_i^{(j)}=l,y_i=C_k)}{\sum_{i=1}^n I(y_i=C_k)} P^(X(j)=lCk)=i=1nI(yi=Ck)i=1nI(xi(j)=l,yi=Ck)

  这个公式的含义是: ∑ i = 1 n I ( x i ( j ) = l , y i = C k ) \sum_{i=1}^n I(x_i^{(j)}=l,y_i=C_k) i=1nI(xi(j)=l,yi=Ck) 表示在训练集中,样本类别为 C K C_K CK 同时第 j j j 个特征为第 l l l 种取值的样本数量, ∑ i = 1 n I ( y i = C k ) \sum_{i=1}^n I(y_i=C_k) i=1nI(yi=Ck) 表示在训练集中,因此, ∑ i = 1 n I ( x i ( j ) = l , y i = C k ) ∑ i = 1 n I ( y i = C k ) \frac{\sum_{i=1}^n I(x_i^{(j)}=l,y_i=C_k)}{\sum_{i=1}^n I(y_i=C_k)} i=1nI(yi=Ck)i=1nI(xi(j)=l,yi=Ck) 表示训练集样本类别为 C K C_K CK 的样本中,第 j j j 个特征为第 l l l 种取值的样本比例。

  但是,由极大似然估计定义的条件概率可能为0,那么带入到概率模型中去, ∏ i = 1 m p ( x ( i ) ∣ C k ) = 0 \prod_{i=1}^m p(x^{(i)}|C_k)=0 i=1mp(x(i)Ck)=0,此时,其他维度的条件概率无论是否为0,都将失去意义。为修正这个问题,我们将采用贝叶斯估计

贝叶斯估计 Baysian Esitimation

  条件概率的贝叶斯估计为:

P ^ ( X ( j ) = l ∣ C k ) = ∑ i = 1 n I ( x i ( j ) = l , y i = C k ) + λ ∑ i = 1 n I ( y i = C k ) + S j λ \hat{P}(X^{(j)}=l|C_k)=\frac{\sum_{i=1}^n I(x_i^{(j)}=l,y_i=C_k)+\lambda}{\sum_{i=1}^n I(y_i=C_k)+S_j \lambda} P^(X(j)=lCk)=i=1nI(yi=Ck)+Sjλi=1nI(xi(j)=l,yi=Ck)+λ

其中 λ > 0 \lambda > 0 λ>0,当 λ = 0 \lambda = 0 λ=0 这就是MLE,常取 λ = 1 \lambda =1 λ=1 ,这时称之为拉普拉斯光滑(Laplace smoothing)。这是一个小样本校正,称为伪计数,修正后不会将任何条件概率值正好为零。 S j S_j Sj 为第 j j j 个特征可能的取值总数,它的作用是保证第 j j j 个特征不同取值的条件概率之和为1(正规性),即

∑ l = 1 S j P ^ ( X ( j ) = l ∣ C k ) = 1. \sum_{l=1}^{S_j} \hat{P}(X^{(j)}=l|C_k) = 1. l=1SjP^(X(j)=lCk)=1.

  同样,先验概率的贝叶斯估计为:

P ^ ( Y = C k ) = ∑ i = 1 n I ( y i = C k ) + λ n + K λ \hat{P}(Y=C_k)=\frac{\sum_{i=1}^n I(y_i=C_k)+\lambda}{n+K\lambda} P^(Y=Ck)=n+Kλi=1nI(yi=Ck)+λ

其中 K K K 为总的类别数,它的作用也是保证先验概率的正规性。

特征/属性取值是连续值

  有两种方法来估计属性的类条件概率,一是把每一个连续的属性离散化,然后用相应的离散区间来替换连续属性值;二是采用前述的高斯函数来估计类条件密度函数,

p ( x = v ∣ c ) = 1 2 π σ c 2 e − ( v − μ c ) 2 2 σ c 2 p(x=v|c)=\frac{1}{\sqrt{2\pi \sigma_c^2}} e^{-\frac{(v-\mu_c)^2}{2 \sigma_c^2}} p(x=vc)=2πσc2 1e2σc2(vμc)2

其中不同类别 c c c σ c \sigma_c σc μ c \mu_c μc 会改变,这样生成的朴素贝叶斯模型就是高斯朴素贝叶斯模型。

朴素贝叶斯模型特点

目标 关键的几个问题 是否需要标准化 是否容许有缺失值
分类判别(因变量定性) 回归(因变量定量)
可以 不可以 (1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习2:朴素贝叶斯分类器Naïve Bayes Classifier(基于R language&Python) 的相关文章

随机推荐

  • googletest入门

    googletest入门 1 Windows上编译生成gtest lib静态库 1 1 首先在github上下载Googletest1 8 0版本 https github com google googletest releases ta
  • CentOS7 xfs分区挂载、取消挂载新加硬盘(大于2TB)操作说明

    root xdmail s fdisk l 查看硬盘及分区表信息 磁盘 dev sdb 18000 0 GB 17999997173760 字节 35156244480 个扇区 Units 扇区 of 1 512 512 bytes 扇区大
  • 【C语言】三子棋游戏详解

    目录 一 三子棋的游戏规则 二 基本流程 三 实现步骤 3 1打印菜单 3 2 创建并初始化棋盘 3 3 打印棋盘 3 4 玩家落子 3 5 电脑落子 3 6 判断输赢 四 游戏演示 五 完整代码 一 三子棋的游戏规则 三子棋也就是经常玩的
  • 天猫精灵-土味情话

    1 你猜我想喝什么 不知道啊 我想呵护你 2 你为什么要害我呀 害你什么了 害我喜欢你呀 3
  • qt把ui文件加入到类中

    有一个ui界面 需要建立 cpp和 h文件 ui的名字是Ui Form 代码如下 h文件 pragma once include ui add1 h class Form1 public QWidget Q OBJECT public Fo
  • 以法律的名义捍卫自由软件的权益之二 —— 软件自由法律中心(SFLC)的来龙去脉...

    更多精彩推荐 请关注开源之道 Thu Apr 24 2020 7347 Words 大约需要阅读 2 分钟 作者 开源之道 在介绍完成以法律的名义捍卫自由软件的权益之一 软件自由保护组织 SFC 的来龙去脉 笔者觉得有点不足的地方 尽管基本
  • 使用docker和docker-compose搭建Vulhub漏洞测试靶场

    使用docker和docker compose搭建Vulhub漏洞测试靶场 1 安装Docker和docker compose docker安装步骤 docker compose安装步骤 2 下载vulhub 安装完成docker和dock
  • Arduino的传感器使用教程1:PM2.5、温度和大气压传感器

    来自我的个人网站 http wangbch com ARDUINO SENSOR Arduino Temperature PM2 5 Atmos Arduino测定温度 PM2 5以及大气压 Temperature Measure and
  • 猜字母

    猜字母 把abcd s共19个字母组成的序列重复拼接106次 得到长度为2014的串 接下来删除第1个字母 即开头的字母a 以及第3个 第5个等所有奇数位置的字母 得到的新串再进行删除奇数位置字母的动作 如此下去 最后只剩下一个字母 请写出
  • mongoDB介绍与客户端认证权限

    mongoDB简介 Mongo 是 humongous 的中间部分 在英文里是 巨大无比 的意思 所以 MongoDB 可以翻译成 巨大无比的数据库 更优雅的叫法是 海量数据库 Mongodb是一款非关系型数据库 说到非关系型数据库 区别于
  • State Hook

    State Hook State Hook是一个在函数组件中使用的函数 useState 用于在函数组件中使用状态 useState 函数有一个参数 这个参数的值表示状态的默认值 函数的返回值是一个数组 该数组一定包含两项 第一项 当前状态
  • 华为OD机试 - 数据最节约的备份方法(Java )

    题目描述 有若干个文件 使用刻录光盘的方式进行备份 假设每张光盘的容量是500MB 求使用光盘最少的文件分布方式 所有文件的大小都是整数的MB 且不超过500MB 文件不能分割 分卷打包 输入描述 一组文件大小的数据 输出描述 使用光盘的数
  • github/gitlab中的fork操作

    在git中 fork是 分叉 复制 的意思 fork可以复制出一个仓库的新拷贝 包含了原有库中的所有提交记录 fork后这个代码库是完全独立的 可以在自己的库中做任何修改 也可以向原来的库提交合并请求 git中fork是什么意思 githu
  • transition将鼠标悬停在一个div元素上,逐步改变表格的宽度从100px到300px::

  • Lock 接口与 synchronized 关键字的区别

    拷贝别的博主总结的9点不同 1 JDK版本不同 synchronized关键字产生于JKD1 5之前 是低版本保证共享资源同步访问的主要技术 Lock接口产生于JDK1 5版本 位于著名的java util concurrent并发包中 是
  • 2018年WiFi、5G和蓝牙的发展以及与VR/AR的联系

    52VR大幅修正了原译文的翻译错误并作润饰编辑 这份文章中涵盖对无线技术们在2018年的表现之期待 包括可能实现的时间 以及它们将可能会怎样影响AR VR的版图 首先我们展望一下 不得不说的是2018年将是很多技术大转折的一年 这其中包括手
  • delphi listview动态添加图片_Qml组件化编程4-i18n动态国际化

    简介 本文是 Qml组件化编程 系列文章的第四篇 涛哥将教大家 如何在Qml中实现动态国际化 i18n 是 internationalization 国际化 的首尾字符加中间的 18 个字符 随着产品越做越大 要推向国际的时候 国际化这一步
  • C语言指针详解

    C语言指针详解 字符指针 1 如何定义 2 类型和指向的内容 3 代码例子 指针数组 1 如何定义 2 类型和内容 数组指针 1 如何定义 2 类型和指向类型 3 数组名vs 数组名 数组指针运用 数组参数 指针参数 一维数组传参 二维数组
  • 多级页表的优点和缺点

    多级页表是基于虚拟地址的分段来划分等级的 最低等级的页表上保存了最终的虚拟页号和物理页号的对应关系 例如拿32位的虚拟地址来说 如果页面的大小为4K 也就是12位 那么地址空间内将有20位 也就是1M的页表项目 每个项目对应一个虚拟页面 那
  • 机器学习2:朴素贝叶斯分类器Naïve Bayes Classifier(基于R language&Python)

    朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法 朴素贝叶斯法与贝叶斯估计是不同的概念 对于给定的训练数据集 首先基于特征条件独立假设学习输入 输出的联合概率分布 然后基于此模型 对个给定的输入 x x x 利用贝叶斯定理求出后验概率
Powered by Hwhale