机器学习的练功方式(六)——朴素贝叶斯

文章目录

    • 致谢
  • 6 朴素贝叶斯
    • 6.1 概述
    • 6.2 概率论
      • 6.2.1 大数定律
      • 6.2.2 基本概念
      • 6.2.3 极大似然估计
      • 6.2.4 多项式分布
        • 6.2.4.1 伯努利分布
        • 6.2.4.2 二项分布
      • 6.2.5 朴素贝叶斯
    • 6.3 朴素贝叶斯文本分类
      • 6.3.1 一个例子
      • 6.3.2 拉普拉斯平滑系数
      • 6.3.3 算法实现
    • 6.4 贝叶斯分类器
      • 6.4.1 多项式贝叶斯分类器
      • 6.4.2 高斯贝叶斯分类器
      • 6.4.3 伯努利贝叶斯分类器
      • 6.4.4 代码实现

致谢

本文参考资料如下

拉普拉斯平滑(Laplacian smoothing)_潜心学习的渣渣的博客-CSDN博客_拉普拉斯平滑

极大似然估计详解_知行流浪-CSDN博客_极大似然估计

极大似然估计原理详细说明_majunfu-CSDN博客_极大似然估计的原理

(1条消息) 多项式分布的理解概率公式的理解_猪逻辑公园-CSDN博客_多项式分布

常用的概率分布:伯努利分布、二项式分布、多项式分布、先验概率,后验概率 - 志光 - 博客园 (cnblogs.com)

十分钟学习 统计学习方法 李航 第二版 之《4.1 朴素贝叶斯法:核心——贝叶斯定理》_哔哩哔哩_bilibili

【AI 版】十分钟学习 统计学习方法 李航 第二版 之《4.4 朴素贝叶斯法:极大似然法之原理篇》_哔哩哔哩_bilibili

6 朴素贝叶斯

6.1 概述

这一讲我们要学习的是朴素贝叶斯算法。其属于有监督学习。

贝叶斯分类是一种分类算法的总称,这种算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

贝叶斯分类器的主要特点有:

  • 属性可以离散,也可以稳定。
  • 数学基础扎实,分类效率稳定。
  • 对缺失和噪声数据不太敏感。
  • 属性如果不相关,分类效果很好,如果相关,则不低于决策树

让我们来直观对比一下KNN和朴素贝叶斯吧。在KNN中,我们通过模型来预测的结果一般可以通过和某类别的点距离远近给出该样本的所在分类;而对于决策树,其一般是算出该样本在各个类别中的概率,在哪个类别概率大就属于哪个类别。

image-20220307125019631

现在假如我们引出一个事件。

有一天我们坐在办公室里,看到有人快速的走过,我们没有看到这个人是谁。但是我们做一个猜测,Alex和Brenda坐在办公室的时间一样长,那么这两人都各有百分之五十的概率是那个快速走过的人。

image-20220307125234329

那现在我们又有一条新的推断信息,两个人都有一件红色的毛衣,而那个快速走过的人身上就穿了一件红色的毛衣。对于Alex来说她一个星期穿两次,而Brenda一个星期穿三次,所以这样的话快速走过的人是Alex的概率变成了百分之四十,是Brenda的概率变成了百分之六十。

image-20220307125409828

在这里,在我们还没有新信息时,我们得到的百分之五十是先验概率。然后我们有了新信息后,我们得到了百分之四十和百分之六十。最后猜测的这两个概率被称为后验概率

现在还是刚才那个例子,加入我们还是看到一个人飞跑过去,跑的太快我们没注意,然后靠推断看看这个人是谁。我们最开始知道的消息是,Alex一个星期中有三天是待在办公室的,而Brenda一个星期只有一天是待在办公室的。所以Alex的先验概率是0.75,而Brenda是0.25,然后我们假设连续好几周都是这种情况,那么我们可以很简单的列一个表格。

image-20220307125535966

那么现在很先前一样,Alex每周有两次穿红色毛衣,而Brenda每周有三次穿红色毛衣。那么穿毛衣总数我们把他在表格中标红,两人穿红色毛衣的次数共九次。

因此,如果我们看到一个穿着红色毛衣的人快速经过,这个人是Alex的概率(后验概率)是三分之二,是Brenda的概率(后验概率)是三分之一。那么穿毛衣总数我们把他在表格中标红,两人穿红色毛衣的次数共九次。

image-20220307125629262

因此,如果我们看到一个穿着红色毛衣的人快速经过,这个人是Alex的概率(后验概率)是三分之二,是Brenda的概率(后验概率)是三分之一。

总的来说就是:先验概率为主观判断的概率,某种新信息改变我们的主观判断后,得出的最终结论我们叫做后验概率。

让我们用下面的数学方式来算一次:

我们开始的时候,Alex一个星期在办公室三次,Brenda一个星期在办公室一次,那么就是四分之三和四分之一的概率,而后,两人穿红毛衣的概率和不穿红毛衣概率分别是0.4和0.6,0.6和0.4。然后分别计算他们的条件概率,如下图所示。

image-20220307125713650

然而,我们要的仅仅是找出那个人,找不出的因素和我们没什么关系,所以我们把其他因素舍去,然后使主要因素的总数之和为一。

image-20220307125754581

由上图我们可以把步骤一般化,那么可得贝叶斯公式如下。

image-20220307125817997

现在我们换一个更好的例子来理解贝叶斯公式。

假如你身体不舒服,要去医院看医生,医生告诉你,你可能的了某种严重的疾病,而且诊断这种疾病的准确率是百分之99。(先验概率)然后你在等待检测的过程中,上网搜索了一下资料,然后发现平均有万分之一的人患这种病。结果你在检测完的第二天医生就打电话来告诉你,你的检查结果为阳性,这时候你感到开始恐慌了,那请问我们患病的概率是多少?

image-20220307125851927

我们用数学的方法好好来计算一下,假设现在有一百万人,那么就有999900人健康,100人患病,健康的人中,可能有9999的人会被误诊,有989901个人检测正确,而患病的人里面有99个成功检测并得到治疗,有一个人是诊断不出来而乖乖送死。

image-20220307125929121

那么按我们刚才的计算,我们应该计算出来的患病概率为:0.0098

image-20220307125950407

6.2 概率论

6.2.1 大数定律

我们来对上面的知识做一个归档。假如现在我们有一枚硬币,我们定义一个概率事件:扔出一个硬币,结果头像朝上的可能性为几。

如果在这个硬币质地均匀的情况下,我们会不加思索地回答:百分之50。实际上,这个浅显易懂的道理是根据大数定律推断出来的。大数定律的内容是:如果统计数据足够大,那么事件出现的概率就能无限接近它的期望值。

6.2.2 基本概念

  • 事件:每种结果

  • 样本空间(结果空间):所有基本事件的集合Ω,例如投掷一次硬币的样本空间是:{正,反};投掷一次骰子的样本空间是:{1,2,3,4,5,6}

  • 样本点:样本空间元素(基本事件w)

  • 联合概率:联合概率也是我们说的and事件,即A = a和B = b同时发生的概率是多少。

  • 条件概率:设AB两个事件,且P(B)>0,则称P(AB)P(B)\frac {P(AB)}{P(B)}P(B)P(AB)为事件B已发生的条件下事件A发生的条件概率记为P(A|B)。

  • 独立性:我们常说的独立性说成大白话就是互不影响,比如连续抛出两次骰子,第二次抛出不会受第一次影响;还有投篮啊,打靶啊都是独立的;也就是说,设有A、B是两个任意事件,如果P(AB) = P(A)P(B),则称事件A和B相互独立,简称A和B独立。

  • 乘法定理:P(A|B) = P(AB)P(B)\frac {P(AB)}{P(B)}P(B)P(AB)

  • 贝叶斯定理:贝叶斯定理也叫逆概公式。由于P(AB)可以以乘法定理为桥梁,拓展出P(AB)=P(B∣A)P(A)或者P(AB)=P(A∣B)P(B)P(AB) = P(B|A)P(A) 或者P(AB) = P(A|B)P(B)P(AB)=P(BA)P(A)P(AB)=P(AB)P(B) , 所以当以P(AB)为桥梁时,贝叶斯定理就产生了

    P(A∣B)=P(B∣A)P(A)P(B)P(A|B) = \frac {P(B|A)P(A)}{P(B)}P(AB)=P(B)P(BA)P(A)

6.2.3 极大似然估计

为了下面的学习更加顺畅,我们有必要讲述一下概率论中的极大似然估计(最大似然估计)。

最大似然估计原理的思想可以用一个例子来说明。假设由两个外形完全相同的箱子,甲箱有99只白球,1只黑球;乙箱有99只黑球,一只白球。假设现在有个人摸到一颗球拿到你的面前,你大概率认为它是从乙箱拿出来的。

这里我们讲的“大概率”,被人们称为最大似然原理

如果从前面的叙述来看,我们用标准的叙述来表述上面的知识点,最大似然估计在做一件事是:利用已知的样本结果,反推最有可能导致这个结果的参数值。在概率论中,极大似然估计提供了一种给定观察数据来评估模型参数的方法,即模型已定,参数位置。通过若干次实验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大,则称为最大似然估计

6.2.4 多项式分布

多项式分布式二项分布的推广。在这之前,我们先了解一些其他的概念。

6.2.4.1 伯努利分布

伯努利分布又叫0-1分布,指一次随机试验,结果只有两种。这种分布典型的是投一次硬币,预测结果是正是反。

6.2.4.2 二项分布

二项分布为n次伯努利实验的结果。如果我们扔n次硬币,p为硬币朝上的概率,那么扔第k次硬币朝上的概率如下所示:
P(X=k)=Cnkpk(1−p)n−k,k=0,1,2,3,4,...nP(X = k) = C^k_np^k(1-p)^{n-k},k = 0,1,2,3,4,...n P(X=k)=Cnkpk(1p)nk,k=0,1,2,3,4,...n

6.2.5 朴素贝叶斯

下面我们来举个朴素贝叶斯最热门的应用——垃圾邮件过滤器。我们手机上或多或少都收到垃圾邮件过,每个垃圾邮件上面写的是什么:赢钱很容易之类的词,而正常邮件上面写的是什么:你好,你过的怎么样之类的词。而我们要做的,就是拿到一封邮件时,赢钱这类词属于垃圾邮件的概率是多少。如下图:

image-20220307131722456

这里我们根据上面可以看出,垃圾邮件含有容易这个词的概率是三分之一,含有钱这个词的概率是三分之二。我们现在就是根据贝叶斯公式算出含有容易这个词的垃圾邮件出现的概率是二分之一,含有钱这个词垃圾邮件出现的概率是三分之二。

而朴素贝叶斯的“朴素”此时就要体现在这里了。

我们假设“容易”和“钱”是相互独立互不影响的两个词,那么我们可以利用事件的独立性对两个概率相乘。那么我们得出来的概率即为:如果同时含有“容易”和“钱”的两个词,那么这个邮件是垃圾邮件的概率是多少三分之一。

image-20220307131852763

当然,这种想法肯定在数学上是不合逻辑的,但是这样的假设通常能帮我们得到理想的结果,毕竟他还是有一定道理的。即使这种假设是天真、不成立的假设,但是在实践中效果很好,使算法效率变高。

总结一句话就是:朴素贝叶斯实际上等于朴素+贝叶斯,其中朴素是指特征相互独立,而贝叶斯是指贝叶斯公式。朴素贝叶斯常用于文本分类。

6.3 朴素贝叶斯文本分类

6.3.1 一个例子

我们把上述的贝叶斯公式应用于文本分类中,则公式可变为:
P(C∣F1,F2,...)=P(F1,F2,...∣C)P(C)P(F1,F2,...)P(C|F_1,F_2,...) = \frac{P(F_1,F_2,...|C)P(C)}{P(F_1,F_2,...)} P(CF1,F2,...)=P(F1,F2,...)P(F1,F2,...C)P(C)
其中公式可以分为三个部分:

  • P©:每个文档类别的概率(某文档的类别数/总文档数量)
  • P(W|C):给定类别下特征的概率(被预测文档中出现的词)。
    • 计算方法:P(F1)=Ni/N(训练文档中去计算)P(F_1) = N_i/N(训练文档中去计算)P(F1)=Ni/N(),其中NiNiNi为该F1F_1F1词在C类别所有文档中出现的次数,N为所属类别C下的文档所有词出现的次数和。
  • P(F_1,F_2,…):预测文档中每个词的概率

可能以上的公式绕的你眼花缭乱,我们结合例子来看一下。

在下面的例子中我们要做的是这么一件事,在某些特别的分类文档如China类中,它们时常会出现训练集中的词,如Chinese Beijing、Chinese等。但是出现这类词不一定就是China类。而我们要做的,就是在测试集中给出一篇新文章,根据文章中的词来判断该文章属不属于China类。

image-20220308141621554

让我们用贝叶斯公式来计算一下,我们实际上是要计算测试集中该文档的$P = (C|Chinese,Chinese,Chinese,Tokyo,Japan) 和 P(非C|Chinese,Chinese,Chinese,Tokyo,Japan) $,然后比对其大小即可判断该文档是否属于该类别。我们看一下下面的计算过程,如果不是没有笔的情况,我建议你也算一下。

image-20220308143716495

可以看出,最后算出来P(F∣C)P(F|C)P(FC)的概率为0,也就意味着带入贝叶斯公式,P(C∣F)P(C|F)P(CF)的概率也为0,这怎么可能!从测试集中文档含有三个Chinese来看,这篇文档再怎么不济也不可能属于Chinese的概率是0。而之所以概率为0,究其原因是因为样本量太少,没有出现Tokyo和Japan。为了防止这种概率为0的情况发生,我们引入下面的知识点。

6.3.2 拉普拉斯平滑系数

拉普拉斯平滑系数是法国数学家拉普拉斯首先提出来的,是为了解决零概率问题的发生。其基本思想是假定训练样本很大,每个分量x的计数加1造成的估计概率变化可以忽略不计,但是这种操作却可以有效地避免零概率问题。

对于上述6.3.1的文本分类问题,我们可以把拉普拉斯平滑系数改写为如下形式:
P(F1∣C)=Ni+aN+am其中a为指定的系数,一般为1m为训练文档中统计出的特征词个数P(F1|C) = \frac {N_i+a}{N+am} \\其中a为指定的系数,一般为1 \\m为训练文档中统计出的特征词个数 P(F1C)=N+amNi+aa1m
结果拉普拉斯平滑系数这把利剑,让我们再次计算上面的P(F∣C)P(F|C)P(FC)

image-20220308151235031

6.3.3 算法实现

我们要做一个案例来加强我们前面的学习,我们要利用多项式贝叶斯分类器来对新闻组数据集进行分类。分类的步骤如下:

  • 获取数据
  • 划分数据集
  • 特征工程
  • 朴素贝叶斯估计器流程
  • 模型评估

在sklearn中朴素贝叶斯的API为:

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

  • 其中alpha为拉普拉斯平滑系数,浮点数类型

新闻数据集的来源为:

20个新闻组数据集是大约20000个新闻组文档的集合,平均分布在20个不同的新闻组中。它最初是由Ken lang手机的。

数据被组织成20个不同的新闻组,每个新闻组对应不同的主题。

# 导入模块
from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizerdef nb_news():"""导入数据并且处理"""# 获取数据news = fetch_20newsgroups(subset="all")# 2 划分数据集x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, random_state=6)# 3 文本特征抽取transfer = TfidfVectorizer()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4 朴素贝叶斯算法预估器流程estimator = MultinomialNB()estimator.fit(x_train, y_train)# 5 模型评估y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接比对预测值和真实值:\n", y_test == y_predict)# 计算准确率score = estimator.score(x_test, y_test)print("准确率为:\n", score)return Nonenb_news()

6.4 贝叶斯分类器

虽然掌握一个贝叶斯分类器已经很艰难了,但请允许我让你更难受。在下面,我们讲述其余种类的贝叶斯分类器。我们将使用手写数据集为例子进行分类。

6.4.1 多项式贝叶斯分类器

实际上,我们前面用到的贝叶斯分类器是多项式贝叶斯分类器,让我们仔细看一下它。

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

  • 其中alpha为拉普拉斯平滑系数,浮点数类型
  • 多项式贝叶斯分类器实际上假设特征的条件概率符合多项式分布

6.4.2 高斯贝叶斯分类器

sklearn.naive_bayes.GaussianNB

  • 该分类器没有参数
  • 该分类器假设特征的条件概率分布满足高斯分布

6.4.3 伯努利贝叶斯分类器

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

  • alpha:拉普拉斯平滑系数
  • binarize:一个浮点数或者None,如果是None则假定原始数据已经二元化,如果是浮点数则以该数为界,特征取值大于它的作为1,特征取值小于它的作为0
  • fit_prior:布尔值。如果为True,则不去学习P(y=cky = c_ky=ck),替代以均匀分布;如果为false,择取学习P(y=cky = c_ky=ck)
  • class_prior:一个数组。它指定了每个分类的先验概率。如果指定了该参数,则每个分类的先验概率不再从数据集中学得

6.4.4 代码实现

# 导入模块
from sklearn import datasets, naive_bayes
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as pltdef show_digits():"""查看手写数据集内容"""digits = datasets.load_digits()# 构建画布fig = plt.figure()# 输出print("vector from image 0:", digits.data[0])for i in range(25):ax = fig.add_subplot(5, 5, i + 1)ax.imshow(digits.images[i], cmap=plt.cm.gray_r, interpolation='nearest')plt.show()def load_data():"""加载数据集"""digits = datasets.load_digits()return train_test_split(digits.data, digits.target, test_size=0.25, random_state=0)def test_MutinomialNB():"""调用多项式贝叶斯分类器"""digits = datasets.load_digits()x_train, x_test, y_train, y_test = load_data()# 设置转换器estimator = naive_bayes.MultinomialNB()estimator.fit(x_train, y_train)# 模型评估print("MutinomialNB Train Score:\n", estimator.score(x_train, y_train))print("MutinomialNB Test Score:\n", estimator.score(x_test, y_test))def test_GaussianNB():"""调用高斯贝叶斯分类器"""x_train, x_test, y_train, y_test = load_data()# 设置转换器estimator = naive_bayes.GaussianNBestimator.fit(x_train, y_train)# 模型评估print("GaussianNB Train Score:\n", estimator.score(x_train, y_train))print("GaussianNB Test Score:\n", estimator.score(x_test, y_test))def test_BernoulliNB():"""调用伯努利贝叶斯分类器"""x_train, x_test, y_train, y_test = load_data()# 设置转换器estimator = naive_bayes.BernoulliNBestimator.fit(x_train, y_train)# 模型评估print("BernoulliNB Train Score:\n", estimator.score(x_train, y_train))print("BernoulliNB Test Score:\n", estimator.score(x_test, y_test))# 调用函数
# test_MutinomialNB()
# test_GaussianNB()
test_BernoulliNB()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库杂谈(八)——查询优化

文章目录8 查询优化8.1 概述8.2 查询数和语法树8.3 代数优化8.4 物理优化8.5 连接操作优化8.5.1 嵌套循环法8.5.2 利用B树索引或哈希索引寻找匹配元组法8.5.3 散列连接法8.6 后话8 查询优化 8.1 概述 我们不管是在数据库软件如MySQL、SQLServer等,还是通过应用程序…

Android-入门学习笔记-使用 CursorLoader 加载数据

3 使用这个代码片段开始练习 也可以参考 Codepath 教程 高级内容补充: 你是否在思考ArrayAdapter’s 的 getView() 方法和CursorAdapter 的 newView() 和 bindView() 方法? 你可以查看 CursorAdapter 类的源码. getView() 方法依然存在, 但是它实际根据是否存在列表项能够被循…

在 Angularjs 中 ui-sref 和 $state.go 如何传递参数

1 ui-sref、$state.go 的区别 ui-sref 一般使用在 <a>...</a>&#xff1b; <a ui-sref"message-list">消息中心</a> $state.go(someState)一般使用在 controller里面&#xff1b; .controller(firstCtrl, function($scope, $state) {$state.…

机器学习的练功方式(七)——决策树

文章目录致谢7 决策树7.1 认识决策树7.2 决策树原理7.3 信息论7.3.1 信息熵7.3.1.1 熵7.3.1.2 信息7.3.1.3 信息熵7.3.2 信息增益7.4 决策树实现7.5 决策图7.6 后话致谢 信息熵是什么&#xff1f; - 知乎 (zhihu.com) 没有免费午餐定理_百度百科 (baidu.com) 7 决策树 决策树(…

机器学习的练功方式(八)——随机森林

文章目录致谢8 随机森林8.1 引入8.2 决策森林8.2.1 集成学习方法8.2.2 什么是随机森林8.2.3 无偏估计8.2.4 决策森林原理过程8.2.5 决策森林算法实现8.3 总结致谢 如何理解无偏估计&#xff1f;无偏估计有什么用&#xff1f;什么是无偏估计&#xff1f;_司南牧|知乎|博客|易懂教…

并行计算(一)——并行计算机系统及结构模型

致谢 SMP、COW、PVP、MPP计算机相关_神.秘.人的博客-CSDN博客_并行向量处理机 1 并行计算机系统及结构模型 1.1 并行计算 在下面的讲解之前&#xff0c;我们先看一下并行计算的量纲。 1.1.1 并行计算和计算机科学 随着计算机和计算机学科的发展&#xff0c;所有的学科都转向…

【机器学习实战】极大似然法

2019独角兽企业重金招聘Python工程师标准>>> http://baike.baidu.com/link?url3Ej1VIItwWd35sXeoRWRhcJkJLCFvzPzNIoTkAfai8ZIS4Ppcch4_maQ25FjNCU1Eplsp4k3oPKLyv6VIsPhsq 一、 最大似然法是一种具有理论性的点估计法&#xff0c;基本思想是&#xff0c;当从模型…

机器学习的练功方式(九)——线性回归

文章目录致谢9 线性回归再相遇9.1 再遇9.1.1 概述9.1.2 矩阵和向量9.1.3 矩阵加减乘除9.1.3.1 矩阵——矩阵加减9.1.3.2 矩阵——标量加减乘9.1.3.3 矩阵——向量相乘9.1.3.4 矩阵——矩阵相乘9.1.3.5 矩阵的逆9.1.3.6 矩阵的转置9.1.4 向量化9.1.5 广义线性模型9.2 正规方程9.…

12个月份统计分组

/** 根据月份来统计trade里面的入账&#xff0c;支出&#xff0c;总盈利*/public function countMonth(){$in array();$out array();$res array();$year date("Y",time());$in_sql SELECT SUM(money) AS mon, FROM_UNIXTIME(cdate, "%m") AS m FR…

idea 调试技巧1

1 多线程调试 开发过多线程应用的朋友应该有体会&#xff0c;有些时候&#xff0c;为了观察多个线程间变量的不同状态&#xff0c;以及锁的获取等&#xff0c;就会想到在代码里加个断点debug一下。 在IDE里断点停下来的时候&#xff0c;可以切换到另外的线程中&#xff0c;跑其…

SQL server 复习一

第一天 下面我们从最基础的开始&#xff1a; 在运行里面输入:services.msc 一、启动服务 二、数据库登录的两种身份验证方式 另外一种身份验证方式就是SQL Server身份验证. sa不能使用的时候可以这样的操作&#xff1a; 1.用windows登录&#xff0c;然后在“实例”右键“属性”…

[分享]iOS开发-实现view底部控件随着键盘的弹出而上移的效果

首先说一下思路&#xff1a;想要达到底部控件随着键盘的弹出而上移的效果&#xff0c;那么我们必然需要的到键盘在弹出时的高度&#xff0c;以及原点坐标。说白了我们的大致思路就是&#xff0c;用view的高度&#xff0d;键盘弹出时的高度&#xff0c;得到的值就是底部控件与vi…

深度学习修炼(二)——数据集的加载

文章目录致谢2 数据集的加载2.1 框架数据集的加载2.2 自定义数据集2.3 准备数据以进行数据加载器训练致谢 Pytorch自带数据集介绍_godblesstao的博客-CSDN博客_pytorch自带数据集 2 数据集的加载 与sklearn中的datasets自带数据集类似&#xff0c;pytorch框架也为我们提供了数…

Css3之基础-5 Css 背景、渐变属性

一、CSS 背景概述背景属性的作用- 背景样式可以控制 HTML 元素的背景颜色、背景图像等 - 背景色- 设置单一的颜色作为背景- 背景图像- 以图片作为背景- 可以设置图像的位置、平铺、尺寸等二、CSS 背景属性背景色 background-color - 属性用于为元素设置背景色- 接受任何合法的颜…

机器学习的练功方式(十)——岭回归

文章目录十 岭回归10.1 岭回归的接口10.2 岭回归处理房价预测十 岭回归 岭回归是线性回归的改进&#xff0c;有时候迫不得已我们的参数确实不能少&#xff0c;这时候过拟合的现象就可能发生。为了避免过拟合现象的发生&#xff0c;既然不能从减少参数上面下手&#xff0c;那我…

OpenCV修养(一)——引入

文章目录1 引入1.1 OpenCV是啥1.2 OpenCV——Python1 引入 1.1 OpenCV是啥 OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高…

被解放的姜戈08 远走高飞

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 转载请先与我联系。 之前在单机上实现了一个Django服务器&#xff08;被解放的姜戈07 马不停蹄&#xff09;&#xff0c;现在我们可以把这个服务器推上一个云平台。这里我选择使用阿里云。 看着复仇的火焰…

OpenCV修养(二)——OpenCV基本操作

文章目录2 OpenCV基本操作2.1 IO操作2.2 图像基本操作2.2.1 图像绘制2.2.1.1 绘制直线2.2.1.2 绘制圆形2.2.1.3 绘制矩形2.2.1.4 添加文字2.2.1.5 试手2.2.2 获取/修改图像的像素点2.2.3 获取图像属性2.2.4 图像通道拆分/合并2.2.5 色彩空间改变2.2.6 边界填充2.3图像算数操作2…

ylbtech-LanguageSamples-Porperties(属性)

ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Porperties(属性)1.A&#xff0c;示例(Sample) 返回顶部“属性”示例 本示例演示属性为何是 C# 编程语言必不可少的一个组成部分。它演示了如何声明和使用属性。有关更多信息&#xff0c;请参见属性&#xff08;C# 编…

Altium Designer敷铜的规则设定

InPolygon 这个词是铺铜对其他网络的设置,铺铜要离其他网络远点,因为腐蚀不干净会对 电路板有影响... 问题一:: 如下图所示&#xff0c;现在想让敷铜与板子边界也就是keepoutlayer的间距小一点&#xff0c;比如0.2MM。而与走线的间距比较大&#xff0c;比如0.8mm。要怎么设置规…