人工智能创新实验教程 课件全套 第1-16章 实验环境搭建、python基础- 循环神经网络_第1页
人工智能创新实验教程 课件全套 第1-16章 实验环境搭建、python基础- 循环神经网络_第2页
人工智能创新实验教程 课件全套 第1-16章 实验环境搭建、python基础- 循环神经网络_第3页
人工智能创新实验教程 课件全套 第1-16章 实验环境搭建、python基础- 循环神经网络_第4页
人工智能创新实验教程 课件全套 第1-16章 实验环境搭建、python基础- 循环神经网络_第5页
已阅读5页,还剩492页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

宁夏大学第一章实验环境搭建实验环境搭建2目录

CONTENT04030201Anaconda安装PyCharm安装包的安装框架搭建Anaconda安装01Anaconda简介4

Anaconda可以便捷获取包且对包能够进行管理,同时对环境进行统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。Anaconda具有如下特点:开源安装过程简单高性能使用Python和R语言免费的社区支持Anaconda安装步骤51、官网下载安装文件2、安装anaconda第一步:直接点击开始安装。一般来说,大家的电脑只有一个账户,默认选择Justme,如果你的电脑有多个账户,那就选择AllUsers。第二步:自行选择安装路径。第三步:不需要勾线第一个,有些教程中建议勾选,但这样容易出现污染环境变量等各种小问题,为了保险起见,还是不勾选这个,后续进行人工设置。第四步:接下来就是等待,直到安装成功。Anaconda安装步骤63、配置环境变量我的电脑→属性→高级系统设置→环境变量→系统变量中的Path4、新建环境变量编辑环境变量→新建→添加以下内容格式为:安装的盘+你的文件夹名称+后面不变的内容。例如: E:\anaconda3 E:\anaconda3\Scripts E:\anaconda3\Library\mingw-w64\bin E:\anaconda3\Library\usr\bin E:\anaconda3\Library\binAnaconda安装测试75、测试是否安装成功第一步:点击进入AnacondaNavigator,观察能否能够顺利进入这个页面(反应时间可能较长)。第二步:点击AnacondaPrompt→输入condainfo,观察是否也输出一堆数据输入conda——version,观察是否输出版本号第三步:写个程序,熟悉一下界面。在Spyder编辑器中输入print('helloworld')F5运行,观察是否输出helloworldPyCnarm安装02PyCharm简介9PyCharm是一种PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。编码协助:其提供了一个带编码补全,代码片段,支持代码折叠和分割窗口的智能、可配置的编辑器。项目代码导航:该IDE可帮助用户即时从一个文件导航至另一个,从一个方法至其申明或者用法甚至可以穿过类的层次。代码分析:用户可使用其编码语法,错误高亮,智能检测以及一键式代码快速补全建议,使得编码更优化。Python重构:有了该功能,用户便能在项目范围内轻松进行重命名,提取方法/超类,导入域/变量/常量,移动和前推/后退重构。集成的单元测试:用户可以在一个文件夹运行一个测试文件,单个测试类,一个方法或者所有测试项目。PyCharm安装101.下载Pycharm打开官网,下载时有两种版本选择Professional(专业版,收费)和Community(社区版,免费)2、开始安装Pycharm第一步,直接点击Next。第二步,如果要修改安装路径,可更改。第三步,需要进行一些设置,没有特殊需要按照图中勾选即可:第四步,默认即可,点击install。3、配置Pycharm首次启动pycharm,会弹出配置窗口,如果你之前使用过pycharm并有相关的配置文件,请选择;如果没有,默认即可。同意用户使用协议,确定是否需要进行数据共享,可以直接选择Don'tsend。选择主题,左边为黑色主题,右边为白色主题,根据需要选择。4、激活账号使用学校账号进行激活。PyCharm安装115、创建项目首先随便创建一个项目,点击NewProject。选择你的项目创建路径和本地Python解释器。最后点击create6、创建Python文件在项目名称的位置点击鼠标右键,选择New>PythonFile输入文件名称,点击OK即可。在文件中输入代码,然后在文件中任意空白位置点击鼠标右键,运行。在界面的下方,显示Python代码的运行结果。包的安装03包的安装03包的安装14Pythonpip安装与使用pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。pip最常用命令NumPy安装15NumPy(NumericalPython)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nestedliststructure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。使用pip安装安装NumPy最简单的方法就是使用

pip工具:pip3install--usernumpyscipymatplotlib默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以:pip3installnumpyscipymatplotlib-i/simple测试是否安装成功:>>>fromnumpyimport*>>>eye(4)Matplotlib安装16Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。我们使用pip工具来安装Matplotlib库以下实例,我们通过导入matplotlib库,然后查看matplotlib库的版本号:实例importmatplotlib print(matplotlib.__version__)执行以上代码,输出结果如下:Pandas安装17Pandas是python的一个数据分析包。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。Pandas的名称来自于面板数据(paneldata)和python数据分析(dataanalysis)。paneldata是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。使用pip安装pandas:pipinstallpandas安装成功后,我们就可以导入pandas包使用:importpandas实例-查看pandas版本>>>

import

pandas >>>

pandas.__version__

#查看版本导入pandas一般使用别名

pd

来代替:importpandasaspd执行以上代码,输出结果为:框架搭建04框架搭建19在开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用。研究者们使用各种不同的框架来达到他们的研究目的,侧面印证出深度学习领域百花齐放。全世界最为流行的深度学习框架有Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。本节在这里只做CPU版本的框架搭建,GPU版本需要安装CUDA和cuDNN

,才能使用命令搭建框架。Pytorch安装20PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络。优点:PyTorch是相当简洁且高效快速的框架;设计追求最少的封装;设计符合人类思维,它让用户尽可能地专注于实现自己的想法;与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;PyTorch作者亲自维护的论坛供用户交流和求教问题;入门简单。安装前准备:添加镜像源添加完毕后,运行下面这段代码查看镜像源是否设置成功:condaconfig--show如果在channels下方可以查看到我们添加的镜像源,那就是设置成功了。Pytorch安装213、进入百度/进入PyTorch官网,点击GetStarted,进入后如下选择:1.在Win10下配置PyTorch(CPU版)打开cmd,输入以下代码查看当前环境:condainfo-e运行结果如下所示:2、可以看到当前环境只有一个base环境,然后输入命令安装一个python:condacreate-ntorchpython=3.9版本可以自己选择,遇到选择Y/N的,一律选择Y就行。安装完成后,输入下行命令进入环境。condaactivatetorch4、选择完成后,将代码复制粘贴到cmd命令中:condainstallpytorchtorchvisiontorchaudiocpuonly-cpytorchtensorflow安装22Google开源的Tensorflow是一款使用C++语言开发的开源数学计算软件,使用数据流图(DataFlowGraph)的形式进行计算。ensorflow最初是由研究人员和GoogleBrain团队针对机器学习和深度神经网络进行研究而开发,开源之后几乎可以在各个领域适用。Tensorflow是全世界使用人数最多、社区最为庞大的一个框架,因为Google公司出品,所以维护与更新比较频繁,并且有着Python和C++的接口,教程也非常完善,同时很多论文复现的第一个版本都是基于Tensorflow写的,所以是深度学习界框架默认的老大。1、安装tensorflow环境创建并安装tensorflow环境启动anacondaprompt,单击启动anaconda命令行。使用如下命令将下载源恢复为默认源:condaconfig--remove-keychannels将conda更新为最新版本。使用如下命令进行更新:condaupdate-nbaseconda创建tensorflow-cpu虚拟环境。tensorflow-cpu为环境名称,可自行更改,创建命令如下:condacreate-ntensorflow-cputensorflow安装23登入tensorflow-cpu环境。使用如下命令登录所创建的环境,最前面括号内的内容就是当前所在环境的名称:condaactivatetensorflow-cpu2、设置pycharm为tensorflow运行IDE。打开pycharm,点击菜单"File/Settings"。按图中所示左边目录,找到”projectInterpreter",在右上角,点击“Add"在弹出的对话框中,左边选择”SystemInterpreter",在右上边框中按如图方式,打开解释器选择菜单。在弹出的对话框中,选择anaconda的安装位置,在envs/tensorflow-cpu/Tools"目录下,选择python.exe作为解释器即可。3、测试tensorflow是否安装成功www.islide.cc感谢观看!第二章python基础26目录

CONTENT0504030201python简介数据类型运算符数据的组织结构循环06列表27目录

CONTENT0908字典函数文件操作07python简介01python简介29Python是一种跨平台的计算机程序设计语言,是人机之间交流的工具。Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Texthere特点1342交互式语言Python是交互式语言:

这意味着,您可以在一个Python提示符>>>后直接执行代码。面向对象语言

Python是面向对象语言:这意味着Python支持面向对象的风格或代码封装在对象的编程技术。可读性Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。解释性语言Python是一种解释型语言:

这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。python中的输出函数30print()函数Python里面有一个你可以直接使用的函数print(),可以将您想展示的东西在idle或标准的控制台上显示。Print函数的输出形式1、换行2、不换行print函数的使用print函数可以输出哪些内容?1、print()函数输出的内容可以是数字;2、print()函数输出的内容可以是字符;3、print()函数输出的内容可以是含有运算符的表达式。print函数可以将内容输出的目的地:1、显示器2、文件转义字符31什么是转义字符呢?就是反斜杠+想要实现的转移功能首字母。为什么需要转义字符?

当字符串中包含反斜杠,单引号和双引号等特殊用途的字符时,必须使用反斜杠对这些字符进行转移(转换一个含义)。

反斜杠:\\

单引号:\’

双引号:\”

当字符串中包含换行、回车、水平制表符或退格等无法直接表示的特殊字符时,也可以使用转义字符。

换行:\n

回车:\r

水平制表符:\t

退格:\b数据类型02标识符与保留字33标识符

标识符就是程序中,使用的各种名称,例如:变量名、常量名、类名等等。在Python中,对标识符格式的要求与C/C++、Java等差不多,变量、函数、类、模块和其他对象的起的名字就叫标识符。

第一个字符必须是字母表中的字母或下划线_;

标识符的其他的部分,由字母、数字和下划线组成;

标识符对大小写敏感;

标识符不能与保留字(关键词)相同。比如:但都是不正确的标识符。保留字

保留字即关键字,是Python语言中内部使用的单词被赋予了特定的意义,这些单词对任何对象起名学的时候都不能用。例如:and、class、if、else

importkeyword

print(keyword.kwlist)列出了Python3的所有保留字:变量34变量是内存中一个带标签的盒子。变量变量由三部分组成:

标识:表示对象所存储的内存地址,使用内置函数id(obj)来获取;

类型:表示函数是对象的数据类型,使用内置函数type(obj)来获取;

值:表示对象所存储的具体数值使用print(obj),可以将值进行打印输出。举例数据类型35常用的数据类型

整数类型→int→98

浮点数类型->float→3.14159

布尔类型→bool→True,False

字符串类型→str→‘人生苦短,我用Python’整数类型

英文为integer,简写为int.可以表示正数、负数和零。整数的不同进制表示方式:

十进制是默认的进制

二进制→以0b开头

八进制→以0o开头

十六进制→0x开头浮点类型

浮点数整数部分和小数部分组成。

浮点数存储不精确性:

使用浮点数进行计算时,可能会出现小数位数不确定的情况:解决方案:

导入模块decmal:布尔类型

用来表示真或假的值。

True表示真,False表示假。

布尔值可以转化为整数:

·true→1

·false→0

字符串类型

字符串又被称为不可变的字符序列。

可以使用单引号’’双引号""三引号’’’‘’’或““”””来定义;

单引号和双引号定义的字符串必须在一行;

三引号定义的字符串可以分布在连续的多行。python中的注释36

在代码中对代码的功能进行解释说明的标注性文字,可以提高代码的可读性。注释的内容会被Python解释器忽略。通常包括三种类型的注释:

单行注释→以"#"开头,直到换行结束;

多行注程→并没有单独的多行注释标记,将-对三引号之间的代码称为多行注释;

中文编码声明注释→在文件开头加上中文声明注释,用以指定源码文件的编码格式。

如#coding:gbk运算符03python中的运算符38运算符功能说明+算术加法,列表、元组、字符串合并与连接,正号-算术减法,集合差集,相反数*算术乘法,序列重复/真除法//求整商,但如果操作数中有实数的话,结果为实数形式的整数%求余数,字符串格式化**幂运算<、<=、>、>=、==、!=(值)大小比较,集合的包含关系比较or逻辑或and逻辑与not逻辑非in成员测试is对象同一性测试,即测试是否为同一个对象或内存地址是否相同|、^、&、<<、>>、~位或、位异或、位与、左移位、右移位、位求反&、|、^集合交集、并集、对称差集@矩阵相乘运算符运算符的优先级39算数运算符>位运算符>比较运算符>布尔运算符>赋值运算符例如:运行结果:数据组织结构04程序的组织结构41

1996年,计算机科学家证明了这样的事实:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。顺序结构:程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束。循环结构:

反复做同一件事情的情况,称为循环。选择结构:程序根据判断条件的布尔值选择性地执行部分代码。对象的布尔值42Python一切皆对象,所有对象都有一个布尔值。获取对象的布尔值:

使用内置函数bool()以下对象的布尔值为False,其他均为true:False数值0None空字符串空列表空元组空字典空集合分支结构43选择结构可以分为:单分支结构、双分支结构、多分支结构和嵌套if。单分支结构

中文语义:如果……就……语法结构: if条件表达式

条件执行体双分支结构:

中文语义:如..使满

语法结构:.

if条件表达式:

条件执行体1

else:

条件执行体2分支结构44多分支结构:嵌套if:pass空语句45pass语句:

语句什么都不做,只是一个占位符,用在语法上需要语句的地方。什么时候使用?先搭建语法结构,还没想好代码怎么写的时候。哪些语句一起使用?语句的条件执行体for-in语句的循环停定义函数时的函数体05循环while()循环47反复做同一件事情的情况,称为循环。循环结构的流程图:

循环的分类:

while

for-in语法结构:While循环的执行流程四部循环法:

初始化变量

条件判断

条件执行体(循环体)

改变变量for-in

循环48for-in循环

in表达从(字符串、序列等)中依次取值,又称为遍历。

for-in遍历的对象必须是可迭代对象。for-in的语法结构

for自定义的变量

in可迭代对象

循环体for-in示例for-in的执行图break、continue语句49流程控制语句break

用于结束循环结构,通常与分支结构if一起使用。流程控制语句continue

用于结束当前循环,进入下一次循环,通常与分支结构中的if一起使用。06列表列表的创建与删除51为什么需要列表?

变量可以存储一个元素,而列表是一个大容器”可以存储N多个元素,程序可以方便地对这些数据进行整体操作。

列表相当于其它语言中的数组。列表的特点:

获取列表中指定元素的索引:获取列表中的单个元素:列表的查询操作52获取列表中的多个元素:

语法格式:

列表名[start:stop:step]判断指定元素在列表中是否存在:列表元素的遍历:列表元素的增、删、改操作53增加操作:删除操作:修改操作:

为指定索引的元素赋予一个新值,或为指定的切片赋予一个新值。列表元素的排序54列表元素的排序操作

常见的两种方式:方式1:调用sort()方法列有中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True、进行降序排序。

方式2:调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变。07字典列表推导式56字典:

Python内置的数据结构之一,与列表一样是一个可变序列。

以键值对的方式存储数据,字典是一个无序的序列。字典的实现原理:

字典的实现原理与查字典类似,查字典是先根据部首或拼音查找应的页码,Python中的字典是根据key查找value所在的位置。字典的创建57字典的创建:最常用的方式:使用花括号scores=("张三:100,'李四:98,王五':45)使用内置函数dict()dict(name='jack’,age=20)字典的查询操作58字典的常用操作

字典中元素的获取:[]取值与使用get()取值的区别:

[]如果字典中不存在指定的key,抛出keyError异常.

get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None,可以通过参数设置默认的value,以便指定的key不存在时返回。字典元素的增、删、改操作59Key的判断:

字典元素的删除:delscores[‘张三’]字典元素的新增:scores[‘jack’]=90

获取字典视图的三个方法:字典元素的遍历:

foriteminscore:

print(item)字典推导式60字典的特点:

字典中的所有元素都是一个key-value对,key不允许重复,value可以重复;

字典中的元素是无序的;

字典中的key必须是不可变对象;

字典也可以根据需要动态地伸缩;

字典会浪费较大的内存,是一种使用空间换时间的数据结构。字典生成式:内置函数zip():

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组然后返回由这些元组组成的列表。Supportingtexthere.Whenyoucopy&paste,choose"keeptextonly"option.08函数函数的创建和调用62什么是函数?函数就是执行特定任和以完成特定功能的一段代码。为什么需要函数:复用代码;隐藏实现细节;提高可维护性;提高可读性便于调试。

函数的创建:def函数名([输入参数]):函数体[returnxxx]

函数的调用(函数名([实际参数])):

函数调用的参数传递63位置实参:根据形参对应的位置进行实参传递。关键字实参:根据形参名称进行实参传递。

函数的参数传递:函数调用的参数传递内存分析图:函数的返回值64函数的返回值1、如果函数没有返回值【函数执行完毕后,不需要给调用处提供数据】2、函数的返回值,如果个数是1个,直接返回类型3、函数的返回值,如果是多个,返回的结果是元组函数的参数定义65个数可变的关键字形参定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参;使用*定义个数可变的关键字形参;结果为一个字典。函数的参数定义函数定义默认值参数函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参。个数可变的位置参数定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数;使用+定义个数可变的位置形参;结果为一个元组。个数可变的关键字参数、可变的位置参数在定义的时候只能由一个,否则报错。递归函数66什么是递归函数?如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数。递归的组成部分:递归调用与递归终止条件。递归的调用过程:每递归调用一次函数,都会在栈内存分配一个栈帧。每执行完一次函数,都会释放相应的空间。递归的优缺点:缺点:占用内存多,效率低下。优点:思路和代码简单。Supportingtexthere.Whenyoucopy&paste,choose"keeptextonly"option.09文件操作python中的文件对象68文件对象不仅可以用来访问普通的磁盘文件,而且也可以访问任何其它类型抽象层面上的"文件"。一旦设置了合适的"钩子",你就可以访问具有文件类型接口的其它对象,就好像访问的是普通文件一样。文件内建函数[open()和file()]open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象;模式和缓冲参数都是可选的,默认为只读模式打开文件;使用with即使发生错误可以关闭文件。open()和file()函数具有相同的功能,可以任意替换.任何使用open()的地方,都可以使用file()替换它,建议使用open()来读写文件,在处理文件对象时使用file()。open()成功执行并返回一个文件对象之后,所有对该文件的后续操作都将通过这个"句柄"进行。文件对象的访问的模式69文件方法分类70输入:read()方法用来直接读取字节到字符串中,最多读取给定数目个字节。如果没有给定size参数(默认值为-1)或者size值为负,文件将被读取直至末尾。指定读取size:readline()方法读取打开文件的一行(读取下个行结束符之前的所有字节);然后整行,包括行结束符,作为字符串返回;和read()相同,它也有一个可选的size参数,默认为-1,代表读至行结束符;如果提供了该参数,那么在超过size个字节后会返回不完整的行。readlines()方法并不像其它两个输入方法一样返回一个字符串。它会读取所有(剩余的)行然后把它们作为一个字符串列表返回。它的可选参数sizhint代表返回的最大字节大小.如果它大于0,那么返回的所有行应该大约有sizhint字节。文件方法分类71输出:write()内建方法功能与read()和readline()相反。它把含有文本数据或二进制数据块的字符串写入到文件中去。文件内移动:seek()方法可以在文件中移动文件指针到不同的位置;offset字节代表相对于某个位置偏移量。位置的默认值为0,代表从文件开头算起(即绝对偏移量),1代表从当前位置算起,2代表从文件末尾算起。当人们打开文件进行读写操作的时候就会接触到seek()方法。truncate()方法,它接受一个可选的size作为参数.如果给定,那么文件将被截取到最多size字节处.如果没有传递size参数,那么默认将截取到文件的当前位置。例如,你刚打开了一个文件,然后立即调用truncate()方法,那么你的文件(内容)实际上被删除,这时候你是其实是从0字节开始截取的(tell()将会返回这个数值)。文件对象的内建方法列表72文件系统的访问73对文件系统的访问大多通过Python的os模块实现。该模块是Python访问操作系统功能的主要接口。

www.islide.cc感谢观看!宁夏大学

第三章机器学习基础www.islide.cc76目录

CONTENT01引言02机器学习的三要素03评估方法04本章小结01引言引言

通俗地讲,机器学习(MachineLearning,ML)就是让计算机从数据中进行自动学习,得到某种知识(或规律)。作为一门学科,机器学习通常指一类问题以及解决这类问题的方法,即如何从观测数据(样本)中寻找规律,并利用学习到的规律(模型)对未知或无法观测的数据进行预测.在早期的工程领域,机器学习也经常称为模式识别(PatternRecognition,PR),但模式识别更偏向于具体的应用任务,比如光学字符识别、语音识别、人脸识别等。这些任务的特点是,对于我们人类而言,这些任务很容易完成,但我们不知道自己是如何做到的,因此也很难人工设计一个计算机程序来解决这些任务。一个可行的方法是设计一个算法可以让计算机自己从有标注的样本上学习其中的规律,并用来完成各种识别任务。随着机器学习技术的应用越来越广,现在机器学习的概念逐渐替代模式识别,成为这一类问题及其解决方法的统称。02机器学习的三要素1模型

1模型

1模型

以上提到了很多种当前热门的机器学习模型,在后面的文章都会详细介绍。判别模型和生成模型,两者的差别就在于是否先对联合概率P(y|x)建模。学术界对两种模型各自都有不同的声音,主要是针对条件概率P(y|x)的方法应该直接建模还是用P(y|x)间接建模有分歧:SVM之父Vapnik的观点是生成模型的第一步是先对联合概率P(y|x)建模,这个做法没必要,对P(y|x)直接进行建模就行了,事实上这学术界主流认识;而AndrewNg为生成模型发声,他认为对P(y|x)进行建模从而达到判别的目的也有它自身的一些优势:虽然生成模型的渐进误差(Asymptoticerror)确实是比判别模型的大,但随着训练集增加后,生成模型会比判别模型更快得达到渐进误差(收敛速度更快)。2学习策略

在模型部分,机器学习的学习目标是获得假设空间(模型)的一个最优解,那么如何评判优还是不优?策略部分就是评判“最优模型”(最优参数的模型)的准则或方法。了解机器学习的策略,最关键是掌握10个名词:欠拟合(Underfitting)、过拟合(Overfitting)、经验风险(Empiricalrisk)、经验风险最小化(Empiricalriskminimization,ERM)、结构风险(Structuralrisk)、结构风险最小化(Structuralriskminimization,SRM)、损失函数(Lossfunction)、代价函数(Costfunction)、目标函数(Objectfunction)、正则化(Regularization)。

为了理解这些名词,我们从一个例子开始说起,如图所示:2学习策略

2学习策略

3优化准则

通常来说,最小值必然是极值点,而连续函数的极值点可以通过求一阶导数并令导数等于0,最后找到值最小的极值点,就是最小值点。而在机器学习中,由于目标函数的复杂性,普通解法绝大多数情况行不通,这个时候需要一些别的算法。机器学习求解目标函数常用的算法有最小二乘法、梯度下降法(属于迭代法的一种),最小二乘法针对线性模型,而梯度下降法适用于任意模型,适用最为广泛。3优化准则

3优化准则

3优化准则

下面给出梯度下降图以便于直观理解3优化准则

梯度下降法由于可对任意函数求最优解,故在机器学习中广泛使用;但GD也有如下明显的缺点:

1.从上面迭代公式可以看到,GD是线性收敛,所以收敛速度较慢;

2.当目标为非凸函数时,GD求得的解不保证是全局最优解。

根据梯度下降算法进而衍生的有:

批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有的样本来进行更新。

随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本j来求梯度。

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。03评估方法1评估方法

机器学习的目的是使学得的模型能很好的适用于“新样本”,即使得模型具有泛化能力。但太好的模型可能因为学习器学习能力过于强大,进而把训练样本本身的特有性质当做所有潜在样本都会具有的一般性质,进而导致泛化能力减小,出现“过拟合”的情况。“欠拟合”是由于学习器没有通过训练样本学习到一般性质。

P问题:在多项式时间内可解的问题;有效的学习算法必须是p问题,即在多项式时间内可以运行完成。np难问题:不知道这个问题是不是存在多项式时间内的算法。可选学习算法很多,在模型选择时,训练误差由于过拟合的存在不适合作为评价标准,泛化误差无法直接获得。所以“训练数据”的存在就有了必要,通常选择训练误差较小的模型。2数据集划分方法

3性能度量

3性能度量

3性能度量两学习器性能的比较

1)c曲线被ab曲线包住,ab优于c学习器;

2)寻找平衡点,如图中的红点,当查准率=查全率时,数值越高,对应的学习器往往越优秀。3性能度量

与P-R曲线类似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别作为横、纵坐标做图。

ROC曲线的的横轴为:假正例率FP

ROC曲线的的横轴为:真正例率TP3性能度量

给定一个学习系统,如果更多的正样本被识别为正样本,那么也就意味着更多的负样本被识别成了正样本。图中的对角线对应于“随机猜测”模型。

1)ROC即为绿线。视情况而定,如果面部识别开锁系统的话,观察假正率为零时,真正率的高度,越高越好;

2)AUC即为蓝色面积。面积越大越好

3)EER等错误率即为绿色原点.在该点处假正率FP和假错率FN相等,该点值越小越好。04本章小结本章小节

本章介绍了机器学习相关基础知识,通过对本章的学习,读者应该了解了机器学习中的三大要素:模型、学习策略、优化准则的基本概念以及其在机器学习中的作用。在学习策略中用应着重掌握欠拟合(Underfitting)、过拟合(Overfitting)、损失函数(Lossfunction)、代价函数(Costfunction)、目标函数(Objectfunction)的基本概念。在此之后简要介绍了实验如何划分数据集、性能的度量以及多模型如何比较的方法,在深度学习部分会重新详细讲解模型的性能度量优化。在接下来的章节中,读者将初入机器学习实验,分别了解各种经典机器学习算法,数据处理操作。实验分别用线性回归、SVM、随机森林等算法实现对数据精准的预测。www.islide.ccThanks

宁夏大学

第四章k-近邻算法K-近邻算法www.islide.cc103目录

CONTENT01引言02算法概述03实验数据04算法实战05本章小结01引言引言

古人云:“近朱者赤,近墨者黑”。其实机器学习中的kNN算法的核心思想就是这句流传至今的名言。kNN算法又称为K近邻算法,是众多机器学习算法中少有的懒惰学习算法,该算法不仅可以用来回归也可以用来分类。本章将学习k近邻算法的基本理论,使用距离测量的方法分类物品,编写构造knn分类器python代码,利用实际的例子讲解如何使用k-近邻算法对糖尿病数据集进行分类预测。02算法概述算法概述1、基本概念​k-近邻算法(k-NearestNeighbouralgorithm),又称为KNN算法,是数据挖掘技术中原理最简单的算法。KNN的工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的k个实例,如果这k个实例的多数属于某个类别,那么新数据就属于这个类别。可以简单理解为:由那些离X最近的k个点来投票决定X归为哪一类。算法概述

简单地说,k近邻算法采用测量不同特征值之间的距离方法进行分类。​上图中有红色三角和蓝色方块两种类别,现在需要判断绿色圆点属于哪种类别。​当k=3时,绿色圆点属于红色三角这种类别;​当k=5时,绿色圆点属于蓝色方块这种类别。算法概述

要度量空间中点距离的话,有好几种度量方式,比如常见的曼哈顿距离计算,欧式距离计算等等。不过通常KNN算法中使用的是欧式距离,这里只是简单说一下,拿二维平面为例,二维空间两个点的欧式距离计算公式如下:如果是多个特征扩展到N维空间,怎么计算?可以使用欧氏距离(也称欧几里得度量),如下所示:算法概述k-近邻算法步骤如下:(1)计算已知类别数据集中的点与当前点之间的距离;(2)按照距离递增次序排序;(3)选取与当前点距离最小的k个点;(4)确定前k个点所在类别的出现频率;(5)返回前k个点出现频率最高的类别作为当前点的预测类别。03实验数据准备数据数据集介绍DiabetesData也称糖尿病数据集是一类多重变量分析的数据集。通过对442例糖尿病患者的年龄、性别、体重指数、平均血压以及兴趣反应等10个属性进行分析,预测基线一年后疾病进展的定量测量值。本章将从糖尿病数据集中选取部分作为实验数据,并存放于diabetes.csv文本文件中。8个属性变量和标记值具体介绍如右图:处理数据导入数据集,并将数据进行归一化且将数据集进行划分为训练集和测试集,具体操作如下所示:数据归一化为避免其中某个特征数据过大而影响整体,接下来要进行数值归一化的处理,使得这四个特征的权重相等。数据归一化的处理方法有很多种,比如0-1标准化、Z-score标准化、Sigmoid压缩法等等,在这里我们使用最简单的0-1标准化,公式如下:将该计算公式封装为minmax()函数。处理数据集

归一化数据集后,按照一定比例地要求,将原始数据集分为训练集和测试集两部分。为保证数据地随机分配,采用打乱索引的方式打乱数据顺序。04案例实战k-近邻实现预测测试集并计算准确率

接下来,构建针对于心脏病数据集的分类器,上面我们已经将原始数据集进行归一化处理然后也切分了训练集和测试集,所以我们的函数的输入参数就可以是train、test和k(k-近邻算法的参数,也就是选择的距离最小的k个点)。结果分析准确度分数:调用datingClass()函数后,当k=9时,判断是否患糖尿病的预测准确率达到0.75预测结果下图即为测试集的预测情况:对比outcome和predict两列属性值情况,两者一致则为预测正确,否则即为错误。05本章小结本章小结

本章详细介绍了k近邻的相关理论,阐述了k-近邻算法的工作流程,通过一个糖尿病数据集讲述了如何使用k-近邻算法实现分类训练与预测。K-近邻算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数据。k-近邻算法必须保存全部数据集,如果训练的数据集很大,必须使用大量的存储空间。此外,由于必须对数据集中的每个数据计算距离值,实际使用时可能非常耗时。k-近邻算法的另一个缺陷是它无法给出任何数据的基础结构信息,因此我们也无法知晓平均实例样本和典型实例样本具有什么特征。下一章我们将使用决策树方法处理分类问题,该算法可以解决这个问题。www.islide.ccThanks

宁夏大学

第5章决策树算法决策树算法www.islide.cc124目录

CONTENT01引言02算法概述03实验数据04算法实战05本章小结01引言引言——故事导入

某公司想招聘机器学习算法工程师,HR可能会先看应聘者是否在顶级会议上发表过论文,如果发表过的话则直接录用;否则,看应聘者是否为研究生。如果是并且读研期间做的项目是和机器学习有关的,则录用;若不是研究生,则看成绩是否是年纪前10,是的话则录用否则留待考察。

决策树的工作原理与上述过程类似,即为达到目标根据一定的条件进行不断选择。

究竟何为决策树?

决策树,顾名思义,就是一种树形结构,其中树中的每个内部节点表示一个属性的判断,每个分支代表一个判断结果的输出,每个叶节点代表一种分类结果。引言

决策树算法作为一种非参数的监督学习方法,它主要用于分类,应用十分广泛。在风险评估、数据分类、专家系统等领域均有涉及,例如:专家系统中经常使用决策树,而且决策树给出的结果往往可以匹敌在当前领域具有几十年工作经验的人类专家。

第四章介绍的k-近邻算法可以完成很多分类任务,但是它最大的缺点就是无法给出数据的内在含义。而本章所讲的决策树,主要优势就是数据形式容易理解,具有非常好的可解释性。

本章将学习如何从一堆原始数据中构造决策树,讨论构造决策树的方法,编写构造树的Python代码,递归建立分类器以及使用graphviz包绘制决策树图。02算法概述算法定义

决策树是附加概率结果的一个树状的决策图,是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个内部节点表示对象属性的判断条件,其分支表示符合节点条件的对象,其叶子节点表示对象所属的预测结果。

这里为方便理解,以银行客户贷款资格评估为例:算法定义通过上面的例子,很容易理解一下两点:一、决策树算法的本质就是树形结构。这里需要了解以下三个有关树结构的概念:​ (1)根节点:就是树最顶端的节点,没有进边,只有出边。​ (2)中间节点:既有进边也有出边,但进边有且仅有一条,而出边可以有很多条。​ (3)叶节点:树最底部的节点,也就是决策结果,每个叶节点代表一个类别标签。只有进边,没有出边,进边有且只有一条。二、决策树其实就是一个if-then规则的集合。

由决策树的根节点到叶节点的每一条路径构建出一条规则,路径上中间节点的特征对应着规则的条件,叶节点的类标签对应着规则的结论。

决策树的路径或者其对应的if-then规则集合有一个重要的性质:互斥并且完备。

接下来将讲解决策树如何构建?1、特征选择

特征选择就是决定用哪个特征来划分特征空间,其目的在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。如果利用一个特征进行分类的结果与随机分类的结果没有很大的差别,则称这个特征是没有分类能力的,经验上扔掉这些特征对决策树学习的精度影响不会很大。

那如何来选择最优的特征来划分呢?

一般而言,随着划分过程不断进行,要求决策树的分支节点所包含的样本尽可能属于同一类别,也就是节点的纯度越来越高。下面三个图表示的是纯度越来越低的过程,最后一个表示的是纯度最低的状态。1.1香农熵及计算函数

1.2信息增益

1.3信息增益率

1.4Gini系数

2.1决策树的生成

得到原始数据集后,依据特征选择的要求,利用最大信息增益的属性值划分数据集。由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据集被向下传递到树的分支的下一个结点。在这个结点上,再次划分数据,即采用递归的原则处理数据集。递归结束的条件是:程序遍历完所有的特征列,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同分类,则得到一个叶节点。任何到达叶节点的数据必然属于叶节点的分类,即叶节点里面必须是标签。2.1决策树的生成构造流程如下:​

(1)开始:构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。​

(2)如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。​

(3)如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点。递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。

(4)每个子集都被分到叶节点上,即都有了明确的类,生成一棵决策树。2、决策树的生成

构建决策树的算法有很多,比如ID3、C4.5和CART。这三个都是非常著名的决策树算法,三者的区别简言之,即ID3使用信息增益作为选择特征的准则;C4.5使用信息增益比作为选择特征的准则;CART使用Gini指数作为选择特征的准则。本实验选用ID3算法来进行相关实验。

ID3算法的核心是在决策树各个节点上对应信息增益准则选择特征,递归地构建决策树。具体流程如下:​

(1)从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点。​

(2)再对子节点递归地调用以上方法,构建决策树。​

(3)直到所有特征的信息增益均很小或没有特征可以选择为止,从而得到一棵决策树。3、决策树的剪枝

决策树生成算法递归地产生决策树,直到不能继续下去未为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,非常容易出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化,也就是常说的剪枝处理。3、决策树的剪枝

剪枝策略有预剪枝和后剪枝两种.

预剪枝指在完全正确分类之前,决策树会较早地停止树的生长,其中停止生长的方法分为通用的停止和严格的停止两种,通用停止即当所有样本均属同一类或样本的所有的特征值都相同时,终止递归,严格停止则限制深度、叶子节点个数、叶子节点样本数、信息增益量等,比如指定到某一具体数值后不再进行分裂。

与预剪枝不同,后剪枝首先通过完全分裂构造完整的决策树,允许过拟合,然后采取一定的策略来进行剪枝操作。常用的后剪枝策略包括:降低错误剪枝、悲观错误剪枝、基于错误剪枝、最小错误剪枝等,其中常用方法是降低错误剪枝,是最简单粗暴的一种后剪枝方法,其目的减少误差样本数量。4、决策树的存储和可视化

构造决策树是很耗时的任务,即使处理很小的数据集,也要花费几秒的时间,如果数据集很大,将会耗费很多计算时间。因此为了节省时间,建好树之后立马将其保存,后续使用直接调用即可。

决策树的主要优点就是直观易于理解,如果不能将其直观地显示出来,就无法发挥其优势。python目前并没有提供绘制树的工具,所以必须自行绘制树形图。可通过Matplotlib包来一步步实现,也可通过sklearn中的Graphviz包实现。前者需要绘制节点,标注有向边属性值,以及计算叶子节点数目等,而且还需要实现递归,操作难度较大。而后者具有一些封装好的函数辅助绘制,可大大降低绘制的工作量,故本实验采取后者的方式。03实验数据1、数据集介绍

隐形眼镜数据集是非常著名的数据集,它包含很多患者眼部状况的观察条件以及医生推荐的隐形眼镜的类型。其中,隐形眼镜类型包括硬材质(hard)、软材质(soft)以及不适合佩戴隐形眼镜(nolenses)。特征有四个:age(年龄)、prescript(症状)、astigmatic(是否散光)、tearRate(眼泪数量)。​

数据来源于UCI数据库:/ml/datasets/lenses。为了更容易地显示数据,本实验从UCI数据库中选取部分作为实验数据,并存放于lenses.txt文本文件中。2、导入数据集

利用数据分析的pandas包,将lenses.txt文本文件解析为tab键分隔的数据行。

文本数据处理后如右图所示:3、划分训练集和测试集

导入数据集后,按照一定比例地要求,将原始数据集分为训练集和测试集两部分。为保证数据地随机分配,采用打乱索引的方式打乱数据顺序。值得注意的是,由于这里采用随机索引的方式,导致每次切分的数据集并不相同。

本实验以0.8的比例(rate=0.8)划分数据集,划分后的训练集(左图)和测试集(右图)如下所示:04案例实战1、计算香农熵

根据熵的计算公式,将该计算公式封装为calEnt()函数。2、数据集最佳切分函数

根据ID3算法,以最大信息增益作为切分数据集的依据。遍历数据集中的所有特征列,先对每一特征列下的所有取值进行循环,求出信息熵,进而求出所在列的信息增增益,最终通过判断找到最大信息增益以及其所在列的特征。3、按照给定列切分数据集

通过最佳切分函数返回最佳切分列的索引,根据这个索引,构建一个按照给定列切分数据集的函数。4、递归构建决策树

依据最大信息增益原则,找到代表根节点的特征,进而对数据集进行切分,创造决策树的分支。再将切分后的数据集作为再次判断的数据集,寻找具有最大信息增益的特征,再进行进一步划分。如此进行,即采用递归的方式不断进行,直至所有特征的信息增益均很小或没有特征可以选择为止,停止决策树生长。5、利用训练集生成决策树调用函数生成决策树。此时,生成的决策树是采用字典嵌套的方式进行存储,如下图所示:6、保存决策树

鉴于本实验数据的限制,以及本实验核心在于决策树的构建,故决策树剪枝部分的内容大家课后进行自我补充学习。这里直接进入决策树的保存步骤,使用numpy包里面的save()函数,直接把字典形式的数据保存为.npy文件,调用的时候直接使用load()函数即可。7、预测测试集并计算准确率

对测试集中每一条数据进行循环,进而实现对每一个测试实例进行分类,并将预测结果追加到测试集最后一列。7、预测测试集并计算准确率

调用acc_classify()函数后,隐形眼镜数据集的预测准确率达到0.6。下图即为测试集的预测情况:

从图中通过对class列和predict列的对比可见,第0、1、4行数据分类正确,第2、3行分类错误,即可再次证明其准确率为0.6.8、使用sklearn中graphviz包实现决策树的绘制

使用sklearn中的DecisionTreeClassifier()函数来构建决策树,但值得注意的是,它默认使用CART算法,这里可将其特征选择标准criterion参数值改为entropy,即ID3的信息增益。再通过export_graphviz()方法生成dot_data,此时的dot_data是一个字符串类型的数据,里面的内容则是之后要进行可视化的内容。最后利用graphviz.Source()将dot_data转换成可视化的格式。8、使用sklearn中graphviz包实现决策树的绘制完成绘制的决策树图,如右图所示:

从右图我们可以得出,

从根节点出发,判断眼泪数量是否满足小于等于0.5条件,若满足,则去向左子树的根节点,进一步通过其他特征进行判断;当不满足这一条件,则直接判定该用户需要佩戴软材质的隐形眼镜。

到达左子树后,再判断眼镜是否散光,若散光满足小于等于0.5条件,则再通过症状条件判断,若症状程度小于等于0.5,则需要进一步判断,若症状程度不小于0.5,则判定该用户需要佩戴硬材质的隐形眼镜;若散光不满足要求,则再通过年龄条件判断,当年龄小于等于1.5,则判定该用户不适合佩戴隐形眼镜,当年龄大于1.5,则判定该用户需要佩戴软材质的隐形眼镜。8、使用sklearn中graphviz包实现决策树的绘制

补充说明,这里每个特征的数值型数据0.5、1.5的来源,这主要是因为调用的DecisionTreeClassifier()函数实现数据序列化,即将age(年龄)的三个属性值yong、pre、presbyopic用0、1、2来表示;prescript(症状)的两个属性值hyper、myope用0、1来表示;astigmatic(是否散光)的两个属性值yes、no用0、1来表示;tearRate(眼泪数量)的两个属性值yes、no用reduced、normal来表示。05本章小结本章小结

隐形眼镜的例子,一方面体现出了决策树优于其他机器学习算法的可视化和易解释性,以及数据准备工作的简易化,不再需要强制进行数据规范化和创建虚拟变量等操作;另一方面也表明决策树可能会产生过多的数据集划分,从而产生过度匹配数据集的问题,以及数据分类不平衡导致的偏差,使得决策树的创建具有不稳定性等问题。

上一章和本章讨论的都是结果确定的分类算法,即数据实例会被明确划分到某类的算法,下一章我们将进一步讨论那些数据实例无法明确划分到某类或数据实例只能给定分类概率的分类算法。www.islide.ccThanks

第六章朴素贝叶斯算法朴素贝叶斯算法162目录

CONTENT01引言02模型概述03实验数据04算法实战05本章小结引言01引言在机器学习中,朴素贝叶斯分类是一种用于分类任务的简单而强大的算法。朴素贝叶斯分类基于应用贝叶斯定理,特征之间具有很强的独立性假设。朴素贝叶斯模型也称为简单贝叶斯或独立贝叶斯。所有这些名称都是指贝叶斯定理在分类器决策规则中的应用。这个分类器将贝叶斯定理的力量带到了机器学习中。朴素贝叶斯分类器使用贝叶斯定理来预测每个类的成员概率,例如给定记录或数据点属于特定类的概率。概率最高的类被认为是最可能的类。这也称为最大后验概率(MAP)。朴素贝叶斯是任何人都可以使用的最流行和对初学者友好的算法之一。模型概述022模型概述166经典的概率论对小样本事件并不能进行准确的评估,若想得到相对准确的结论往往需要大量的现场实验;而贝叶斯理论能较好的解决这一问题,利用己有的先验信息,可以得到分析对象准确的后验分布,贝叶斯模型是用参数来描述的,并且用概率分布描述这些参数的不确定性。贝叶斯分析的思路由证据的积累来推测一个事物发生的概率,它告诉我们当我们要预测一个事物需要的是首先根据已有的经验和知识推断一个先验概率,然后在新证据不断积累的情况下调整这个概率。整个通过积累证据来得到一个事件发生概率的过程我们称为贝叶斯分析。朴素贝叶斯算法(NaiveBayesianalgorithm)是应用最为广泛的分类算法之一。​朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。2模型概述167

在学习朴素贝叶斯之前先了解几个基本内容。2模型概述168朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。以下给出简单定义:1692模型概述朴素贝叶斯基于各特征之间相互独立,在给定类别为y$的情况下,上式可以进一步表示为下式: 由以上两式可以计算出后验概率为:2模型概述170

由于P(X)的大小是固定不变的,因此在比较后验概率时,只比较上式的分子部分即可。因此可以得到一个样本数据属于类别y_i的朴素贝叶斯计算:

2模型概述171朴素贝叶斯算法有3种类型。下面列出这3种类型:高斯朴素贝叶斯如果x是连续变量,如何去估计似然度P(x|yi)呢?我们可以假设在yi的条件下,x服从高斯分布(正态分布)。根据正态分布的概率密度函数即可计算出P(x|yi),公式如下:2.伯努利朴素贝叶斯

在多元伯努利事件模型中,特征是描述输入的独立布尔变量(二元变量)。就像多项式模型一样,该模型也适用于使用二进制词出现特征而不是词频的文档分类任务。

2模型概述172

实验数据033实验数据174本实验数据集AdultDataSet为美国1994年人口普查数据库中抽取而来,因此也称作“人口普查收入”数据集,共包含48842条记录,年收入大于50k的占比23.93%,年收入小于50k的占比76.07%,数据集已经划分为训练数据32561条和测试数据16281条。该数据集类变量为年收入是否超过50k,属性变量包括年龄、工种、学历、职业等14类重要信息,其中有8类属于类别离散型变量,另外6类属于数值连续型变量。该数据集是一个分类数据集,用来预测年收入是否超过50k。下图给出数据集简介:数据集下载链接为:/ml/datasets3实验数据175

为了更好的立即数据集数据意义,下图给出了数据中变量字段:3实验数据数据处理:

1、将数据拆分为单独的训练和测试集。3实验数据1772、编码分类变量:

即将非数值化数据数值化3实验数据1783、特征缩放:当数值过大时,不利于计算机高效率的计算,因此可以将数值进行缩放。算法实战044算法实战180模型构建:根据已知公式构建高斯朴素贝叶斯:

根据数据类型,这里给出离散、非离散高斯构建过程4算法实战www.islide.cc181对预测函数也分别建立离散数据、非离散数据的预测分别建立训练函数和预测函数后,基本模型就建立完成可以开始使用2结果分析182从实验输出中可以看到测试数据使用了16281条,其中预测准确率达到83.25%。因此,可以得出结论,高斯朴素贝叶斯分类模型在预测类标签方面做得非常好。本章小结05本章小结184朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。对大数量训练和查询时具有较高的速度。即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已;对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练);对缺失数据不太敏感,算法也比较简单,常用于文本分类;朴素贝叶斯对结果解释容易理解。​本章详细介绍了朴素贝叶斯相关数学理论,并在AdultDataSet使用朴素贝叶斯逐步实现了分类训练与预测。朴素贝叶斯分类器具有高度可扩展性,在学习问题中需要多个变量(特征/预测器)数量的线性参数。但其也存在需要计算先验概率、分类决策存在错误率、对输入数据的表达形式很敏感、使用了样本属性独立性的假设,如果样本属性有关联时其预测效果会降低等缺点。在学习简单的机器模型后下一章我们将继续深入研究机器学习相关的回归算法,回归算法是机器学习中最常见也是使用最广的一个算法,回归算法主要有线性回归和逻辑回归2种。下一章将分别介绍线性回归和逻辑回归。www.islide.ccThanks

宁夏大学

第七章Logistic回归算法Logistic回归算法www.islide.cc187目录

CONTENT01引言02算法概述03实验数据04算法实战05本章小结01引言引言

在数据科学中,大约70%的问题属于分类问题,当数据科学家可能遇到一个新的分类问题时,他们想到的第一个算法就是Logistic回归。它是一种监督学习分类算法,用于预测离散类的观测值,是一种很常见的用来解决二元分类问题的回归方法,它主要是通过寻找最优参数来正确地分类原始数据实际上。它被用来将观测分为不同的类别。因此,其输出本质上是离散的。它是用于解决分类问题的最简单、直接和通用的分类算法之一。02算法概述算法概述1、基本概念

逻辑回归(LogisticRegression,简称LR),其实是一个很有误导性的概念,虽然它的名字中带有“回归”两个字,但是它最擅长处理的却是分类问题。LR分类器适用于各项广义上的分类任务,例如:评论信息的正负情感分析(二分类)、用户点击率(二分类)、用户违约信息预测(二分类)、垃圾邮件检测(二分类)、疾病预测(二分类)、用户等级分类(多分类)等场景。我们这里主要讨论的是二分类问题。算法概述

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论