Fork me on GitHub
随机森林介绍

随机森林介绍

 

渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(2)

  前情回顾:在上一篇,我们开始了Unix系统的一些了解,另外,还介绍了一些学习方法和小贴士,希望对自己和对大家都有帮助。

  将近一个月前,决定一天写一篇博客,坚持三十天。说实在的,到现在应该是到尾声了吧,回想起之前的大半个月,有点难以想象,没想到自己还真的能坚持下来。

  本来写博客的目的是为了复习,为了更好地找工作,从我这一系列的标题就可以看出来。可是写到这个地步,主要的原因已经不是因为那些东西了,更多的是自己写得开心,在这个过程中享受到了乐趣和取得了成就感。特别谢谢那些给我评论留言的朋友,没有你们,我坚持不到现在。  

——————————————————————————闲聊结束———————————————————————————

  第三章:用户和组

  在介绍用户和组之前,我们先来了解一下,如何关闭系统。

  第一节:关闭系统与使用帮助页

  Unix是一个多用户、多任务操作系统,所以总是会有很多进程在运行。因为需要同步文件系统以及保存设置修改等,所以直接关闭电源会使文件系统出现问题并影响系统的稳定性,这样不正常的关机往往会导致这样或那样的问题。

  通过命令行正确关闭Unix系统最一致的方式就是用下列命令中的一个:

halt:理解关闭系统

init 0:使用预定义的脚本切断系统的电源,以便在关机前同步数据并整理系统(不是在所有Unix系统上都可以使用这种方法)

init 6:通过将系统完全关闭,然后将它完全恢复来重新启动系统(不通用)

poweroff:通过切断电源来关闭系统

reboot:重新启动系统

shutdown:关闭系统

  首选的方法肯定是使用shutdown命令,所有Unix系统上都可以使用这种方法。它使用系统提供的脚本进行正确的关闭,并且具有其他命令的大部分功能。下面,我们来试试。我在Virtual Box上用装的虚拟机,系统是Ubuntu,版本是12.04.

  咦,怎么不开始关闭系统啊?提示说,需要时间。需要时间是什么意思?下面一句,试试shutdown --help指令获取更多的信息。我来试试先!

  果然,输入了刚才提示的那条指令之后,就出现如上图的帮助信息。建议大家去试试,一般我都是用shutdown now关机的。这个就不示范了,懒得等会又要重新启动系统。

  从刚才这条简单的关闭系统命令就可以想到,Unix命令总是会有多个参数或选项,使得相同的命令具有各种各样的功能。因为不大可能有人记住所有的Unix命令和相应的命令选项,所以从Unix的早期开始,就一直有联机帮助。Unix的帮助文件称为联机帮助页(man pages)。联机帮助页(manual page)用一种任何用户都可读的标准格式提供联机文档,并且以一种统一的、合理的方式进行安装。可以简单地按照下面的语法使用这条命令:

man command

  如果想了解某条命令的更多信息,就可以用这条命令的名称作为command参数。例如,我们现在要查看ls这条命令的联机帮助页,如下图

  看到上面的联机帮助页,明显看出分为不同的部分。下面介绍一些比较常见的——

NAME:命令的名称

SYNOPISIS:命令的常用参数

DESCRIPTION:命令的一般性描述以及它的作用

OPTIONS:描述命令所有的参数或选项

SEE ALSO:列出联机帮助页中与该命令直接相关或功能相近的其他命令

BUGS:解释命令或它的输出中存在任何已知的问题或缺陷

EXAMPLES(或TIPS):普通的用法示例,让读者知道如何使用这条命令

AUTHORS:联机帮助页/命令的作者

  用户有时候可能只记得某条命令名的一部分或者命令中所包含的的一个要点,我们可以利用-k选项在联机帮助页中搜索,该选项在联机帮助页中寻找关键字。例如,我们需要修改文件的权限,但是忘记了要使用什么命令,我们可以输入man -k permission,效果如下图:

  当需要了解Linux系统中的命令或文件的相关信息时,联机帮助页是一个至关重要的资源和首要的研究手段,是我们play unix必须要掌握的东西。从今天开始,成为一个靠自己的人,不做伸手党!

  第二节:账户基础知识

  Unix系统上主要有三种类型的账户:根用户(或超级用户)账户、系统账户以及普通用户账户。下面,我们会对三种账户简单地一一说明。

根账户:根账户的用户能够完全地、不受约束地控制系统,以至于可以运行命令来完全破坏系统。根能够在系统上进行任何操作,可以不受任何限制地访问、  删除和修改文件。因此,我们应该只用根用于最重要的任务,而且只在必要的时候才使用它,并且需要非常谨慎。

 

系统账户:系统账户是对系统特定组件进行操作所需的那类账户。例如,它们包括邮件账户(用于电子邮件功能)和sshd账户(用于ssh功能)。系统账户通常由操作系统在安装过程中提供或者由软件制造商(包括内部开发商)提供。他们通常协助用户所需的服务或程序。

 

 用户账户:用户账户为用户和用户组提供对系统的交互式访问。普通用户通常都配以这类账户并且对关键系统文件和目录的访问权限是有限的。通常在一个账户名中希望使用8个或更少的字符,但是现在所有的Unix系统都不再有这个要求。然而,考虑到与其他Unix系统和服务的互操作性,最好还是限制账户名在8个字符以内。

 

组账户:组账户增加了一种功能,这种功能可以将其他账户集中在一起组成一个逻辑排列,从而简化权限管理。Unix权限作用于文件和目录上,并分别控制三类用户的权限:文件的所有者,也称为用户;指派给文件的组,也简称为组;在系统上拥有合法注册但既不是所有者也不属于组的人,也称为其他(others)。组的存在使得资源或文件的所有者能够授予一类用户访问文件的权力。组的一个强大之处在于,基于访问需求,一个账户可以属于多个组。

 

  第三节:管理用户和组

  管理用户的信息,会记录在系统上的用户管理文件里,主要有以下三个:

/etc/passwd——保存了系统识别已授权的账户。

/etc/shadow——保存相应账户加密后的口令。大多数Unix系统都有这个文件。

/etc/group——存放组账户的信息。

  首先,我们来看看/etc/passwd这个管理文件,该文件保存了Unix系统上与账户相关的大部分信息。几乎在系统上拥有账户的任何人都可以查看这个文件,但是只有根用户才能修改它。看看这个文件的内容:

  每一条记录的每一部分,都会用冒号分开。分别是用户名、加密的口令或x、UID(用户ID号)、默认UID(组ID)、GCOS(或注释)、账户启动的位置或主目录(用于存储个人文件)、用户的登录shell。对应上图最后一条记录,我们可以得知这些信息:用户名是levenyes,由于使用隐式口令所以只含有一个x,UID和默认UID都是1000,注释就只有levnyes(一般会添加一些联系信息或职位等内容),账户启动的位置是/home/levenyes,登录shell为/bin/bash。

  接下来,我们再简单了解一下两个文件的作用。

/etc/shadow——该文件包含已加密的本地用户的口令记录以及所有口令的期限(说明口令过期的时间)或限制。

/etc/group——该文件包含每个账户的组信息。

  建议大家都打开这些文件看看,了解每个字段都是什么意思。这里就不一一介绍了。

  第四节:管理账户和组

  刚才了解了几个账户管理文件,那么,如果我们要手动添加或删除一个账户,大概很多人都会想到修改文件:

  1. 修改/etc/passwd以添加或删除账户行
  2. 修改/etc/shadow以添加或删除账户行
  3. 修改/etc/group以添加或删除账户引用
  4. 添加或删除账户的主目录

  可是,这样一个一个文件去修改内容,很可能因为输入错误或者其他误操作而造成不可预料的后果。因此,我们应该尽量使用一些命令来进行管理账户和组的操作,当然啦,这些命令要想运行,必须以根用户的身份登录。

  useradd:向系统中添加账户    

  usermod:修改账户属性

  userdel:向系统中删除账户

  groupadd:向系统中添加组

  groupmod:修改组的属性

  groupdel:从系统中删除组

  下面,我们来看看useradd这条命令的用法:

  具体的创建用户的过程在这里也就不贴出来了,有兴趣的童鞋还是自己动手实验实验比较好。这些指令的作用就是会帮助我们修改或创建相应的文件和目录,免去我们一一操作的麻烦和误操作的危险性。

  最后介绍几个命令——who:显示当前登录在系统上的用户;whoami显示当前作为哪一个用户登录,而who am i显示最初作为哪一个用户登录到系统。

 

  今天的内容就到这里,明天会跟大家一起了解Unix下的文件系统,可能还会有一些其他的内容,敬请期待。

 

——————————————————————————倒数第六天————————————————————————

  今天发了条微博:有一种状态,叫做看得进书。

 

1.最近找工作的事情,说顺利也顺利,说不顺利也不顺利。笔试面试偶尔会有而且表现还可以,不过还没有确定的去向。

 

2.不过状态是越来越好了,每天看东西写博客,也越来越顺畅。

 

3.港剧里面常常会有这么一句话:做人呢,最紧要的是开心。我深以为然。就像我昨天说的那样,just for fun,just for play。学东西最好是要有趣,play database,play java programming,play linux。希望大家都能够从学习中工作中多乐一点,少苦一些。

前面的一篇博客:分类算法之决策树 介绍了决策树算法,从介绍中可以发现,决策树有些与生俱来的缺点:

1:分类规则复杂

决策树算法在产生规则的时候采用局部贪婪法。每次都只选择一个属性进行分析构造决策树,所以再产生的分类规则往往相当复杂。

2:收敛到非全局的局部最优解

ID3算法每次在树的某个层次进行属性选择时,它不再回溯重新考虑这个选择,所以它容易产生盲人登山中常见的风险,仅仅收敛到非全局的局部最优解。

3:过度拟合

在决策树学习中,由于分类器过于复杂,它可能会过于适应噪声,从而导致过度拟合问题。

 

为了克服以上的缺点,引入了另外一个预测模型-----随机森林

 

一:森林思想

单个的决策树可以按照一定的精度分类,为了提高精度,一种比较容易想到的方法就是种植一片森林,并让所有的树都参加投票,选出投票最多的分类标签。

下面举例说明:

我们根据历史数据建立起了一片由决策树组成的森林,下面我们要根据某个用户的特征来分析他是否会购买某件商品,分类标签只有两类:yes no。

假设100棵决策树中有90棵树给它贴的标签为yes,10棵给它贴的标签为no,那我们最后就选择标签yes.这样就避免了一棵树说了算的局面。

 

二:随机思想

随机森林的随机体现在它的每棵决策树的构造过程

随机森林的构造方法有很多,下面以bagging方法举例:

1:假设原始样本数为N,用bootstrap方法从N样本中获取构造每棵决策树的训练集。

bootstrap方法的实质就是一种自助法,一种非参数统计的方法:对观察的信息(这里指原始的样本)进行N次随机的可重复的采样,以此来获取构造每棵决策树的训练集。Bootstrap充分利用了给定的观测信息,不需要模型、其他假设和增加新的观测,并有稳定性和效率高的特点。

2:如果样本信息有M个属性,每次随机的从M个属性中选择m个属性来进行建树(建树过程跟普通决策树过程一样),其中m<<M.

3:这样每棵树的叶子节点,要么是无法继续分裂,要么里面的所有样本都指向同一个分类标签。

有了上面的随机性,这样建立起来的每一棵决策树都不会出现过度拟合的现象,也不需要裁枝处理。

小结:这样每一棵决策树就是一位精通某一领域(m个features)的专家,在随机森林中就有了很多精通不同领域的专家,对一个新问题,可以从不同的角度来观察,最终由各个专家,投票得到结果。

 

三:随机森林的特征

1:在现有算法中,随机森林算法的精度是无可比拟的。

2:随机森林能够高效处理大数据集。

3:随机森林可以处理成千上万的输入属性。

4:随机森林在分类的应用中可以计算出不同变量属性的重要性。

5:在构建随机森林的过程中可以产生一个关于泛化误差的内部无偏估计。

6:当大量数据缺失的时候,随机森林有高效的方法来估计缺失的数据并保持着准确率。

7:在不平衡的数据集中,它含有平衡误差的方法。

8:已经生成的随机森林可以保存下来方便解决以后的问题。

9:Prototypes的计算可以给出属性变量本身和分类的相关性。

10:计算样本实例之间的Proximities,可以用来聚类分析、异常分析、或者数据的其他有趣的视图。

上述能力可以拓展为无标签类数据,导出无监督聚类方法及数据视图和异常点检测。

 

随机森林在机器学习领域中的应用还是很多的,所以接下来得弄清楚,它背后的数学基础和各个特征的具体实现并用一些数据来感觉下它的强大。

继续记录自己的学习过程,方便以后的复习~come on~

 
 
 
posted on 2013-11-12 23:18  HackerVirus  阅读(1291)  评论(0编辑  收藏  举报