文章目录

  • 1 概述
  • 2 原理
    • 2.1 贝叶斯定理
    • 2.2 属性条件独立假设
    • 2.3 高斯朴素贝叶斯
      • 2.3.1 计算方法
      • 2.3.2 API调用
    • 2.4 Multinomial Naive Bayes
      • 2.4.1 计算方法
      • 2.4.2 文本分类情景下的计算方法
      • 2.4.3 API调用
    • 2.5 Bernoulli Naive Bayes
      • 2.5.1 计算方法
      • 2.5.2 API调用
  • 3 注意事项

1 概述

  • 一种监督学习算法

  • “朴素”的原因:假设所有特征之间相互独立

  • 既可以用于处理连续数据,又可以用于处理离散数据

    • 处理连续数据的方法:

      • Gaussian Naive Bayes(高斯朴素贝叶斯)
    • 处理离散数据的方法(常用于文本分类任务):
      • Multinomial Naive Bayes(多项式朴素贝叶斯)
      • Bernoulli Naive Bayes(伯努利朴素贝叶斯)
      • Complement Naive Bayes(多项式朴素贝叶斯的加强版)
  • 思路较简单,速度非常快

2 原理

2.1 贝叶斯定理

设当前要预测的样本为 x\boldsymbol xx,它拥有 x1,x2,...,xnx_1,x_2, ...,x_nx1​,x2​,...,xn​ 这 nnn 个特征。则 x\boldsymbol xx 属于某一类别 y\boldsymbol yy 的概率为:

P(y∣x1,…,xn)=P(y)P(x1,…,xn∣y)P(x1,…,xn)P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots, x_n \mid y)} {P(x_1, \dots, x_n)} P(y∣x1​,…,xn​)=P(x1​,…,xn​)P(y)P(x1​,…,xn​∣y)​

  • P(y)P(y)P(y):类的先验概率,即训练集中第 y 类样本的个数与整个训练集样本个数的比值

  • P(x1,...,xn)P(x_1,...,x_n)P(x1​,...,xn​): 对于给定的样本 x\boldsymbol xx ,该值为常数

  • P(x1,...,xn∣y)P(x_1,...,x_n \ | \ y)P(x1​,...,xn​ ∣ y): 样本 x\boldsymbol xx 相对于类 y\boldsymbol yy 的条件概率

2.2 属性条件独立假设

对于给定的类别,假设所有特征相互独立,每个特征独立地对分类结果产生影响,则有:
P(y∣x1,…,xn)=P(y)∏i=1nP(xi∣y)P(x1,…,xn)P(y \mid x_1, \dots, x_n) = \frac{P(y) \prod_{i=1}^{n} P(x_i \mid y)} {P(x_1, \dots, x_n)} P(y∣x1​,…,xn​)=P(x1​,…,xn​)P(y)∏i=1n​P(xi​∣y)​

  • P(xi∣y)P(x_i \ | \ y)P(xi​ ∣ y): 样本 x\boldsymbol xx 的第 $ i $ 个特征相对于类 yyy 的条件概率

由于P(x1,...,xn)P(x_1,...,x_n)P(x1​,...,xn​)为常数,故:
P(y∣x1,…,xn)∝P(y)∏i=1nP(xi∣y)P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y) P(y∣x1​,…,xn​)∝P(y)i=1∏n​P(xi​∣y)
预测的依据:使得概率P(y)∏i=1nP(xi∣y)P(y) \prod_{i=1}^{n} P(x_i \mid y)P(y)∏i=1n​P(xi​∣y)最大的对应类别标签 yyy,就是最终的预测结果:

y^=arg⁡max⁡yP(y)∏i=1nP(xi∣y)\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y) y^​=argymax​P(y)i=1∏n​P(xi​∣y)

P(xi∣y)P(x_i \ | \ y)P(xi​ ∣ y)对于不同朴素贝叶斯方法,计算的方法也不相同。下面会介绍到几种常用的朴素贝叶斯方法。

2.3 高斯朴素贝叶斯

2.3.1 计算方法

用于特征为连续值时的分类任务。对应P(xi∣y)P(x_i \ | \ y)P(xi​ ∣ y) 的计算方法如下:
P(xi∣y)=12πσy2exp⁡(−(xi−μy)22σy2)P(x_i \mid y) = \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right) P(xi​∣y)=2πσy2​​1​exp(−2σy2​(xi​−μy​)2​)

  • μy\mu_yμy​:类别 yyy 的所有样本中第 i 个特征的所有特征值的均值
  • σy2\sigma_y^2σy2​:类别 yyy 的所有样本中第 i 个特征的所有特征值的方差

下面以鸢尾花数据集为例,介绍一下总体的计算细节。

以原始数据集中的 Species=iris-setosa (下面的公式中简写为setosa)的样本为训练集,示例如下:

接下来要对一个新样本 x=[4.8,3.8,1.6,0.3]\boldsymbol x = [4.8, 3.8, 1.6, 0.3]x=[4.8,3.8,1.6,0.3] 进行预测。

SpealLengthCm 特征(简写为x0x_0x0​)为例:

  1. 求指定类中特征的均值和方差
    μ(x0)≈4.860\mu(x_0)≈4.860 μ(x0​)≈4.860

    σ2(x0)≈0.034\sigma^2(x_0)≈0.034 σ2(x0​)≈0.034

  2. 将求出的均值和方差代入高斯概率密度函数
    P(x0∣y=setosa)=12π×0.034exp⁡(−(x0−4.860)22×0.034)P(x_0 \mid y=setosa) = \frac{1}{\sqrt{2\pi×0.034}} \exp\left(-\frac{(x_0 - 4.860)^2}{2×0.034}\right) P(x0​∣y=setosa)=2π×0.034​1​exp(−2×0.034(x0​−4.860)2​)

  3. 将样本 x 的第一个特征的值代入上述公式:
    P(x0=4.8∣y=setosa)=12π×0.034exp⁡(−(4.800−4.860)22×0.034)P(x_0=4.8 \mid y=setosa) = \frac{1}{\sqrt{2\pi×0.034}} \exp\left(-\frac{(4.800 - 4.860)^2}{2×0.034}\right) P(x0​=4.8∣y=setosa)=2π×0.034​1​exp(−2×0.034(4.800−4.860)2​)

  4. 其他特征的求法类推

  5. 利用公式:
    P(y=setosa∣x1,…,xn)∝P(y=setosa)∏i=1nP(xi∣y)P(y=setosa \mid x_1, \dots, x_n) \propto P(y=setosa) \prod_{i=1}^{n} P(x_i \mid y) P(y=setosa∣x1​,…,xn​)∝P(y=setosa)i=1∏n​P(xi​∣y)
    即可求出样本 x\boldsymbol xx 属于 iris-setosa 类的概率

注意:PetalLengthCm 特征中所有的值均为0.2, 故方差为0,若使用高斯概率密度函数会出现运算错误

2.3.2 API调用

class sklearn.naive_bayes.GaussianNB(*, priors=None, var_smoothing=1e-09)

priors: array-like of shape (n_classes,)

类的先前概率。

var_smoothing: float, default=1e-9

在计算稳定性的方差中添加的所有函数最大方差的一部分。

下面给出调用的示例。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)

2.4 Multinomial Naive Bayes

2.4.1 计算方法

对应P(xi∣y)P(x_i \ | \ y )P(xi​ ∣ y) 的计算方法如下:
P(xi=t∣y=c;α)=Ntic+αNc+αni,P(x_i = t \mid y = c \: ;\, \alpha) = \frac{ N_{tic} + \alpha}{N_{c} + \alpha n_i}, P(xi​=t∣y=c;α)=Nc​+αni​Ntic​+α​,

  • NticN_{tic}Ntic​: 类别为 ccc的样本中第 i 个特征的值为 t 的个数
  • NcN_cNc​ : 类别为$ c $的样本的总个数
  • α\alphaα : 拉普拉斯平滑系数,一般设置为1,防止概率为 0 的情况出现
  • nin_ini​ : 第 iii 个特征中可能出现的值的数量

所有P(xi∣y)P(x_i \ | \ y )P(xi​ ∣ y)求出来之后进行连乘,再与类 y 的先验概率相乘,就得到了样本 x 属于类别 y 的概率:
P(y∣x1,…,xn)∝P(y)∏i=1nP(xi∣y)P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y) P(y∣x1​,…,xn​)∝P(y)i=1∏n​P(xi​∣y)
以西瓜书中的西瓜数据集为例,训练集如下:

对下面样本 新瓜 进行预测:

  1. 先求所有类别的先验概率:

  1. 再求各个P(xi∣y)P(x_i \ | \ y)P(xi​ ∣ y),即预测样本的各个特征在类 yyy 中出现的概率

  1. 求该瓜属于分别属于好瓜(是)和好瓜(否)的概率
    P(好瓜=是∣新瓜)=0.471×0.375×0.375×0.750×0.875×0.750×0.750≈0.024P(好瓜=是| 新瓜)=0.471×0.375×0.375×0.750×0.875×0.750×0.750 ≈0.024 P(好瓜=是∣新瓜)=0.471×0.375×0.375×0.750×0.875×0.750×0.750≈0.024

    P(好瓜=否∣新瓜)=0.529×0.333×0.333×0.444×0.222×0.222×0.667≈0.00086P(好瓜=否| 新瓜)=0.529×0.333×0.333×0.444×0.222×0.222×0.667 ≈0.00086 P(好瓜=否∣新瓜)=0.529×0.333×0.333×0.444×0.222×0.222×0.667≈0.00086

  2. 做出预测

    由于0.024>0.000860.024 > 0.000860.024>0.00086,故该新瓜预测为“好瓜”。

2.4.2 文本分类情景下的计算方法

在文本分类情境下,MNB的条件概率计算公式如下:
P(xi∣y)=Nyi+αNy+αnP(x_i \mid y) = \frac{ N_{yi} + \alpha}{N_y + \alpha n} P(xi​∣y)=Ny​+αnNyi​+α​

  • NyiN_{yi}Nyi​: 对于一个要预测的新句子 x\boldsymbol xx,其第 i 个单词在类别为 y 的各个文档中出现的总次数
  • NyN_yNy​: 类别为 y\boldsymbol yy 的所有文本中的总词数
  • α\alphaα : 拉普拉斯平滑系数,默认设置为1
  • nnn:文本的词汇量(即无重复单词的个数)

这样就可以用如下公式求出某一段文本 x 属于给定类别 y 的概率:
P(y∣x1,…,xn)∝P(y)∏i=1nP(xi∣y)P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y) P(y∣x1​,…,xn​)∝P(y)i=1∏n​P(xi​∣y)
下面计算细节示例如下。

假设有如下训练文本

给定一个新文本样本: China, China, China, Tokyo, Japan,对其进行分类。

  1. 将新样本转化为文本向量:
    d=(China,China,China,Tokyo,Japan)d=(China, China, China, Tokyo, Japan) d=(China,China,China,Tokyo,Japan)

  2. 确定类别的集合:
    Y={yes,no}Y=\{yes, no\} Y={yes,no}

  3. 分析单词的分布情况:

    • 类 yes:共8个单词,

    • 类 no :共3个单词

    • 训练样本单词总数:11

      故类先验概率为:

    P(yes)=811,P(no)=311P(yes)=\frac{8}{11}, P(no)=\frac{3}{11} P(yes)=118​,P(no)=113​

    • 词汇量(不重复单词的个数):6
  4. 计算类条件概率:

P(China∣yes)=5+18+6=37P(China | yes)= \frac{5+1}{8+6}= \frac{3}{7} P(China∣yes)=8+65+1​=73​

P(Japan∣yes)=0+18+6=114P(Japan | yes)= \frac{0+1}{8+6}= \frac{1}{14} P(Japan∣yes)=8+60+1​=141​

P(Tokyo∣yes)=0+18+6=114P(Tokyo | yes)= \frac{0+1}{8+6}= \frac{1}{14} P(Tokyo∣yes)=8+60+1​=141​

P(China∣no)=1+13+6=29P(China | no)= \frac{1+1}{3+6}= \frac{2}{9} P(China∣no)=3+61+1​=92​

P(Japan∣no)=1+13+6=29P(Japan | no)= \frac{1+1}{3+6}= \frac{2}{9} P(Japan∣no)=3+61+1​=92​

P(Tokyo∣no)=1+13+6=29P(Tokyo | no)= \frac{1+1}{3+6}= \frac{2}{9} P(Tokyo∣no)=3+61+1​=92​

  1. 计算后验概率:
    P(yes∣d)=811×37×37×37×114×114≈0.000292P(yes | d)=\frac{8}{11}×\frac{3}{7}×\frac{3}{7}×\frac{3}{7}×\frac{1}{14}×\frac{1}{14}≈0.000292 P(yes∣d)=118​×73​×73​×73​×141​×141​≈0.000292

    P(no∣d)=311×29×29×29×29×29≈0.000148P(no | d)=\frac{3}{11}×\frac{2}{9}×\frac{2}{9}×\frac{2}{9}×\frac{2}{9}×\frac{2}{9}≈0.000148 P(no∣d)=113​×92​×92​×92​×92​×92​≈0.000148

  2. 做出预测

    由于0.000292 > 0.000148,故该文本归类为yes,即China。

2.4.3 API调用

class sklearn.naive_bayes.MultinomialNB(*, alpha=1.0,fit_prior=True,class_prior=None)

alpha: float, default=1.0

Additive (Laplace/Lidstone) smoothing parameter (0 for no smoothing).

fit_prior: bool, default=True

Whether to learn class prior probabilities or not. If false, a uniform prior will be used.

class_prior: array-like of shape (n_classes,), default=None

Prior probabilities of the classes. If specified the priors are not adjusted according to the data.

2.5 Bernoulli Naive Bayes

每个特征均用布尔值表示。在文本分类情景下,1表示当前词有在文档中出现过,0表示没有出现过。

当出现非0和1的其他值时,根据设定的阈值将样本特征二值化。

2.5.1 计算方法

P(xi∣y)=P(i∣y)xi+(1−P(i∣y))(1−xi)P(x_i \mid y) = P(i \mid y) x_i + (1 - P(i \mid y)) (1 - x_i) P(xi​∣y)=P(i∣y)xi​+(1−P(i∣y))(1−xi​)

其中:
P(i∣y)=Nyi+αNy+αnP(i \mid y) = \frac{ N_{yi} + \alpha}{N_y + \alpha n} P(i∣y)=Ny​+αnNyi​+α​

  • xix_ixi​:特征值,非1即0,表示所对应单词是否在文本中出现过

  • NyiN_{yi}Nyi​: 类 yyy下包含第 i 个单词的文件数

  • NyN_yNy​类别为 yyy 的文本的总数

  • α\alphaα : 拉普拉斯平滑系数,默认设置为1

  • nnn:总的文本类别数

训练文本:

给定一段新文本:China, Japan, Tokyo, Beijing, Shanghai, Macao,对其进行分类。

  1. 将新样本转化为文本向量:
    d=(China,Japan,Beijing,Shanghai,Macao,Tokyo)d=(China, Japan, Beijing, Shanghai, Macao,Tokyo) d=(China,Japan,Beijing,Shanghai,Macao,Tokyo)

  2. 确定类别的集合:
    Y={yes,no}Y=\{yes, no\} Y={yes,no}

  3. 分析文件的分布情况:

    • 类yes:共3个文件

    • 类no :共1个文件

    • 总文件数:4

      故类先验概率为:

    P(yes)=34,P(no)=14P(yes)=\frac{3}{4}, P(no)=\frac{1}{4} P(yes)=43​,P(no)=41​

    • 总的文本类别数(只有yes和no):2
  4. 计算类条件概率:

P(China∣yes)=3+13+2=45P(China | yes)= \frac{3+1}{3+2}= \frac{4}{5} P(China∣yes)=3+23+1​=54​

P(Japan∣yes)=0+13+2=15P(Japan | yes)= \frac{0+1}{3+2}= \frac{1}{5} P(Japan∣yes)=3+20+1​=51​

P(Beijing∣yes)=1+13+2=25P(Beijing | yes)= \frac{1+1}{3+2}= \frac{2}{5} P(Beijing∣yes)=3+21+1​=52​

P(Shanghai∣yes)=1+13+2=25P(Shanghai | yes)= \frac{1+1}{3+2}= \frac{2}{5} P(Shanghai∣yes)=3+21+1​=52​

P(Macao∣yes)=1+13+2=25P(Macao | yes)= \frac{1+1}{3+2}= \frac{2}{5} P(Macao∣yes)=3+21+1​=52​

P(Toyko∣yes)=0+13+2=15P(Toyko | yes)= \frac{0+1}{3+2}= \frac{1}{5} P(Toyko∣yes)=3+20+1​=51​

P(China∣no)=1+11+2=23P(China | no)= \frac{1+1}{1+2}= \frac{2}{3} P(China∣no)=1+21+1​=32​

P(Japan∣no)=P(Tokyo∣no)=1+11+2=23P(Japan | no)=P(Tokyo | no)= \frac{1+1}{1+2}= \frac{2}{3} P(Japan∣no)=P(Tokyo∣no)=1+21+1​=32​

P(Beijing∣no)=P(Macao∣no)=P(Shanghai∣no)=0+11+2=13P(Beijing| no)= P(Macao| no)= P(Shanghai | no)= \frac{0+1}{1+2}= \frac{1}{3} P(Beijing∣no)=P(Macao∣no)=P(Shanghai∣no)=1+20+1​=31​

  1. 计算后验概率:
    P(yes∣d)=34×45×(1−15)×25×25×25×(1−15)≈0.025P(yes | d)=\frac{3}{4}×\frac{4}{5}×(1-\frac{1}{5}) ×\frac{2}{5}×\frac{2}{5}×\frac{2}{5}×(1-\frac{1}{5})≈0.025 P(yes∣d)=43​×54​×(1−51​)×52​×52​×52​×(1−51​)≈0.025

    P(no∣d)=14×23×23×23×(1−13)×(1−13)×(1−13)≈0.022P(no | d)=\frac{1}{4}×\frac{2}{3}×\frac{2}{3}×\frac{2}{3}×(1-\frac{1}{3}) ×(1-\frac{1}{3})×(1-\frac{1}{3})≈0.022 P(no∣d)=41​×32​×32​×32​×(1−31​)×(1−31​)×(1−31​)≈0.022

  2. 做出预测

    由于0.025> 0.022,故该文本归类为yes,即是China。

2.5.2 API调用

class sklearn.naive_bayes.BernoulliNB(*, alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)

alpha: float, default=1.0

拉普拉斯平滑参数(0表示无平滑)

binarize: float or None, default=0.0

Threshold for binarizing (mapping to booleans) of sample features. If None, input is presumed to already consist of binary vectors.

fit_prior: bool, default=True

Whether to learn class prior probabilities or not. If false, a uniform prior will be used.

class_prior: array-like of shape (n_classes,), default=None

Prior probabilities of the classes. If specified the priors are not adjusted according to the data.

3 注意事项

  1. 当某个特征出现缺失值的时候,朴素贝叶斯选择直接忽略,不让其参与计算,进而最大程度避免了缺失值的影响

  2. 使用 log 函数对概率值进行处理可防止下溢

  3. 当训练集有更新时,朴素贝叶斯可以快速对更新后的数据集进行拟合

  4. 当数据样本中出现高度相关的特征时,朴素贝叶斯效果会大打折扣,因为相关特征的概率会乘上多次,导致预测概率值出现偏差

  5. 由于朴素贝叶斯假设所有特征相互独立,故可以对不同特征的概率实现并行计算,进一步加快计算速度

  6. 当训练样本数不够多时,使用朴素贝叶斯进行训练可以减小过拟合的风险

  7. 具有阶级局限性,对于大型数据集效果不好

  8. GNB中应注意对方差为 0 的特征要单独讨论;MNB、BNB中应加入拉普拉斯平滑系数防止概率为0的情况发生

【机器学习算法介绍】朴素贝叶斯相关推荐

  1. 机器学习算法总结--朴素贝叶斯

    这次需要总结的是朴素贝叶斯算法,参考文章: <统计学习方法> 机器学习常见算法个人总结(面试用) 朴素贝叶斯理论推导与三种常见模型 朴素贝叶斯的三个常用模型:高斯.多项式.伯努利 简介 朴 ...

  2. 机器学习算法基础——朴素贝叶斯算法

    26.朴素贝叶斯算法原理 联合概率和条件概率 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) P(A,B)=P(A)P(B) 条件概率:就是事件A在另外一个事件B已经发生条件下的 ...

  3. 机器学习算法之朴素贝叶斯模型

    基本原理 从统计学知识回到我们的数据分析.假如我们的分类模型样本是: 即我们有m个样本,每个样本有n个特征,特征输出有k个类别,定义为C1,C2,-,Ck,.从样本我们可以学习得到朴素贝叶斯的先验分布 ...

  4. 朴素贝叶斯基础【机器学习算法一朴素贝叶斯1】

    基础知识回顾 (上述内容引自李航<统计学习方法>) 过去的7天当中,有3天下雨,4天没有下雨.用0代表灭有下雨,而1代表下雨,我们可以用一个数组来表示: y=[0,1,1,0,1,0,0] ...

  5. 朴素贝叶斯实例(肿瘤良性与恶性)【机器学习算法一朴素贝叶斯5】

    import matplotlib.pyplot as plt import numpy as np#导入肿瘤数据集 from sklearn.datasets import load_breast_ ...

  6. 伯努利朴素贝叶斯【机器学习算法一朴素贝叶斯2】

    伯努利朴素贝叶斯方法适合于伯努利分布(即二项分布或0-1分布)的数据集. import numpy as np from sklearn.naive_bayes import BernoulliNB ...

  7. 机器学习实验:朴素贝叶斯算法

    机器学习实验:朴素贝叶斯算法 问题如下: 根据给出的算法naivebayes.py,实现: 1.将数据集文件naivebayes_data.csv中的数据替换成14天打球与天气数据: 2.预测样本{O ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络

    Python机器学习算法实现 Author:louwill 在上一讲中,我们讲到了经典的朴素贝叶斯算法.朴素贝叶斯的一大特点就是特征的条件独立假设,但在现实情况下,条件独立这个假设通常过于严格,在实际 ...

  9. 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯

    朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...

  10. 机器学习面试题——朴素贝叶斯

    机器学习面试题--朴素贝叶斯 提示:这些知识点也是大厂笔试经常考的题目,我记得阿里和京东就考!!!想必在互联网大厂就会用这些知识解决实际问题 朴素贝叶斯介绍一下 朴素贝叶斯优缺点 贝叶斯公式 朴素贝叶 ...

最新文章

  1. Docker Dockerfile
  2. 既然他人的成功与自己无关,何必过于关注他人?
  3. android o 小米note 3,小米 Note 3 MIUI 10 安卓 8.0 内测开启
  4. Linux 被***后的检查
  5. c++中获取蓝图组件_蓝图C++混合编程
  6. Scala语言将加入宏指令
  7. cf卡序列号修改工具_王者荣耀无需Root修改荣耀战区软件和方法分享 全国地区可任意修改...
  8. 牛客国庆集训派对Day1: K. Tengen Toppa Gurren Lagann(贪心)
  9. win10+ubuntu16.04双系统下完全删除并重装ubuntu16.04
  10. Ubuntu 安装显卡驱动 CUDA10 cuDNN详细教程
  11. 平分七筐鱼c语言y,平分七筐鱼 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. vb.net产生随机数Random代码实例
  13. PHP 富文本内容中图片路径追加域名
  14. 算法竞赛常用STL库
  15. 【拓扑学知识】3.乘积空间与拓扑基
  16. 如何下载某些IT培训机构上课视频——可以发送/保存
  17. ChatGpt接入Word文档,让你秒变职场达人!
  18. 基于QT平台的手持媒体播放器项目实战视频教程下载
  19. 软件项目管理第4版课后习题[附解析]第八章
  20. java矢量图_java – 矢量图形在iText PDF

热门文章

  1. 乌尔维·阿西莫夫和 .art的不解情缘
  2. FX5U远程调试PLC远程监控方案
  3. linux 群组分类,Linux文件权限与群组修改命令详解
  4. ESP32(arduino)和声音传感器数据采集并实现连接WiFi进行MQTT通信
  5. 【我的Android进阶之旅】使用Retrofit进行Post请求报错: @Field parameters can only be used with form encoding.
  6. SpringBoot监控
  7. 电磁兼容试验项目之谐波电流试验
  8. python简单实战项目:《冰与火之歌1-5》角色关系图谱构建
  9. Cu50温度传感器的误差分析
  10. 解决Ardupilot+gazebo+mavros在仿真状态下无人机能解锁,但是不能起飞的问题