Blog

三种朴素贝叶斯算法各自适用的场景

Content #

sklearn 的全称叫 Scikit-learn,它给我们提供了 3 个朴素贝叶斯分类算法,分别是高斯朴素贝叶斯(GaussianNB)、多项式朴素贝叶斯(MultinomialNB)和伯努利朴素贝叶斯(BernoulliNB)。这三种算法各自适合应用场景分别是什么?

  1. 高斯朴素贝叶斯特征变量是连续变量,符合高斯分布,比如说人的身高,物体的长度。
  2. 多项式朴素贝叶斯特征变量是离散变量,符合多项分布,在文档分类中特征变量体现在一个单词出现的次数,或者是单词的 TF-IDF 值等。
  3. 伯努利朴素贝叶斯特征变量是布尔变量,符合 0/1 分布,在文档分类中特征是单词是否出现。

From #

F测度

Content #

为了确定查询的有效性,查全率(recall)与查准率(precision)会被组合成为一个简单的值,称为F-测度(F-measure)。F-测度是查全率和查准率的加权调和平均(weighted harmonic mean), \(F_{\beta}\) 是如何定义的?

\begin{displaymath}F_{\beta}=\frac{(\beta^2+1)\cdot R \cdot P}{\beta^2\cdot R+P}\end{displaymath}

From #

偏序关系

Content #

集合X上的关系R满足哪几个条件,就可称为是偏序关系?

自反的、非对称的、传递的。

From #

股东的钱的成本如何衡量

Content #

银行的钱的使用成本就是利息,而我们一般用什么来衡量用股东的钱的成本?

我们可以用行业平均的盈利水平来衡量企业用股东的钱的成本。

From #

鉴别获取者的两种方法

Content #

鉴别获取者有哪两种方法?

  1. 如果能得到声望信息,我们就可以知道人们是如何对待关系网络中的联系人。
  2. 如果我们有机会观察获取者的行为和事迹,我们就能发现炫耀的蛛丝马迹。自我美化的照片、以自我为中心的谈话,以及巨大的收入差距都可以传达出准确可靠的信号,告诉我们某人是一个获取者。

From #

YAGNI原则

Content #

You Ain’t Gonna Need It。

不要去设计当前用不到的功能;不要去编写当前用不到的代码。这条原则的核心思想就是:不要做过度设计。

From #

sgdt

Content #

sgdt(Store Global Descriptor Table Register)

将GDTR寄存器的基地址和边界信息保存到指定的内存位置。比如:

  sgdt [pgdt]
  ;pgdt 初始化了6字节的空间
pgdt            dw  0             ;低2字节用于保存GDT的界限
                dd  0             ;高4字节用于保存GDT的32位物理地址

From #

在GDT中安装一个新的描述符

Content #

  set_up_gdt_descriptor:              ;在GDT内安装一个新的描述符
                                      ;输入:EDX:EAX=描述符
                                      ;输出:CX=描述符的选择子
      push eax
      push ebx
      push edx

      push ds
      push es

      mov ebx,core_data_seg_sel          ;切换到核心数据段
      mov ds,ebx

      sgdt [pgdt]                        ;以便开始处理GDT

      mov ebx,mem_0_4_gb_seg_sel   ;整个0-4GB内存的段的选择子
      mov es,ebx                   ;让ES指向4GB内存段以操作全局描述符表

;计算描述符安装地址。
;1. 先得到描述符表的界限值,将它加1,得到描述符总字节数。
;2. 该总字节数即为新描述符在GDT内的偏移量。
;3. 用GDT的线性地址加上这个偏移量,就是用于安装新描述符的线性地址。
      movzx ebx,word [pgdt]              ;GDT界限
      inc bx                             ;GDT总字节数,也是下一个描述符偏移#
      add ebx,[pgdt+2]                   ;下一个描述符的线性地址
;访问ES指向的4GB内存段,将EDX:EAX中的64位段描述符写入EBX指向的偏移处
      mov [es:ebx],eax
      mov [es:ebx+4],edx

      add word [pgdt],8                  ;增加一个描述符的大小

      lgdt [pgdt]                        ;对GDT的更改生效
;根据GDT新界限值,来生成相应的段选择子。
;界限值会比GDT总字节数小1,因此界限除以8(丢掉余数7)后的商即为描述符索引号。
      mov ax,[pgdt]                      ;得到GDT界限值
      xor dx,dx
      mov bx,8
      div bx                             ;除以8,去掉余数
      mov cx,ax
      shl cx,3                           ;左移3次,留出TI位和RPL位

      pop es
      pop ds

      pop edx
      pop ebx
      pop eax

      retf

如果这是启动计算机以来,第一次在GDT 中安装描述符,两种写法会有区别。

在初始状态下,也就是计算机启动之后,这时还没有使用GDT,GDTR 寄存器中的基地址为0x00000000,界限为0xFFFF。

当GDTR 寄存器的界限部分是0xFFFF 时,表明GDT 中还没有描述符。因此,将此值加1,结果是0x10000,由于该寄存器的界限部分只有16 位,所以只能容纳16 位的结果,即0x0000,这就是第一个描述符在表内的偏移量。

...

调用门的特权级检查

Content #

调用门描述符中的DPL 和目标代码段描述符的DPL 用于决定哪些特权级的程序可以访问此门。具体的规则是必须同时符合以下两个条件才行:

  1. 当前特权级CPL 和请求特权级RPL 高于,或者和调用门描述符特权级DPL 相同。即,在数值上 CPL <= 调用门描述符的DPL RPL <= 调用门描述符的DPL
  2. 当前特权级CPL 低于,或者和目标代码段描述符特权级DPL 相同。即,在数值上 CPL >= 目标代码段描述符的DPL

举个例子,如果调用门描述符的DPL 为2,那么,只有特权级为0、1 和2 的程序才允许使用该调用门,特权级为3 的程序使用此门将引发处理器异常中断。

调用门的DPL 是特权级检查的下限。目标代码段的DPL是特权级检查的上限。

From #

不同的材料要用不同的阅读方法

Content #

学习高效速读不仅是要加快阅读的速度,你还将学习一种全新的阅读方式。当人们问我的阅读速度有多快时,我不能用简单几个字来回复。这就好比问司机开车有多快,司机可能回答说,那得看车的状况、道路、天气、交通以及对路线的熟悉程度,还可能取决于是否急着赶往目的地。就像司机所说,高效的读者会根据材料的难度、读物的组织结构、对题材的熟悉度以及阅读目的来决定阅读的快慢。因此,不要读任何材料都用一种方法。从开始的逐字逐句阅读到最后,你将学到许多不同的阅读方法以及在阅读时如何适应具体的目的。

From #