文章目录
1.机器学习工作流程
1.获取数据
2.数据处理
3.特征工程
4.模型训练
5.模型评估
2.数据集的介绍
2.1数据简介
在数据集中:
- 一行数据我们成为一个样本
- 一列数据我们称为一个特征
- 有些数据有label值,有些数据没有label值
2.2数据类型构成:
- 数据类型一:特征值+目标值(目标值是连续的和离散的)
- 数据类型二:只有特征值,没有目标值,目标值也叫label值
由数据类型构成判断机器学习算法分类
1.监督学习–有特征值、label值
label值连续–回归
label值离散–分类
2.无监督学习–仅有特征值
3.半监督学习–部分数据有特征值部分数据没有特征值
4.强化学习–动态过程,上一步输出是下一步的输入
四要素:agent、action、environment、reward
3.数据处理
3.1数据划分
训练数据
验证数据
测试数据
3.2数据基本处理
对数据进行缺失值异常值进行处理
4.特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
简而言之就是将数据转化为计算机更好处理的数据的过程
- 意义:会直接影响机器学习的效果
- 数据和特征决定了机器学习的上限,而模型和算法知识逼近这个上限而已
4.1特征提取
将任意数据(文本或图像)转换为可用于机器学习的数字特征(转换为计算机方便识别的语言二进制之类的)
4.2特征预处理
无量纲化处理,将数据转化为同一量纲
4.3特征降维
指定某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程
5.模型训练
选择合适的算法对模型进行训练
6.模型评估
对训练好的模型进行评估
6.1分类模型评估
- 精确率
- 查准率
- 查全率
- 召回率
- F1-score
- AUC
6.2回归模型评估
- 均方根误差
- 相对平方误差
- 平均绝对误差
- 相对绝对误差
- 决定系数
6.3拟合
- 过拟合:模型在训练样本中展现的过优,导致在验证集、测试集中数据表现不佳
- 欠拟合:样本量过少,训练效果不好
7.Jupyter Notebook使用
7.1jupyter定义
开源的科学计算平台,类比ipython,可以运行代码可以做笔记,文件后缀:.ipynb
7.2jupyter和pycharm对比
- jupyter适合做探索性的数据分析,一边分析、一边运行
- pycharm适合做逻辑性强的操作(web)
7.3如何使用
- 从anaconda终端输入jupyter notebook
- 到指定文件夹路径输入cmd按enter进入终端再输入jupyter notebook
7.4cell
一对inout被视为一个代码单元,称为cell
7.5快捷键
- shift+enter,执行本单元代码,并跳转到下一个单元
- ctrl+enter,执行本单元代码,留在本单元
- Y,cell切换到code模式
- M,cell切换到Markdown模式
- A,在当前cell的上面添加cell
- B,在当前cell的下面添加cell
- 双击D删除当前cell
7.6markdown语法
8.Matplotlib
用于开发2D/3D图表,数据分析,基于分析,进行展示
8.1绘图流程
1.创建画布
plt.figure(figsize=(20,8),dpi=100)
#figsize为画布长宽
#dpi为像素
2.绘制图像
x=[1,2,3]
y=[5,8,6]
plt.plot(x,y)
3.显示图像
plt.show()
import matplotlib.pyplot as plt
plt.figure(figsize=(20,8),dpi=100)
x=[1,2,3]
y=[5,8,6]
plt.plot(x,y)
plt.show()
8.2matplotlib三层结构
- 容器层
- canvas
- figure
- axes
- 辅助显示层
- 添加x轴,y轴,标题
- 图像层
- 绘制什么图像的声明
8.3折线图(plot)与基础绘图功能
1.图像保存
plt.savefig("路径")
2.添加x轴,y轴刻度
plt.xticks
plt.yticks
3.添加网格
plt.grid(linestyle=“--”,alpha=1)
# linestyle=“--” 网格方式为--
# alpha=1 透明度
4.添加描述信息
plt.xlabel(“时间”)
plt.ylabel("温度")
plt.title("一小时温度变化图",fontsize=20)
5.多次plot(多条折线图)
定义y1,y2值再进行plt.plot()绘制
6.显示图例
plt.legend(loc=0)
#loc即选一个最好位置的参数,一般选择为0,0是最好的位置参数0就是best
注意:需要在显示之前,声明plot里面的具体值
图像基本绘制完整代码:
#1.生成数据
x=range(60)
y_beijing=[random.uniform(10,20) for i in x]
y_shanghai=[random.uniform(15,25) for i in x]
#2.创建画布
plt.figure(figsize=(20,8),dpi=100)
#3.图形绘制
plt.plot(x,y_beijing,label="北京",color="y",linestyle="-.")
plt.plot(x,y_shanghai,label="上海")
##3.1定义x,y轴刻度
x_ticks_labels=["11点{}分".format(i) for i in x] #如果是字符串要注意进行转换
y_ticks=range(30)
##3.2添加x,y轴刻度
plt.xticks(x[::5],x_ticks_labels[::5])
plt.yticks(y_ticks[::5])
#3.3添加网格
plt.grid(linestyle="--",alpha=1)
#3.4添加描述
plt.xlabel("时间",fontsize=10)
plt.ylabel("温度",fontsize=10)
plt.title("一小时温度变化图",fontsize=20)
#3.5显示图例
plt.legend(loc="best")
#4.图形展示
plt.show()
生成图像:
8.4多个坐标系图像显示
#创建画布
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)
nrows–表示几行
ncols–表示几列
注意:有些方法需要添加set_
#3.图形绘制
axes[0].plot(x,y_beijing,label="北京",color="y",linestyle="-.")
axes[1].plot(x,y_shanghai,label="上海")
注意前边加上axes[0]./[1].就可以
#3.2添加x,y轴刻度
#plt.xticks(x[::5],x_ticks_labels[::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_labels[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_labels[::5])
注意变为axes[0].set_xticks
带有字符串的进行两次标签设置此种就是x轴
#3.3添加网格
#plt.grid(linestyle="--",alpha=1)
axes[0].grid(linestyle="--",alpha=1)
axes[1].grid(linestyle="--",alpha=1)
直接换为axes[0].
#3.4添加描述
#plt.xlabel("时间",fontsize=10)
#plt.ylabel("温度",fontsize=10)
#plt.title("一小时温度变化图",fontsize=20)
axes[0].set_xlabel("时间",fontsize=10)
axes[0].set_ylabel("温度",fontsize=10)
axes[0].set_title("北京一小时温度变化图",fontsize=20)
axes[1].set_xlabel("时间",fontsize=10)
axes[1].set_ylabel("温度",fontsize=10)
axes[1].set_title("上海一小时温度变化图",fontsize=20)
这里需要换为axes[0].set_
#3.5显示图例
#plt.legend(loc="best")
axes[0].legend(loc="best")
axes[1].legend(loc="best")
换为axes[0].
#4.图形展示
plt.show()
这里不变
总结:
- 对于要添加的一般前边要换位axes[0].set_
- 对于只是显示那仅需要把plt.改为axes[0].
完整代码显示
#1.生成数据
x=range(60)
y_beijing=[random.uniform(10,20) for i in x]
y_shanghai=[random.uniform(15,25) for i in x]
#2.创建画布
#plt.figure(figsize=(20,8),dpi=100)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)
#3.图形绘制
#plt.plot(x,y_beijing,label="北京",color="y",linestyle="-.")
#plt.plot(x,y_shanghai,label="上海")
axes[0].plot(x,y_beijing,label="北京",color="y",linestyle="-.")
axes[1].plot(x,y_shanghai,label="上海")
##3.1定义x,y轴刻度
x_ticks_labels=["11点{}分".format(i) for i in x] #如果是字符串要注意进行转换
y_ticks=range(30)
##3.2添加x,y轴刻度
#plt.xticks(x[::5],x_ticks_labels[::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_labels[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_labels[::5])
#3.3添加网格
#plt.grid(linestyle="--",alpha=1)
axes[0].grid(linestyle="--",alpha=1)
axes[1].grid(linestyle="--",alpha=1)
#3.4添加描述
#plt.xlabel("时间",fontsize=10)
#plt.ylabel("温度",fontsize=10)
#plt.title("一小时温度变化图",fontsize=20)
axes[0].set_xlabel("时间",fontsize=10)
axes[0].set_ylabel("温度",fontsize=10)
axes[0].set_title("北京一小时温度变化图",fontsize=20)
axes[1].set_xlabel("时间",fontsize=10)
axes[1].set_ylabel("温度",fontsize=10)
axes[1].set_title("上海一小时温度变化图",fontsize=20)
#3.5显示图例
#plt.legend(loc="best")
axes[0].legend(loc="best")
axes[1].legend(loc="best")
#4.图形展示
plt.show()
生成图像:
8.5折线图的应用场景
1.表述数据变化
2.绘制一些数学图像
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,20,1000)
y=np.sin(x)
plt.figure(figsize=(10,4),dpi=100)
plt.plot(x,y)
x_ticks=range(20)
y_ticks=range(1)
plt.xticks=(x_ticks[::2])
plt.yticks=(y_ticks[::1])
plt.show()
生成图像:
8.6常见图形的绘制
1.折线图 --plt.plot()
变化
2.散点图–plt.sactter()
分布规律
from turtle import color
import matplotlib.pyplot as plt
import numpy as np
# 10个点
N = 10
x1 = np.random.rand(N)
y1 = np.random.rand(N)
x2 = np.random.rand(N)
y2 = np.random.rand(N)
plt.scatter(x1, y1, marker='o',color="r")
plt.scatter(x2, y2, marker='^',color="g")
plt.show()
3.柱状图–plt.bar()
统计、对比
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
names = ['哪吒之魔童降世', '流浪地球', '复仇者联盟4:终局之战', '我和我的祖国', '疯狂的外星人', '中国机长', '飞驰人生', '烈火英雄', '速度与激情:特别行动', '蜘蛛侠:英雄远征',
'扫毒2天地对决', '大黄蜂', '惊奇队长', '比悲伤更悲伤的故事', '哥斯拉2:怪兽之王', '阿丽塔:战斗天使', '攀登者', '银河补习班', '狮子王', '反贪风暴4 '] # 单位(亿)
box_office = [49.26, 46.18, 42.05, 23.36, 21.83, 21.23, 17.03, 16.74, 14.18, 14.01, 12.85, 11.38, 10.25, 9.46, 9.27,
8.88, 8.64, 8.63, 8.23, 7.88]
#绘制画布
plt.figure(figsize=(20,8),dpi=100)
#图形绘制
plt.bar(names,box_office,width=0.3,color="g")
plt.xlabel("影视名称",size=20)
plt.ylabel("总票房(单位:亿)",rotation=90,size=20)
plt.title("2019电影票房排行榜",size=20)
plt.xticks(names,rotation=90,size=12)
#图像展示
plt.show()
4.直方图–plt.hist()
统计、分布
5.饼图–plt.pie()
占比