机器学习之基础知识(全)
Posted 我行我素,向往自由
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之基础知识(全)相关的知识,希望对你有一定的参考价值。
目录
3.2.7 多个坐标系显示-plt.subplots(面向对象的画图方法)
4.1.3 ndarray与Python原生list运算效率对比
1.机器学习概述
1.1 人工智能概述
1.1.1 人工智能使用场景
1.1.2 人工智能小案例
https://quickdraw.withgoogle.com
https://pjreddie.com/darknet/yolo/
https://deepdreamgenerator.com/
1.2 人工智能发展历程
1.2.1 图灵测试
1.2.2 发展历程
1.2.3 小结
1.3 人工智能主要分支
1.3.1 人工智能、机器学习和深度学习
1.3.2 主要分支介绍
1.3.3 人工智能发展必备三要素
1.3.4 拓展:GPU和CPU对比
CPU擅长IO处理,GPU擅长计算。
1.4 机器学习工作流程
1.4.1 什么是机器学习
1.4.2 机器学习工作流程
1.4.3 获取到的数据集介绍
1.4.4 数据基本处理
即对数进行缺失值、去除异常值等处理。
1.4.5 特征工程
(1)什么是特征工程
(2)为什么需要特征工程(Feature Engineering)
(3) 特征工程包括内容
- 特征提取
- 特征预处理
- 特征降维
特征提取:
特征预处理:
特征降维:
1.4.6 机器学习和模型评估概念
机器学习:选择合适的算法对模型进行训练。
模型评估:对训练好的模型进行评估。
1.5 机器学习算法分类
1.5.1 监督学习
定义: 输入数据是由输入特征值和目标值所组成。
-函数的输出可以每一个连续的值(称为回归);-或是输出是有限个离散值(称作分类)。
(1)回归问题
例如︰预测房价,根据样本集拟合出一条连续曲线。
(2)分类问题
例如:根据肿瘤特征判断良性还是恶性,得到的是结果是“良性"或者“恶性”,是离散的。
1.5.2 无监督学习
定义:输入数据是由输入特征值组成。
输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。举例:
1.5.3 半监督学习
定义:即训练集同时包含有标记样本数据和未标记样本数据。
举例:
1.5.4 强化学习
强化学习:实质是,make decisions问题,即自动进行决策,并且可以做连续决策。
强化学习的目标:就是获得最多的累计奖励。
举例:
监督学习与强化学习的对比:
1.5.5 小结
1.6 模型评估
模型评估是模型开发过程不可或缺的一部分。它有助于发现表达数据的最佳模型和所选模型将来工作的性能如何。按照数据集的目标值不同,可以把模型评估分为分类模型评估和回归模型评估。
1.6.1 分类模型评估
- 准确率:预测正确的数占样本总数的比例。
- 精确率:正确预测为正占全部预测为正的比例。
- 召回率:正确预测为正占全部正样本的比例。
- F1-score:主要用于评估模型的稳健性。
- AUC指标:主要用于评估样本不均衡的情况。
1.6.2 回归模型评估
1.6.3 拟合
模型评估用于评价训练好的的模型的表现效果,其表现效果大致可以分为两类:过拟合、欠拟合。
在训练过程中,你可能会遇到如下问题:
训练数据训练的很好啊,误差也不大,为什么在测试集上面有问题呢?当算法在某个数据集当中出现这种情况,可能就出现了拟合问题。
(1)欠拟合
(2)过拟合
过拟合((over-fitting)∶所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。
1.7 Azure平台简介
Azure Machine Learning (简称"“AML")是微软在其公有云Azure上推出的基于Web使用的一项机器学习服务,机器学习属人工智能的一个分支,它技术借助算法让电脑对大量流动数据集进行识别。这种方式能够通过历史数据来预测未来事件和行为,其实现方式明显优于传统的离业智能形式。
微软的目标:是简化使用机器学习的过程,以便于开发人员、业务分析师和数据科学家进行广泛、便捷地应用。
这款服务的目的:在于“将机器学习动力与云计算的简单性相结合”。
AML目前在微软的Global Azure云服务平台提供服务,用户可以通过站点: https://studio.azureml.net/申请免费试用。UCI机器学习数据库的网址:http://archive.ics.uci.edu/ml/
1.8 深度学习简介【了解】
1.8.1 深度学习--神经网络简介
深度学习演示链接:http://playground.tensorflow.org
1.8.2 深度学习各层负责的内容
增加层数:通过更抽象的概念识别物体,器官层,分子层,原子层。
增加结点数:增加同一层物质的种类。
2.机器学习基础环境安装与使用
2.1 库的安装
整个机器学习基础阶段会用到Matplotlib、Numpy、Pandas等库
注意:
每个包安装的过程中,尽量指定稳定版本进行安装。
2.2 Jupyter Notebook的使用
2.2.1 Jupyter Notebook介绍
Jupyter项目旨在开发跨几十种编程语言的开源软件,开放标准和用于交互式计算的服务。
2.2.2 为什么使用Jupyter Notebook
总结:Jupyter Notebook相比 Pycharm在画图和数据展示方面更有优势。
2.2.3 简单操作介绍
在cmd中输入jupyter notebook就可以打开。
2.2.4 markdown功能
esc + m
3.Matplotlib详讲
3.1 Matplotlib之HelloWorld
3.1.1 什么是Matplotlib
- 是专门用于开发2D图表(包括3D图表)
- 使用起来及其简单
- 以渐进、交互式方式实现数据可视化
3.1.2 为什么要学 Matplotlib
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
- 能将数据进行可视化,更直观的呈现
- 使数据更加客观、更具说服力
例如下面两个图为数字展示和图形展示:
3.1.3 实现一个简单的Matplotlib画图
import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(20,8),dpi=100)
#2.绘制图像
x=[1,2,3]
y=[4,5,6]
plt.plot(x,y)
#3.显示图像
plt.show()
运行结果:
3.1.4 认识Matplotlib图像结构(拓展,了解)
3.1.5 Matplotlib三层结构(拓展,了解)
(1)容器层
容器层主要由Canvas、Figure、Axes组成。
Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。
Figure是Canvas上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。
Axes是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。
- Figure:指整个图形(可以通过plt.figure()设置画布的大小和分辨率等)
- Axes(坐标系):数据的绘图区域
- Axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签
特点为∶
- 一个figure(图像)可以包含多个axes(坐标系/绘图区),但是一个axes只能属于一个figure。
- 一个axes(坐标系/绘图区)可以包含多个axis(坐标轴),包含两个即为2d坐标系,3个即为3d坐标系。
(2)辅助显示层
辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。
该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。
(3)图像层
图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。
总结:
- Canvas(画板)位于最底层,用户一般接触不到
- Figure (画布)建立在Canvas之上
- Axes(绘图区)建立在Figure之上
- 坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上
3.2 折线图(plot)与基础绘图功能
3.2.1 折线图绘制与保存图片
为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用。
(1)matplotlib.pyplot模块
matplotlib.pytplot包含了一系列类似于matlab的画图函数。它的函数作用于当前图形(figure)的当前坐标系。
import matplotlib.pyplot as plt
(2)折线图绘制与显示
展现上海一周的天气,比如从星期一到星期日的天气温度如下:
import matplotlib.pyplot as plt
#1.创建画布
plt.figure(figsize=(10,10))
#2.绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
#3.显示图像
plt.show()
运行结果:
(3)设置画布属性与图片保存
plt.figure(figsize=(),dpi=)
figsize:指定图的长度
dpi:图像的清晰度
plt.savefig(path)
注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。所以,图像保存一定要放到show前面。
3.2.2 完善原始折线图1(辅助显示层)
案例:显示温度变化状况。
需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度。
#画出温度变化图
import random
import matplotlib.pyplot as plt
#0.准备x、y坐标的数据
x=range(60)
y_shanghai=[random.uniform(10,15) for i in x]
#1.创建画布
plt.figure(figsize=(20,8),dpi=200)
#2.绘制折线图
plt.plot(x,y_shanghai)
#2.1 添加x、y轴刻度
y_ticks=range(40)
plt.yticks(y_ticks[::5])
x_ticks_label=['11点分'.format(i) for i in x]
plt.xticks(x[::5],x_ticks_label[::5])
#plt.xticks(x_ticks_label[::5])#报错 ==> 必须最开始传递进去的是数字
#3.显示图像
plt.show()
运行结果:
中文显示问题的解决:
SimHei字体下载路径:https://us-logger1.oss-cn-beijing.aliyuncs.com/SimHei.ttf
3.2.3 添加网格显示
为了更加清楚地观察图形对应的值:plt.grid(True,linestyle='--',alpha= 0.5)
参数:
linestyle --绘制网格的方式alpha --透明度
3.2.4 添加描述信息
添加x轴、y轴描述信息及标题。
plt.xlabel('时间',fontsize=20)
plt.ylabel('温度',fontsize=20)
plt.title('xxxxx',fontsize=20)
3.2.5 多次plot
需求:添加一个城市的温度变化。
收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下:
y_beijing=[random.uniform(1,3) for i in x]
plt.plot(x,y_beijing,color='b',linestyle='-.',label='北京')
#显示图例
plt.legend(loc='best')
3.2.6 设置图形风格
显示图例:plt.legend(loc='best')
注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。
3.2.7 多个坐标系显示-plt.subplots(面向对象的画图方法)
matplotlib.pyplot.subplots(nrows=1, ncols=1,**fig_kw)创建一个带有多个axes(坐标系/绘图区)的图。
注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。
#画出温度变化图
import random
import matplotlib.pyplot as plt
#0.准备x、y坐标的数据
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]
y_beijing=[random.uniform(1,14) for i in x]
#1.创建画布
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)
#2.绘制折线图
axes[0].plot(x,y_shanghai,color='r',linestyle='--',label='上海')
axes[1].plot(x,y_beijing,color='g',linestyle='-.',label='北京')
#2.1 添加x、y轴刻度
x_ticks_label=['11点分'.format(i) for i in x]
y_ticks=range(40)
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
#2.2 添加网格
axes[0].grid(True,linestyle='--',alpha=1)
axes[1].grid(True,linestyle='--',alpha=1)
#2.3 添加描述
axes[0].set_xlabel('时间',fontsize=25)
axes[0].set_ylabel('温度',fontsize=25)
axes[0].set_title('上海',fontsize=25)
axes[1].set_xlabel('时间',fontsize=25)
axes[1].set_ylabel('温度',fontsize=25)
axes[1].set_title('北京',fontsize=25)
#2.4显示图例
axes[0].legend(loc='best')
axes[1].legend(loc='best')
#3.显示图像
plt.show()
运行效果:
3.2.8 折线图应用场景
- 呈现公司产品(不同区域)每天活跃用户数
- 呈现app每天下载数量
- 呈现产品新功能上线后,用户点击次数随时间的变化
- 拓展:画各种数学函数图像
注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像。
import random
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams['axes.unicode_minus']=False #解决负号显示问题
#0.准备数据
x=np.linspace(-10,10,1000)#[-10,10]1000个数据
y=np.sin(x)
#1.创建画布
plt.figure(figsize=(20,8),dpi=100)
#2.绘制函数图像
plt.plot(x,y)
#2.1显示网格
plt.grid()
#3.显示图像
plt.show()
运行结果:
3.3 常见图形绘制
https://matplotlib.org/index.html
3.3.1 常见图形种类及意义
Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图。
我们需要知道不同的统计图的意义,以此来决定选择哪种统计图来呈现我们的数据。
(1)折线图
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图。
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)机器学习之随机森林
如果大家想学人工智能的话,那么就一定不能够忽视有关机器学习的内容。这时候就会有人问,什么是机器学习?所谓机器学习就是一门多领域交叉学科,涉及概率论、统计学、逼近论等多门学科。机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的一门技术,而机器学习中随机森林是一个十分重要的算法,在这篇文章中我们就详细给大家介绍一下随机森林的相关知识。
一般来说,随机森林是用于分类和回归的监督式集成学习模型。为了要使整体性能更好,因此集成学习模型聚合了多个机器学习模型。这是因为每个模型单独使用时性能表现的不是很好,但如果放在一个整体中则很强大。在随机森林模型下,使用大量弱因子的决策树,来聚合它们的输出,结果能代表更强的集成。
大家可能知道的是,在任何机器学习模型中,有两个误差来源:偏差和方差。当然,随机森林也不例外,为了更好地说明这两个概念,我们假设已经创建了一个机器学习模型并已知数据的实际输出,用同一数据的不同部分对其进行训练,结果机器学习模型在数据的不同部分产生了不同的输出。
为了确定偏差和方差,对这两个输出进行比较,偏差是机器学习模型中预测值与实际值之间的差异,而方差则是这些预测值的分布情况。这就是随机森林的偏差和方差。而简单来说,偏差是当算法作了太多简化假设之后出现的错误,这导致模型预测值与实际值有所出入。方差是由于算法对训练数据集中小变化的敏感性而产生的误差;方差越大,意味着算法受数据变化的影响更大。其实对于偏差和方差大家不必担心,这是因为理想情况下,偏差和方差都会很小,这意味模型在相同数据集的不同数据中的预测值很接近真值。当这种情况发生时,模型可以精确地学习数据集中的潜在模式。
在这篇文章中我们介绍了机器学习的概念以及机器学习的两个误差来源导致的原因,其实这些误差都是可以避免的,随机森林就可以减小这种误差,那么随机森林怎么减小这个误差呢,随机森林有什么优缺点呢?我们在下一篇文章中继续为大家介绍这些内容。
以上是关于机器学习之基础知识(全)的主要内容,如果未能解决你的问题,请参考以下文章