1.机器学习概述
-
人工智能主要分支
- 1、计算机视觉
- 2、语音识别
- 3、文本挖掘/分类
- 4、机器翻译
- 5、机器人
-
机器学习工作流程
-
机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。
- 1、获取数据
- 数据简介
- 一行数据称为一个样本
- 一列数据称为一个特征
- 有些数据有目标值(标签值),有些数据没有目标值(如上表中,电影类型就是这个数据集的目标值)
- 数据类型构成:
- 数据类型一:特征值+目标值(目标值是连续的和离散的)
- 数据类型二:只有特征值,没有目标值
- 数据分割:
- 训练数据:用于训练,构建模型
- 测试数据:在模型检验时使用,用于评估模型是否有效
- 划分比例:
- 训练集:70% 80% 75%
- 测试集:30% 20% 25%
- 数据简介
- 2、数据基本处理
- 即对数据进行缺失值、去除异常值等处理
- 3、特征工程
- 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
- 意义:会直接影响机器学习的效果
- 1、特征提取:将任意数据(文本/图像)转成数字特征
- 2、特征预处理:通过转化函数,将特征转化成更加适合模型的数据过程
- 3、特征降维:不损失或少量损失信息,实现维度(特征个数)减少
- 4、建立模型
- 5、模型评估
- 分类模型评估
- 回归模型评估
- 拟合
- 欠拟合
- 训练集效果不好 测试集效果也不好
- 模型过于简单
- 过拟合
- 训练集效果好 测试集效果不好
- 模型过于复杂
- 模型边缘锯齿状
- 学习训练数据太充分
- 欠拟合
- 1、获取数据
-
深度学习
-
深度学习(Deep Learning)(也称为深度结构学习【Deep Structured Learning】、层次学习【Hierarchical Learning】或者是深度机器学习【Deep Machine Learning】)是一类算法集合,是机器学习的一个分支。
-
库的安装:
matplotlib==2.2.2 ---绘图
numpy==1.14.2---快速计算
pandas==0.20.3---数据处理
tables==3.4.2---HDf5 二进制
jupyter==1.0.0---运行平台
2、机器学习基础环境安装与使用
- Jupyter Notebook使用
- 两种模式通用快捷键
- Shift+Enter,执行本单元代码,并跳转到下一单元
- Ctrl+Enter,执行本单元代码,留在本单元
- 命令模式:按ESC进入
- Y,cell切换到Code模式
- M,cell切换到Markdown模式
- A,在当前cell的上面添加cell
- B,在当前cell的下面添加cell
- 编辑模式:按Enter进入
- 补全代码:变量、方法后跟Tab键
- 为一行或多行代码添加/取消注释:Ctrl+/(Mac:CMD+/)
- 其他(了解)
- 双击D:删除当前cell
- Z,回退
- L,为当前cell加上行号 <!–
- Ctrl+Shift+P,对话框输入命令直接运行
- 快速跳转到首个cell,Crtl+Home
- 快速跳转到最后一个cell,Crtl+End -->
- 回退:Ctrl+Z(Mac:CMD+Z)
- 重做:Ctrl+Y(Mac:CMD+Y)
3、Matplotlib
- matplotlib.pyplot模块
- import matplotlib.pyplot as plt
- 图形绘制流程:
- 1、创建画布 – plt.figure()
- 2、绘制图像 – plt.plot(x, y)
- 3、显示图像 – plt.show()
import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(10, 10), dpi=100)
# 2.绘制折线图
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
# 3.显示图像
plt.show()
- 添加自定义x,y刻度
- plt.xticks(x, **kwargs):x:要显示的刻度值
- plt.yticks(y, **kwargs):y:要显示的刻度值
# 增加以下两行代码
# 构造x轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
# 构造y轴刻度
y_ticks = range(40)
# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
- 中文显示问题解决
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
- 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
- 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)
- 图像保存
# 保存图片到指定路径
plt.savefig("test.png")
#注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
- 完成代码显示:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.plot(x, y_shanghai)
# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)
# 2.4 图像保存
plt.savefig("./test.png")
# 3.图像显示
plt.show()
3.1在一个坐标系中绘制多个图像
- 多次plot
# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]
# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')
- 设置图形风格
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
- 显示图例
plt.legend(loc="best")
- 完整代码:
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)
# 2.4 图像保存
plt.savefig("./test.png")
# 2.5 添加图例
plt.legend(loc=0)
# 3.图像显示
plt.show()
3.2 多个坐标系显示— plt.subplots(面向对象的画图方法)
- matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的图
- 注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]
# 1.创建画布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.绘制图像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
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 添加网格显示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点--12点某城市温度变化图", fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)
# # 2.4 图像保存
plt.savefig("./test.png")
# # 2.5 添加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3.图像显示
plt.show()
- 折线图的应用场景
- 呈现公司产品(不同区域)每天活跃用户数
- 呈现app每天下载数量
- 呈现产品新功能上线后,用户点击次数随时间的变化
- 拓展:画各种数学函数图像
import numpy as np
# 0.准备数据
x = np.linspace(-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常见图形绘制
- 常见图形种类及意义
-
折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
- 特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
- 关键词:变化
- api:plt.plot(x, y)
-
散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。
- 特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
- 关键词:规律
- api:plt.scatter(x, y)
-
柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。
- 特点:绘制连离散的数据,比较数据差别和大小。(统计/对比)
- 关键词:比大小
- api:plt.bar(x, width, align=‘center’, **kwargs)
-
直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。
- 关键词:统计分布
- 特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)
- api:matplotlib.pyplot.hist(x, bins=None)
Parameters: x : 需要传递的数据 bins : 组距
-
饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
- 关键词:占比
- 特点:分类数据的占比情况(占比)
- 注意:数据个数小于0
- api:plt.pie(x, labels=,autopct=,colors)