文章目录

  • 判别模型与生成模型
    • 判别模型
    • 生成模型
  • 先验概率、条件概率、后验概率
  • 朴素贝叶斯法建模
  • 后验概率P(Y=ck∣X=x)P(Y=c_k| X = x)P(Y=ck​∣X=x)最大化的解释
  • 朴素贝叶斯法的参数估计
    • 极大似然估计
    • 算法流程
  • 贝叶斯估计
  • 优缺点

判别模型与生成模型

机器学习或者统计学习的方法可以分为判别模型(非概率模型)和生成模型(概率模型)。

判别模型

常见的形式为 y = f(x) ,建立目标变量y和输入特征x之间的映射关系,并且多数情况下会形成决策边界,如下图所示。例如 y = wx + b。每当输入一个新样本的特征时,可以直接得到预测结果。以二分类为例子,wx + b 的结果是0~1之间的概率值,当概率值大于0.5,我们就得到y=1,反之,则y=0。

生成模型

常见的形式为P(y|x),建立出特征x与不同目标变量y之间的联合概率分布。也就是建立好属于不同y的特征x的分布模型,如下图所示。当需要对新的数据x预测时,则需要判断x属于各个y的概率,概率大的y则为预测结果。

引用知乎文章机器学习“判定模型”和“生成模型”有什么区别? 中 politer的回答来举个具体的例子:

判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。

细细品味上面的例子,判别式模型是根据一只羊的特征可以直接给出这只羊的概率(比如logistic regression,这概率大于0.5时则为正例,否则为反例),而生成式模型是要都试一试,最大的概率的那个就是最后结果~

如果你还了解过机器学习的其他算法,那么:

  1. 概率模型(生成模型)有:朴素贝叶斯、高斯混合模型、决策树、隐马尔可夫模型、条件随机场、概率潜在语义分析、潜在狄利克雷分配等。
  2. 非概率模型(判别模型)有:感知机、支持向量机、k近邻,k均值,Adaboost,神经网络等。

先验概率、条件概率、后验概率

先验概率:是基于以往的经验或对现有数据的分析所得到的概率,如硬币正面的概率p为1/2,这里的p=1/2就是先验概率。

条件概率:条件概率是知道原因来推测结果,即有因求果。就是给定某个事件X发生的前提条件下,另一个事件Y发生的概率,记为P(Y|X)。例如已知X:今天是双十一,那么Y:促销的概率可以记为P(促销|今天是双十一)。

后验概率:条件概率是知道结果来推测原因,即有果求因。表达形式与条件概率相似,例如P(X|Y),只不过含义变了。例如X:今天是双十一,Y:促销,则P(X|Y)表示已知现在商品在促销,那么今天是双十一的概率,即P(今天是双十一|促销)。

朴素贝叶斯法建模

假设输入空间X∈Rn\mathcal X \in R^nX∈Rn是n维的向量集合,输出空间Y={c1,c2...ck}\mathcal Y = \{c_1, c_2...c_k\}Y={c1​,c2​...ck​}为类别标记的集合。输入为特征向量x∈Xx \in \mathcal Xx∈X,输出为类别标记 y∈Yy \in \mathcal Yy∈Y。X 为X\mathcal XX 上的随机向量,Y为Y\mathcal YY 上的随机变量。P(X, Y) 是X,Y的联合概率分布,假设训练集T:
T={(x1,y1),(x2,y2),...,(xN,yN)}T = \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)}
是由P(X, Y)独立同分布产生。

朴素贝叶斯法实际上学到的是生成数据的机制,所以属于生成模型。朴素贝叶斯法对条件概率分布做了条件独立性假设(不同的特征相互独立且同分布),通过已知数据集学习联合概率分布P(X, Y)。具体的,需要学习:
P(Y=ck),k=1,2,...,K(1)P(Y=c_k), k=1,2,...,K \tag 1 P(Y=ck​),k=1,2,...,K(1)

P(X=x∣Y=ck)=P(X(1)=x(1),X(2)=x(2),…,X(n)=x(n)∣Y=ck)=∏j=1nP(X(j)=x(j)∣Y=ck)(2)\begin{aligned} P(X=x|Y=c_k)&=P(X^{(1)}=x^{(1)},X^{(2)}=x^{(2)},\dots,X^{(n)}=x^{(n)}|Y=c_k)\\ &=\prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k) \end{aligned} \tag 2 P(X=x∣Y=ck​)​=P(X(1)=x(1),X(2)=x(2),…,X(n)=x(n)∣Y=ck​)=j=1∏n​P(X(j)=x(j)∣Y=ck​)​(2)

公式的上角标表示第i个样本,其中(1)是各个类别的先验概率分布,(2)是条件概率分布。基于上面的两个式子,就可以计算得到联合概率分布P(X, Y)。

朴素贝叶斯法在分类时,对给定的输入x,通过学习到的模型计算后验概率分布P(Y=ck∣X=x)P(Y=c_k| X = x)P(Y=ck​∣X=x),然后将后验概率最大的类别作为x的输出。后验概率的计算公式由贝叶斯定理(全概率公式)可得:
P(Y=ck∣X=x)=P(Y=ck,X=x)p(X=x)=P(X=x∣Y=ck)P(Y=ck)∑k=1KP(X=x∣Y=ck)P(Y=ck)(3)\begin{aligned} P(Y=c_k| X = x) &= \frac{P(Y=c_k, X = x)}{p(X = x)} \\ &= \frac{P(X=x|Y=c_k) P(Y=c_k)}{\sum_{k=1}^KP(X=x|Y=c_k)P(Y=c_k)} \end{aligned} \tag 3 P(Y=ck​∣X=x)​=p(X=x)P(Y=ck​,X=x)​=∑k=1K​P(X=x∣Y=ck​)P(Y=ck​)P(X=x∣Y=ck​)P(Y=ck​)​​(3)
基于(3),朴素贝叶斯分类器可以表示为:
y=arg⁡max⁡ckP(Y=ck∣X=x)(4)y = \arg \max\limits_{c_k}P(Y=c_k| X = x) \tag 4 y=argck​max​P(Y=ck​∣X=x)(4)
由于(3)的分母是个固定值,故(4)可以简化为:
y=arg⁡max⁡ckP(X=x∣Y=ck)P(Y=ck)(5)y =\arg \max\limits_{c_k}P(X=x|Y=c_k) P(Y=c_k) \tag 5 y=argck​max​P(X=x∣Y=ck​)P(Y=ck​)(5)
将(2)代入(5)又可以得到:
y=arg⁡max⁡ckP(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)(6)y =\arg \max\limits_{c_k} P(Y=c_k)\prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k) \tag 6 y=argck​max​P(Y=ck​)j=1∏n​P(X(j)=x(j)∣Y=ck​)(6)

后验概率P(Y=ck∣X=x)P(Y=c_k| X = x)P(Y=ck​∣X=x)最大化的解释

朴素贝叶斯法将实例划分到概率最大的类别中,等价于期望风险最小化,所谓期望风险就是损失的期望值。假设我们选择0-1损失函数:
L(Y,f(x))={1,Y≠f(X)0,Y≠f(X)L(Y,f(x)) = \left\{ \begin{array}{lr} 1, Y\ne f(X) \\ 0, Y\ne f(X) \end{array} \right. L(Y,f(x))={1,Y​=f(X)0,Y​=f(X)​
损失值越小,模型越好。f(X)为决策函数,此时期望风险为:
Rexp(f)=E[L(Y,f(X))]R_{exp}(f) = E[L(Y, f(X))] Rexp​(f)=E[L(Y,f(X))]
对于某个向量X,可以用下面的公式求期望风险:
Rexp(f)=∑k=1K[L(ck,f(X))]P(ck∣X)R_{exp}(f) = \sum_{k=1}^K[L(c_k,f(X))]P(c_k|X) Rexp​(f)=k=1∑K​[L(ck​,f(X))]P(ck​∣X)
要得到某个y,使得上式最小化,则有:
f(x)=arg⁡min⁡y∈Y∑k=1KL(ck,y)P(ck∣X=x)=arg⁡min⁡y∈Y∑k=1KP(y≠ck∣X=x)=arg⁡min⁡y∈Y(1−P(y=ci∣X=x))=arg⁡max⁡y∈YP(y=ck∣X=x)\begin{aligned} f(x) &= \arg\min\limits_{y \in \mathcal Y} \sum_{k=1}^KL(c_k, y)P(c_k|X=x) \\ &= \arg\min\limits_{y \in \mathcal Y} \sum_{k=1}^KP(y \ne c_k|X=x) \\ &= \arg\min\limits_{y \in \mathcal Y} (1-P(y=c_i|X=x)) \\ &= \arg\max\limits_{y \in \mathcal Y}P(y=c_k|X=x) \end{aligned} f(x)​=argy∈Ymin​k=1∑K​L(ck​,y)P(ck​∣X=x)=argy∈Ymin​k=1∑K​P(y​=ck​∣X=x)=argy∈Ymin​(1−P(y=ci​∣X=x))=argy∈Ymax​P(y=ck​∣X=x)​
这样,想要期望风险最小化则需要后验概率最大化:
f(x)=arg⁡max⁡y∈YP(y=ck∣X=x)f(x) = \arg\max\limits_{y \in \mathcal Y}P(y=c_k|X=x) f(x)=argy∈Ymax​P(y=ck​∣X=x)
这就是朴素贝叶斯法采用的原理。

朴素贝叶斯法的参数估计

极大似然估计

在朴素贝叶斯法中,模型的学习就是要估计P(Y=ck)P(Y=c_k)P(Y=ck​)和P(X(j)=x(j)∣Y=ck)P(X^{(j)}=x^{(j)}|Y=c_k)P(X(j)=x(j)∣Y=ck​),可以用极大似然估计法估计相应的概率。

P(Y=ck)P(Y=c_k)P(Y=ck​)好理解,其实就是ckc_kck​的频率:
P(Y=ck)=∑i=1NI(yi=ck)N,k=1,2,...,KP(Y=c_k) = \frac{\sum_{i=1}^N I(y_i=c_k)}{N}, k=1,2,...,K \\ P(Y=ck​)=N∑i=1N​I(yi​=ck​)​,k=1,2,...,K
P(X(j)=x(j)∣Y=ck)P(X^{(j)}=x^{(j)}|Y=c_k)P(X(j)=x(j)∣Y=ck​) 就是要计算属于不同的ckc_kck​的样本中,不同特征的不同取值的概率。设第j个特征x(j)x^{(j)}x(j)的可能取值集合为{aj1,aj2,...,ajSj}\{a_{j1}, a_{j2},..., a_{jS_j}\}{aj1​,aj2​,...,ajSj​​},则极大似然估计为:
P(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K;P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k)}{\sum_{i=1}^N I(y_i = c_k)} \\ j=1,2,...,n; \quad l=1,2,...,S_j; \quad k=1,2,...,K; \quad P(X(j)=ajl​∣Y=ck​)=∑i=1N​I(yi​=ck​)∑i=1N​I(xi(j)​=ajl​,yi​=ck​)​j=1,2,...,n;l=1,2,...,Sj​;k=1,2,...,K;
其中ajla_{jl}ajl​表示第j个特征取第lll个值,III为指示函数,满足条件则取值为1,否则为0。

算法流程

(1)计算先验概率与条件概率:
P(Y=ck)=∑i=1NI(yi=ck)NP(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck)j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K;P(Y=c_k) = \frac{\sum_{i=1}^N I(y_i=c_k)}{N}\\ P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k)}{\sum_{i=1}^N I(y_i = c_k)} \\ j=1,2,...,n; \quad l=1,2,...,S_j; \quad k=1,2,...,K; \quad P(Y=ck​)=N∑i=1N​I(yi​=ck​)​P(X(j)=ajl​∣Y=ck​)=∑i=1N​I(yi​=ck​)∑i=1N​I(xi(j)​=ajl​,yi​=ck​)​j=1,2,...,n;l=1,2,...,Sj​;k=1,2,...,K;
(2)对于给定的实例x=(x(1),x(2),...x(n))Tx=(x^{(1)},x^{(2)},...x^{(n)})^Tx=(x(1),x(2),...x(n))T,计算:
P(Y=Ck)=∏j=1nP(X(j)=x(j)∣Y=ck)P(Y=C_k) = \prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k) P(Y=Ck​)=j=1∏n​P(X(j)=x(j)∣Y=ck​)
(3)确定实例x的类:
y=arg⁡max⁡ckP(Y=ck)∏j=1nP(X(j)=x(j)∣Y=ck)y =\arg \max\limits_{c_k} P(Y=c_k)\prod^n_{j=1}P(X^{(j)}=x^{(j)}|Y=c_k) y=argck​max​P(Y=ck​)j=1∏n​P(X(j)=x(j)∣Y=ck​)
举个例子,假设有数据集如下图所示,估计x=(2,S)Tx=(2,S)^Tx=(2,S)T的类别:

则利用朴素贝叶斯法求解过程如下:
P(Y=1)=9/15,P(Y=−1)=6/15P(X(1)=1∣Y=1)=2/9,P(X(1)=2∣Y=1)=3/9,P(X(1)=3∣Y=1)=4/9P(X(2)=S∣Y=1)=1/9,P(X(2)=M∣Y=1)=4/9,P(X(2)=L∣Y=1)=4/9P(X(1)=1∣Y=−1)=3/6,P(X(1)=2∣Y=−1)=2/6,P(X(1)=3∣Y=−1)=4/6P(X(2)=S∣Y=−1)=3/6,P(X(2)=M∣Y=−1)=2/6,P(X(2)=L∣Y=−1)=1/6P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=915⋅39⋅19=145P(Y=−1)P(X(1)=2∣Y=−1)P(X(2)=S∣Y=−1)=615⋅26⋅36=115\begin{aligned} & P(Y=1) = 9/15, P(Y=-1) = 6/15 \\ \\ & P(X^{(1)}=1|Y=1)=2/9, P(X^{(1)}=2|Y=1)=3/9, P(X^{(1)}=3|Y=1)=4/9 \\ & P(X^{(2)}=S|Y=1)=1/9, P(X^{(2)}=M|Y=1)=4/9, P(X^{(2)}=L|Y=1)=4/9 \\ & P(X^{(1)}=1|Y=-1)=3/6, P(X^{(1)}=2|Y=-1)=2/6, P(X^{(1)}=3|Y=-1)=4/6 \\ & P(X^{(2)}=S|Y=-1)=3/6, P(X^{(2)}=M|Y=-1)=2/6, P(X^{(2)}=L|Y=-1)=1/6 \\ \\ & P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1) = \frac{9}{15} \cdot\frac{3}{9} \cdot\frac{1}{9}=\frac{1}{45} \\ & P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1) = \frac{6}{15} \cdot\frac{2}{6} \cdot\frac{3}{6}=\frac{1}{15} \end{aligned} ​P(Y=1)=9/15,P(Y=−1)=6/15P(X(1)=1∣Y=1)=2/9,P(X(1)=2∣Y=1)=3/9,P(X(1)=3∣Y=1)=4/9P(X(2)=S∣Y=1)=1/9,P(X(2)=M∣Y=1)=4/9,P(X(2)=L∣Y=1)=4/9P(X(1)=1∣Y=−1)=3/6,P(X(1)=2∣Y=−1)=2/6,P(X(1)=3∣Y=−1)=4/6P(X(2)=S∣Y=−1)=3/6,P(X(2)=M∣Y=−1)=2/6,P(X(2)=L∣Y=−1)=1/6P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=159​⋅93​⋅91​=451​P(Y=−1)P(X(1)=2∣Y=−1)P(X(2)=S∣Y=−1)=156​⋅62​⋅63​=151​​
由于1/15大于1/45,所以y = -1。

贝叶斯估计

回归条件概率的计算:
P(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)∑i=1NI(yi=ck)P(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k)}{\sum_{i=1}^N I(y_i = c_k)} P(X(j)=ajl​∣Y=ck​)=∑i=1N​I(yi​=ck​)∑i=1N​I(xi(j)​=ajl​,yi​=ck​)​
如果存在某个类别下的某个特征没有出现过,则概率值为0,会影响后验概率的计算结果,导致分类结果产生偏差。解决此类问题的方法是采用贝叶斯估计。条件概率的贝叶斯估计是:
Pλ(X(j)=ajl∣Y=ck)=∑i=1NI(xi(j)=ajl,yi=ck)+λ∑i=1NI(yi=ck)+Sjλ(1)P_\lambda(X^{(j)}=a_{jl}|Y=c_k) = \frac{\sum_{i=1}^N I(x_i^{(j)}=a_{jl}, y_i = c_k) + \lambda}{\sum_{i=1}^N I(y_i = c_k)+ S_j\lambda} \tag 1 Pλ​(X(j)=ajl​∣Y=ck​)=∑i=1N​I(yi​=ck​)+Sj​λ∑i=1N​I(xi(j)​=ajl​,yi​=ck​)+λ​(1)
式子中 λ≥0\lambda \ge 0λ≥0,当λ=0\lambda = 0λ=0则为极大似然估计,λ\lambdaλ 通常取1,此时成为拉普拉斯平滑。同样,先验概率的贝叶斯估计是:
Pλ(Y=ck)=∑i=1NI(yi=ck)+λN+KλP_\lambda(Y=c_k) = \frac{\sum_{i=1}^N I(y_i=c_k)+\lambda}{N+K\lambda} Pλ​(Y=ck​)=N+Kλ∑i=1N​I(yi​=ck​)+λ​

优缺点

优点

  1. 朴素贝叶斯模型有稳定的分类效率。
  2. 对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以一批批的去增量训练。
  3. 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点:

  1. 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
  2. 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
  3. 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
  4. 对输入数据的表达形式很敏感。

参考文章:

  1. 《统计学习方法 第二版》
  2. 机器学习算法基础_Task2 bayes_plus.ipynb

朴素贝叶斯相关基础知识相关推荐

  1. 机器学习-朴素贝叶斯(基础讲解+代码实现+图像展示)

    朴素贝叶斯 定理: 某晚,C准备收拾东西接女朋友,那么小C要不要带伞呢. 已知:天气预报说今日降水概率为50%–P(A) 晚高峰堵车的概率为80%–P(B) 如果下雨,晚高峰堵车的概率是95%–P(B ...

  2. Python 决策树与贝叶斯相关理论知识和例题

    目录 ID3算法 例题 贝叶斯 例1 例2 朴素贝叶斯 例题 参考 信息有顺序排列,意思明确 信息无序,意思多 描述信息的混乱度用信息熵 ID3算法 将无序的数据变得更加有序. 信息熵计算公式 信息增 ...

  3. Python3《机器学习实战》学习笔记(五):朴素贝叶斯实战篇之新浪新闻分类

    转载请注明作者和出处:http://blog.csdn.net/c406495762 Github代码获取:https://github.com/Jack-Cherish/Machine-Learni ...

  4. 【机器学习基础】朴素贝叶斯的算法实现

    前言 本次我们将梳理下朴素贝叶斯(Naive Bayes)的相关内容. 本文约1.6k字,预计阅读10分钟. 概要 朴素贝叶斯算法是一种适用于二分类和多分类分类问题的「分类算法」.在贝叶斯概率框架下, ...

  5. 机器学习 | 朴素贝叶斯法知识总结

    机器学习 | 朴素贝叶斯法理论知识 贝叶斯决策论是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记.朴素贝 ...

  6. 朴素贝叶斯详解及中文舆情分析(附代码实践)

    作者|杨秀璋  整理|AI科技大本营 本文主要讲述朴素贝叶斯分类算法并实现中文数据集的舆情分析案例,希望这篇文章对大家有所帮助,提供些思路.内容包括: 1.朴素贝叶斯数学原理知识 2.naive_ba ...

  7. 小白学习朴素贝叶斯——看即懂

    申明:文章内容是作者自己的学习笔记,教学来源是开课吧讲师梁勇老师. 讲师介绍:梁老师 <细说Java>与<Java深入解析>图书作者.一线互联网资深数据分析专家,超过十年软件开 ...

  8. 朴素贝叶斯算法与贝叶斯估计

    1. 朴素贝叶斯算法 朴素贝叶斯算法是学习数据集的联合概率分布 P(X,Y)P(X,Y)P(X,Y),而这个过程是通过学习先验概率 P(Y=Ck)P(Y=C_k)P(Y=Ck​) 和条件概率分布 P( ...

  9. 【机器学习】朴素贝叶斯(Naive Bayes)

    在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系, ...

最新文章

  1. pandas.read_csv(path_features_known_csv, header=None)的用法
  2. IDC与百度联合发报告:预测2019年人工智能十大趋势
  3. Android2.2 API 中文文档系列(7) —— ImageButton
  4. 003_JavaScript实现
  5. php连接plc,PLC 几种常见的连接口和通讯协议
  6. Linux(一)——基础入门(1)
  7. c# 轻量级ORM框架 实现(一)
  8. emlog-FLY主题模板1.4版本免费完全开源
  9. HTML5 地理位置定位(HTML5 Geolocation)原理及应用 (调用GPS)
  10. 计算机科学与技术大学生职业规划,计算机科学与技术大学生职业生涯规划ppt
  11. VC中TabControl控件使用方法(转载)
  12. SpringBoot-技术专区-详细打印启动时异常堆栈信息
  13. .Net 中的序列化与反序列化[概述]
  14. 手机联系人分组名字都没了_艺术签名手写设计,每个名字都应该是精品,只是你没找对方法...
  15. Vijos1906 联合权值 NOIP2014Day1T2 树形动态规划
  16. POJ 4047 Garden 线段树 区间更新
  17. STL的vector
  18. 解决/usr/bin/ld: cannot find -lxxx 问题
  19. 拆机专用磁力桌垫:保证一颗螺丝也不漏网
  20. printf(“%d \n“,printf(“%d “,printf(“%d “,i)));输出结果?

热门文章

  1. ubuntu中clion更换cmake版本以及文本背景颜色
  2. 日常生活中如何获得低咖啡因的茶叶
  3. ubuntu下面的java一键运行脚本
  4. datagrip中运行sql语句
  5. 2.6 矩阵乘法重要特例
  6. 2.3 线性变换引入
  7. mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
  8. word2vec, LSTM Speech Recognition实战, 图数据库
  9. Pandas数据结构简介
  10. 特殊权限位set_uid set_gid   stick_bit 软链接硬链接