Logistic回归算法 本文介绍机器学习中的Logistic回归算法,我们使用这个算法来给数据进行分类。Logistic回归算法同样是需要通过样本空间学习的监督学习算法,并且适用于数值型和标称型数据,例如,我们需要根据输入数据的特征值(数值型)的大小来判断数据是某种分类或者不是某种分类。 一、样本数据 在我们的例子中,我们有这样一些样本数据: - 样本数据有3个特征值:
朴素贝叶斯分类算法是机器学习领域最基本的几种算法之一。但是对于作者这样没有什么数据基础的老码农来说,理解起来确实有一些困难。所以撰写此文帮助自己理解算法,同时也希望对同样在机器学习起跑线上的同仁有所帮助。
开篇我们就不对所涉及的技术要求做说明了,假设您具备高中数学的基础,或者像作者一样,还能回忆起一些数学基础知识,对python语言基础有一定的了解,那么您在阅读本文时就不会有任何困难。
另外,本文参考了《机器学习实战》中第四章《基于概率论的分类方法:朴素贝叶斯》中的内容。这里向作者致以崇高的敬意。
本文作者关于机器学习也是刚开始入门,所以相关领域的大牛们可以忽略本文。如果文中理解有误,还请大家斧正。作者邮箱:holynull@126.com
这里我们使用一个例子来一步一步分析,并用python来实现分类算法。
我们假设在某网站的评论区中,我们需要实现对用户的评论进行分类。简单来说,一类为合法的评论,一类为存在不文明用语的评论。我们的问题是,现在管理员工作压力很大,每天要处理数以千计或者数以万计的评论分类,那么我们如何来帮助他们呢?
第一个想到的方法肯定是让机器能够通过评论的内容,自动对评论进行分类。听起来很美,但是实现起来貌似没那么简单。那么接下来,我们来看一下这个最好的但貌似并不简单的想法怎么来实现呢?
我们将管理员之前的分类数据提取出来。然后再将我们关心的数据清洗出来,做为我们研究解决方案的样本数据。我们可以将每一条评论中的单词全部提取出来,用来观察这些单词的组合和分类的关系,我们创建一个数组postingList
如下:
postingList = [
['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'
$ \bigcup $
: 并$ - $
: 差$ * $
: 笛卡尔积$ \sigma $
: 投影$ \pi $
: 选择$ \bigcap $
: 交 $ \theta $
: 等值链接$ \bowtie $
: 自然链接$ \div $
: 除法注意 |
---|
1.等值连接表示先做笛卡尔积之后,对相应的列进行选择,或者等值关联;仅筛选行,不筛选列。 |
2.自然连接表示两个关系中若有相同的名称的属性,则自动作为关联条件,且仅列出一列。 |
例如:
给定学生S(学号,姓名,年龄,入学时间,联系方式)和选课SC(学号,课程号,成绩)关系,若要查询选修了1号课程的学生的学号、姓名和成绩,则该查询与关系代数表达式为什么?
\pi_{1,2,7}(\sigma_{6='1'}(S \bowtie SC))
首先,我们需要将两个关系S和SC做自然连接$(S \bowtie SC)$
。这样一来,我们得到关系R(学号,姓名,年龄,入学时间,联系方式,课程号,成绩)。注意,我们采用自然链接那么“学号”只保留1列,就剩下7个属性。接下来,我们要选择课程号为1的记录,所以$ \sigma_{6='1'}(S \bowtie SC)$
。注意,这里第6列为课程号,所以$ \sigma_{6='1'} $
。最后,我们选取第1、2、7列属性,得到最终表达式为$\pi_{1,2,7}(\sigma_{6='1'}(S \bowtie SC))$
要了解操作系统的存储管理,我们首先需要明确这里的存储是指的什么?那么,这里的“存储”是指,计算机的内存和外存(比如:硬盘)。目前,大多数的操作系统都采用虚拟存储器的方式来管理存储。所谓虚拟存储技术,即在内存中保留一部分程序和数据,在外存中放置整个地址空间的副本。就是说程序的大部分数据和可执行程序都放在外存上。程序运行时可以访问内存中的数据和程序,如果要访问的程序和数据不在内存中时,就将之前内存中的程序和数据回写到外存,然后从外存中调入所需的程序和数据。
单一连续分区、固定分区、可变分区和可重定位分区,这些存储的组织方式不能实现虚拟存储管理。页式、段式和页段式才是虚拟存储的管理方式。我们这里主要讨论虚拟存储的管理中的地址变换问题。
我们来假设我们的一个程序以及它运行起来需要的数据一共是1K bit大小。而我们的内存只有512bit。那么我们可以看做虚拟存储大小为1Kbit。即,我们将程序和程序执行的数据整体看做是虚拟存储。那么,虚拟存储的容量是允许大于内存的容量的,也就是所说的虚拟存储的地址范围是可以大于内存的地址范围的。(在非虚拟存储的一些操作系统中,是不允许作业的大小超过内存容量的,因为作业是一次性装载入内存的。)因为,实际运行过程只有一部分程序和数据存放在内存上,大部分存放在外存上。程序运行过程中,程序和数据在操作系统的管理下,在内存和外存之间进行不断的交换。
我们把内存中的实际地址叫做物理地址,而虚拟存储中的地址叫做逻辑地址。也就是说逻辑地址的范围是允许大于物理地址的范围的。那么,如果按照逻辑地址在内存中寻址,就会产生错误。这怎么办?幸运的是计算机硬件会在存储管理的过程中,帮我们把逻辑地址转换成物理地址。
页式存储是将虚拟存储的数据按页分割。然后在内存中按照虚拟存储中页的大小,开辟与页数相同的区。再在内存中创建一个页表。页表中记录虚拟存储的页号和一页开始的物理地址。最后,在控制寄存器中记录页表的长度和页表的物理地址。那么,页式管理的逻辑地址就由页号和页内偏移(即页内存储块的序号)组成。
页号 | 页内偏 |
---|