《机器学习技术》总复习(综合)
《机器学习技术》门户网站
https://mooc1.chaoxing.com/course/216309258.html
第一 部分 机器学习基础工具(Python 语言)
1、关于Python的基本知识
python语言是一门解释型,动态,强类型编程语言。(面向过程编程,也能面向对象编程、还可使用函数式编程)。特点、优点、缺点。
优点:
1. 简单,易学,免费,开源
2. 高级语言,解释型语言
3. 可移植性,可拓展性,可读性
4. 面向对象,丰富的库
缺点:
1. 执行效率慢
2. GIL锁限制并发
3. 源代码加密困难
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。
PYTHON的设计哲学是:优雅、明确、简单
应用领域, 以下是Python十大应用领域:
(1) WEB开发 Python拥有很多免费数据函数库、免费web网页模板系统、以及与web服务器进行交互的库,可以实现web开发,搭建web框架,目前比较有名气的Python web框架为Django。从事该领域应从数据、组件、安全等多领域进行学习,从底层了解其工作原理并可驾驭任何业内主流的Web框架。
(2) 网络编程 网络编程是Python学习的另一方向,网络编程在生活和开发中无处不在,哪里有通讯就有网络,它可以称为是一切开发的“基石”。对于所有编程开发人员必须要知其然并知其所以然,所以网络部分将从协议、封包、解包等底层进行深入剖析。
(3) 爬虫开发 在爬虫领域,Python几乎是霸主地位,将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。从事该领域应学习爬虫策略、高性能异步IO、分布式爬虫等,并针对Scrapy框架源码进行深入剖析,从而理解其原理并实现自定义爬虫框架。
(4) 云计算开发 Python是从事云计算工作需要掌握的一门编程语言,目前很火的云计算框架OpenStack就是由Python开发的,如果想要深入学习并进行二次开发,就需要具备Python的技能。
(5) 人工智能 MASA和Google早期大量使用Python,为Python积累了丰富的科学运算库,当AI时代来临后,Python从众多编程语言中脱颖而出,各种人工智能算法都基于Python编写,尤其PyTorch之后,Python作为AI时代头牌语言的位置基本确定。
(6) 自动化运维 Python是一门综合性的语言,能满足绝大部分自动化运维需求,前端和后端都可以做,从事该领域,应从设计层面、框架选择、灵活性、扩展性、故障处理、以及如何优化等层面进行学习。
(7) 金融分析 金融分析包含金融知识和Python相关模块的学习,学习内容囊括Numpy\Pandas\Scipy数据分析模块等,以及常见金融分析策略如“双均线”、“周规则交易”、“羊驼策略”、“Dual Thrust 交易策略”等。
(8) 科学运算 Python是一门很适合做科学计算的编程语言,97年开始,NASA就大量使用Python进行各种复杂的科学运算,随着NumPy、SciPy、Matplotlib、Enthought librarys等众多程序库的开发,使得Python越来越适合做科学计算、绘制高质量的2D和3D图像。
(9) 游戏开发 在网络游戏开发中,Python也有很多应用,相比于Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。
(10) 桌面软件 Python在图形界面开发上很强大,可以用tkinter/PyQT框架开发各种桌面软件!
2、Python 标识符
简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。
规则:Python 的标识符是由字符(A~Z 和 a~z)、下划线(_)和数字组成,但第一个字符不能是数字。标识符不能和 Python 中的保留字相同。Python 中的标识符是区分大小写的。
例: 区分是否是合法的标识符。 name,203room,room203, _203room, Age,age ,for ,FOR,formy
标识符建议:见名知意,起有意义的名字,一眼便知其意思,可以提高代码的可读性,比如:老师 就可以用 teacher。
3、Python 保留字,所有 Python 的关键字只包含小写字母。
例:print,for,while,if,else,leif,import,from,def,and,or,not,break,Return,try,except,in,is,del,
python中的关键字:
and as assert break class continue def del elif else except exec finally for from global
if in import is lambda not or passprint raise return try while with yield
4、行和缩进
学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号{}来控制类、函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块,缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
Python 可以使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须是相同类型的。
python中 单行注释采用 # 开头。多行注释 用配套的 3个引号( ') 或3个双引号( " )括住 注释的内容。
(1) 单行注释(#)
# 这是单行注释
(2) 多行注释(''' '''/""" """)
三个单引号或者三个双引号必须互相匹配,不能三个单引号和三个双引号(注意不是中文的引号)
''' 这是多行注释1 这是多行注释2 ''' 小结
通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割。
5、变量,常量,数据类型,表达式、算术表达式、逻辑表达式
Python 中的变量赋值不需要类型声明。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
赋值语句:变量 = 表达式
num = 86 # num就是一个变量
Python允许你同时为多个变量赋值。
例: a = b = c = 1
A,b,c=1,2,"join"
例: 交换两上变量的值
传统方法: t=a;a=b;b=t
python特色方法: a,b=b,a
变量的内存地址函数: id(x)
例:a=123; b=a+1
print(id(a)==id(b))
输出的结果是: False 思考:为什么?
print(id(a)) 输出的结果是: 变量a的内存地址.
为了更充分的利用内存空间以及更有效率的管理内存,变量是有不同的类型的,如下所示
6、常用语句
输出语句:print 输入语句:input
例:name=input(“name: “)
print(“name: \n”,name)
age=int(input(“Age: “))
print(“Age: ”,age)
格式化输出示例: 看如下代码
age = 18 name = "张三" print("我的姓名是%s, 年龄是%d" % (name, age))
格式化的作用,字符串格式化可以简化程序,可以将多个结果一起输出。
7、标准数据类型
在内存中存储的数据可以有多种类型。例如,一个人的年龄可以用数字来存储,他的名字可以用字符来存储。
Python 定义了一些标准类型,用于存储各种类型的数据。
Python有五个标准的数据类型:
Numbers(数字)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)
(1)Python支持四种不同的数字类型:
int(有符号整型)、long(长整型[也可以代表八进制和十六进制] 用L或l表示)、float(浮点型)、complex(复数)
Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和b 都是浮点型,j大小写都可以。
例:g=2+6j
f=5-8J
print(g,f,f+g)
(2)python的字串列表有2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
如果要实现从字符串中获取一段子字符串的话,可以使用 [头下标 : 尾下标] 来截取相应的字符串,其中下标是从 0 开始算起,可以是正数或负数,下标可以为空表示取到头或尾。[头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符。
例:
s="abcdefg"
print(s,s[1],s[-1],s[0]+s[-1])
(3) List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
例: b=[1,2,67.8,"GZhx20"]
print(b,b[1],b[2:4])
(4)Python 元组
元组是另一个数据类型,类似于 List(列表)。元组用 ( ) 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。例:tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]
(5)Python 字典
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
例:dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
tdict = {'name': 'runoob','code':6734, 'dept': 'sales'}
print ( dict['one'] ) # 输出键为'one' 的值
print ( dict[2] ) # 输出键为 2 的值
print ( tdict ) # 输出完整的字典
print ( tdict.keys() ) # 输出所有键
print ( tdict.values()) # 输出所有值
思考:为什么Python语句 dict1 = {[1,3,5]: "MYSQL"} 不能创建一个字典?
答:字典中键必须是唯一的。列表中的项目包括在方括号中。列表是可变的数据类型(可以增加或删除项目)。所以,列表中的项目不能用来作为字典的键。
(6)Python数据类型转换
有时候,需要对数据内置的类型进行转换,数据类型的转换,只需要将数据类型作为函数名即可。
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
例:int(x),float(x),long(x),str(x),chr(x),ord(x)
掌握用Python语句创建字典、列表、数组的方法。
如何区别可变数据类型和不可变数据类型?
答: 从对象内存地址方向来说,
可变数据类型:在内存地址不变的情况下,值可改变(列表和字典是可变类型,但是字典中的 key 值必须是不可变类型)
不可变数据类型:内存改变,值也跟着改变。(数字,字符串,布尔类型,都是不可变类型)可以通过 id() 方法进行内存地址的检测。
8、Python 运算符
Python语言支持以下类型的运算符:
算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级。
(1)Python算术运算符:+,-,*, /,% 取模, ** 幂, // 整除
(2) Python比较运算符: == , != , >= ,<=,> , <
逻辑值:True,False
(3)Python赋值运算符: = ,+= ,-= ,*= , /= ,%= ,**= ,//= 例:a +=1 等价于: a=a+1
(4) Python位运算符 按位运算符是把数字看作二进制来进行计算的。
(5) Python逻辑运算符: and, or, not
(6)Python成员运算符: in, not in 。返回True或False
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
(7)Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符:
运算符 | 描述 |
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
9、控制语句
(1) if语句,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。
(2) 当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 and 和 or 的优先级低于>(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。
if语句的完整形式:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
if
语句执行有个特点,它是从上往下判断,如果在某个判断上是True
,把该判断对应的语句执行后,就忽略掉剩下的elif
和else
10、循环语句
(1)Python 提供了 for 循环和 while 循环(在 Python 中没有 do..while 循环)
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来。for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。
例:
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: #注意 不能漏冒号 :
sum = sum + x
print(sum)
例:for k in range(5):
print(k)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
sum=0
n = 99
while n > 0 : #注意 不能漏冒号 :
sum = sum + n
n = n - 2
print(sum)
(2)循环使用 else 语句 在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。
(3)无限循环 如果条件判断语句永远为 true,循环将会无限的执行下去.注意:无限循环可以使用 CTRL+C 来中断循环。
例 :
k=100
while k==100 :
print(k)
print("BYE!")
迭代输出序列时(如:列表)使用 for 比 while 更好。
11、Python 异常处理
python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。
重点知识:异常处理,断言(Assertions)。
什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
以下为简单的try....except...else的语法:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
12、Python 面向对象
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
13、def语句,用于定义函数和类型的方法。
关键字 def 引入了一个函数定义。在其后必须跟有函数名和包括形式参数的圆括号。函数体语句从下一行开始,必须是缩进的。
函数体的第一行语句可以是可选的字符串文本,这个字符串是函数的文档字符串,或者称为 docstring。 有些工具通过 docstrings 自动生成在线的或可打印的文档,或者让用户通过代码交互浏览;在你的代码中包含 docstrings 是一个好的实践,让它成为习惯吧。
函数调用 会为函数局部变量生成一个新的符号表。确切的说,所有函数中的变量赋值都是将值存储在局部符号表。变量引用首先在局部符号表中查找,然后是包含函数的局部符号表,然后是全局符号表,最后是内置名字表。因此,全局变量不能在函数中直接赋值(除非用 global 语句命名),尽管他们可以被引用。
函数引用的实际参数在函数调用时引入局部符号表,因此,实参总是 传值调用 (这里的 值 总是一个对象 引用 ,而不是该对象的值)。一个函数被另一个函数调用时,一个新的局部符号表在调用过程中被创建。
一个函数定义会在当前符号表内引入函数名。函数名指代的值(即函数体)有一个被 Python 解释器认定为 用户自定义函数 的类型。 这个值可以赋予其他的名字(即变量名),然后它也可以被当做函数使用。
return 语句从函数中返回一个值,不带表达式的 return 返回 None。 过程结束后也会返回 None。
14、一些其他语句
assert语句,用于程序调试阶段时测试运行条件是否满足。
with语句,Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。
yield语句,在迭代器函数内使用,用于返回一个元素。Py2.5后,这个语句变成一个运算符。
raise语句,制造一个错误。
import语句,导入一个模块或包。
from … import语句,从包导入模块或从模块导入某个对象。
import … as语句,将导入的对象赋值给一个变量,或者说起一个别名。
in语句,判断一个对象是否在一个字符串/列表/元组里。
Python使用lambda表示匿名函数。匿名函数体只能是表达式。
内置函数 range() 很方便,它生成一个等差级数链表。
15 、python中的模块、包、库
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块
包:在模块之上的概念,为了方便管理而将文件进行打包。
一个文件夹下必须要有_init_.py这个文件才会被识别为包。
包目录下第一个文件便是 init.py,然后是一些模块文件和子目录
假如子目录中也有 init.py,那么它就是这个包的子包了
库:具有相关功能模块的集合。
这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。
标准库:就是下载安装的python里那些自带的模块,要注意的是,里面有一些模块是看不到的比如像sys模块,这与linux下的cd命令看不到是一样的情况
第三方库:就是由其他的第三方机构,发布的具有特定功能的模块
自定义模块:用户自己可以自行编写模块,然后使用
另外:模块、包、库这三个概念实际上都是模块,只不过是个体和集合的区别
系统编程:提供API(Application Programming Interface应用程序编程接口),能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。
图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。
数学处理:NumPy扩展提供大量与许多标准数学库的接口。
文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。
Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。
为了保存数据、方便修改和分享,数据通常以文件的形式存储在磁盘等外部存储介质中。根据逻辑上编码不同可将文件大致分为文本文件和二进制文件两类。
Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。
网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。
Web编程:应用的开发语言,支持最新的XML技术。
多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。
黑客编程:python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。
用Python写简单爬虫。
网络爬虫是一种计算机自动程序,它能够自动建立到WEB服务器的网络连接,访问服务器上的某个页面或网络资源,获得其的内容,并按照页面上的超链接进行更多页面的获取。
Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python标准库命名接口清晰、文档良好,很容易学习和使用。
Python社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能无所不包,覆盖科学计算、Web开发、数据库接口、图形系统多个领域,并且大多成熟而稳定。第三方模块可以使用Python或者C语言编写。SWIG,SIP常用于将C语言编写的程序库转化为Python模块。Boost C++ Libraries包含了一组库,Boost.Python,使得以 Python 或 C++ 编写的程序能互相调用。借助于拥有基于标准库的大量工具、能够使用低级语言如C和可以作为其他库接口的C++,Python已成为一种强大的应用于其他语言与工具之间的胶水语言。
习题:python播放音频文件(如: MP3)可用下面程序语句:
from playsound import playsound
playsound("文件名.扩展名")
若要播放 song1.mp3 ,下面哪些选项是正确的?( )
A. playsound("song1.mp3") B.playsound('song1.mp3')
C.playsound(song1.mp3) D.fm='MP32.MP3';playsound(fm)
16、Python数据分析-Numpy数值计算
NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。
NumPy提供了两种基本对象:ndarray 和 ufunc。其余的对象都是以这两种对象为基础(如矩阵)。
安装方法(在 命令行方式执行):pip install numpy
使用pip工具升级科学计算扩展库numpy的完整命令是:pip install –upgrade numpy
引用方式:import numpy as np
## numpy示例py01
import numpy as np
a=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
for i in a:
print(i,end=',')
print()
##输出结果: 0,1,2,3,4,5,6,7,8,9,
17、pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。
可视化是用来探索性数据分析最强大的工具之一。Pandas库包含基本的绘图功能,可以让你创建各种绘图。Pandas中的绘图是在matplotlib之上构建的,如果你很熟悉matplotlib你会惊奇地发现他们的绘图风格是一样的。
Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
利器之一:DataFrame DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。
利器之一:Series 它是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生。Python中,Series 不接收set数据类型。
在实际数据挖掘分析中,其业务数据大多存储在外部文件中,比如Excel、TXT等。因此,需要将外部文件读取到Python中进行挖掘分析。Pandas包中提供了非常丰富的函数来读取各种类型的外部数据文件
18、Matplotlib绘图基础
Matplotlib是一个python的 2D绘图库,也是最著名的Python绘图库。它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
虽然Matlpotlib的代码库很庞大,但是可以通过简单的概念框架和重要的知识来理解掌握。Matplotlib图像可以分为如下4层结构。
canvas(画板)。位于最底层,导入Matplotlib库时就自动存在。
figure(画布)。建立在canvas之上,从这一层就能开始设置其参数。
axes(子图)。将figure分成不同块,实现分面绘图。
图表信息(构图元素)。添加或修改axes上的图形信息,优化图表的显示效果。
画图的种类:
分析特征关系常用图形
分析特征内部数据状态常用图形
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.scatter(x,y1) #散点图
plt.plot(x,y1,'r*--') #线性图
plt.bar(x,y1) #柱状图
plt.hist(y1) #直方图
plt.pie(list1,labels=D,autopct='%1.2f%%') #绘制饼图
plt.boxplot([y1.values,y2.values]) #箱线图
plt.subplot(3,2,3) #子图
第二部分 机器学习技术
门户网关于机器学习术语:
机器学习(Machine Learning)是计算机程序随着经验积累自动提高性能或系统自我改进的过程,即通过经验提高性能的某类程序;以一个更形式化的定义来说,对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能,随着经验E而自我完善,就称这个计算机程序从经验 E中学习。
机器学习通常需要一定的算法,依据特定的指令序列,将输入变换得到输出,然而,对于现实中的很多任务,我们并没有确定的算法,我们希望计算机自动地为学习任务提取相应的算法;
1、机器学习库Scikit-learn
Scikit-learn 是开源的 Python 库,通过统一的界面实现机器学习、预处理、交叉验证及可视化算法。
几个重要概念:
(1)分类 确定对象属于哪个类别。
应用:垃圾邮件检测,图像识别。 算法: SVM,最近邻居,随机森林,......
(2)回归
预测与对象关联的连续值属性。
应用:药物反应,股票价格。 算法: SVR,岭回归,套索,......
如果希望预测的结果是离散值,此类学习任务称为分类(Classification);如果希望预测的结果是连续值,此类学习任务称为回归(Regression)。
(3)聚类 将类似对象自动分组到集合中。
应用:客户细分,分组实验结果 算法: k-Means,谱聚类,均值漂移,......
聚类是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。聚类模型可以将无类标记的数据,聚集为多个簇,分别视为一类,是一种非监督的学习算法。
(4)降维 减少要考虑的随机变量的数量。
应用:可视化,提高效率 算法: PCA,特征选择,非负矩阵分解。
(5)模型选择 比较,验证和选择参数和模型。
目标:通过参数调整提高准确性 模块: 网格搜索,交叉验证,指标。
机器学习中的模型的参数调优拥有多种方式,包含手动调优、网格搜索、随机搜索以及基于贝叶斯的参数调优方法等。其中,使用参数设置的网格法是目前最广泛使用的参数优化方法。
(6)预处理 特征提取和规范化。
(7) 应用程序: 转换输入数据(如文本)以与机器学习算法一起使用。
(8) 模块: 预处理,特征提取。
2、(案例)餐饮企业分析需求
3、(案例)通信运营商客户流失分析需求
4、机器学习的核心是算法。
机器学习算法可以分为三个大类——有监督学习、无监督学习和强化学习。
有监督学习,对训练有标签的数据有用,但是对于其他没有标签的数据,则需要预估。
无监督学习,用于对无标签的数据集(数据没有预处理)的处理,需要发掘其内在关系的时候。
强化学习,介于两者之间,虽然没有精准的标签或者错误信息,但是对于每个可预测的步骤或者行为,会有某种形式的反馈。
更多的复习资料:《机器学习技术》门户网站 https://mooc1.chaoxing.com/course/216309258.html
如:11.11编程专项测试
# 第6章习题(编程题)下面python 程序代码功能是:使用sklearn库提供的方法对二维数组 [[1,-1,2],[2,0,0],[0,1,-1]] 中的数据进行离差标准化,并输出结果
from sklearn import preprocessing
import numpy as np
X = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])
print('原数组 :\n', X)
# 建立转换器并生成规则
SS_transformer = preprocessing.StandardScaler().fit(X)
data=SS_transformer.transform(X) #差标准化
print('离差标准化后的数组:\n', data)
## 请改写上面python 程序代码,对二维数组 [[1,-1,1,2],[2,0,0,1],[1,0,1,-1]] 中的数据进行离差标准化并输出结果,
## 并另输出标准化后数组的第1行、第2列(注:标号从0算起,即第0行、第1行等等)。
参考答案:
## python 程序代码,对二维数组 [[1,-1,1,2],[2,0,0,1],[1,0,1,-1]] 中的数据进行离差标准化并输出结果,
## 并另输出标准化后数组的第1行、第2列(注:标号从0算起,即第0行、第1行等等)
from sklearn import preprocessing
import numpy as np
X = np.array([[1,-1,1,2],[2,0,0,1],[1,0,1,-1]] )
print('原数组 :\n', X)
# 建立转换器并生成规则
SS_transformer = preprocessing.StandardScaler().fit(X)
data=SS_transformer.transform(X) #
print('离差标准化后的数组:\n', data)
print('离差标准化后的数组第1行:\n', data[1])
#可两种表示 data[1],data[1,:]
print('离差标准化后的数组第2列:\n', data[:,2])
11.12 填空题专项测验
例: 已知 x = 2020,那么执行语句 x += 3 之后,x的值为( )。
例:已知 x = 3,并且id(x)的返回值为 496103280,那么执行语句 x += 6 之后,表达式 id(x) == 496103280 的值为( )。(提示: True 或者 False)
x=3
print(x>=1) 输出的结果是:( )
11.13 判断题专项测试
例:python语言是一门解释型,动态,强类型编程语言。它既能进行面向过程编程,也能进行面向对象编程、甚至还可以使用函数式编程,能广泛用于多种编程领域的语言。( Y )
例:函数是对程序逻辑进行过程化和结构化的一种方法。有了函数,可将大块的代码巧妙合理地隔离成容易管理和维护的小块。
函数定义语法格式如下所示:
def function_name(arguments):
function_block
例:
def Home(k=10):
for h in range(k):
print("\n")
( Y )
11.14 简答题专项测验
例:数据科学与人工智能的核心是机器学习模型与算法,Python中的机器学习包Scikit-learn提供了从数据预处理到模型应用、评估等各方面的模型与算法,比如缺失值处理、数据的规范化、属性归约(主成分提取)、线性回归、逻辑回归、神经网络、支持向量机、K-均值聚类等。
请对以上模型或方法的应用主题进行归类(主题包括:数据预处理、数据降维、回归、分类、聚类)。
( 答例:(1) 数据预处理:缺失值处理,数据的均值-方差、极规范化方法 )
参考答案:
(1) 数据预处理:缺失值处理,数据的均值-方差、极规范化方法
(2) 数据降维:主成分分析方法
(3) 回归:线性回归、神经网络非线性回归
(4) 分类:支持向量机、逻辑回归、神经网络分类
(5) 聚类:K-均值聚类算法