机器学习——Day02
一、人工智能概述
1.人工智能主要分支
1.1计算机视觉
- 人脸识别
1.2自然语言处理
- 语音识别
- 语义识别
1.3机器人
2.人工智能必备三要素
2.1数据
2.2算法
2.3计算力
二、机器学习概述
1.什么是机器学习
- 机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测
2.机器学习工作流程
获取数据--->数据基本处理-->特征工程-->机器学习(模型训练)-->模型评估
3.数据集
3.1数据集专有名词
- 样本
- 特征
- 目标值(标签值)
- 特征值
3.2在数据集中一般
- 一行数据为一个样本
- 一列数据为一个特征
- 有些数据有目标值(标签值),有些数据没有目标值
3.3数据类型构成
- 数据类型一:特征值+目标值(目标值是连续和离散的)
- 数据类型二:只有特征值,没有目标值
3.4数据分割
机器学习一般的数据集会划分为两个部分:
- 训练数据:用于训练,构建模型
- 测试数据:在模型检验时使用,用于评估模型是否有效
划分比例:
- 训练集:70% 80% 75%
- 测试集:30% 20% 25%
3.5数据基本处理
对数进行缺失值、去除异常值等处理
4.特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限
4.1特征提取
4.2特征预处理
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
4.3特征降维
指在某些限定条件下,降低随机变量(特征)个数,得到一组不相关主变量的过程
5.模型评估
三、机器学习算法分类
1.监督学习
- 输入数据是由输入特征值和目标值组成
- 函数的输出可以是一个连续的值,称为回归;或是输出是有限个离散值,称为分类
2.无监督学习
- 输入数据是由输入特征值组成
- 输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类,试图使类内差距最小化,类间差距最大化
3.监督学习和无监督学习的对比
4.半监督学习
训练集同时包含有标记样本数据和未标记样本数据
5.强化学习
- 动态过程,上一步数据的输出是下一步数据的输入
- 目的:长期利益最大化、回报函数(只会提示你是否在朝着目标方向前进的延迟反映)
- 四要素:agent、action、environment、reward
四、模型评估
1.分类模型评估
- 准确率:预测正确的数占样本总数的比例
- 精确率:正确预测为正占全部预测为正的比例
- 召回率:正确预测为正占全部正样本的比例
- F1-score:主要用于评估模型的稳健性
- AUC指标:主要用于评估样本不均衡的情况
2.回归模型评估
2.1均方根误差(RMSE)
- RMSE是一个衡量回归模型误差率的常用公式,但它只能比较误差是相同单位的模型
- a:真实值 p:预测值
2.2相对平方误差(RSE)
- 与RMSE不同,RSE可以比较误差是不同单位的模型
2.3平均绝对误差(MAE)
- MAE与原始数据单位相同,它只能比较误差是相同单位的模型。量级近似于RMSE,但是误差值相对小一些
2.4相对绝对误差(RAE)
- 与RSE不同,RAE可以比较误差是不同单位的模型
2.5决定系数
决定系数(R²)回归模型汇总了回归模型的解释度,由平方和术语计算而得
R²描述了回归模型所解释的因变量方差在总方差中的比例。R²很大,即自变量和因变量之间存在线性关系。如果回归模型是完美的,SSE为零,则R²为1。R²很小,则自变量和因变量之间存在线性关系的证据不令人信服。如果回归模型完全失败,则SSE等于SST,没有防擦很可悲回归解释,则R²为零
3.拟合
模型评估用于评价训练好的模型的表现效果,其表现效果大致可以分为两类:过拟合、欠拟合
3.1欠拟合
- 学习的特征太少了,导致分类不明确
3.2过拟合
- 所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳
五、深度学习简介
1.深度学习——神经网络简介
增加层数:通过更抽象的概念识别物体、器官层、分子层、原子层
增加节点数:增加同一层物质的种类
六、机器学习基础环境安装与使用
1.库的安装
打开终端命令 conda create -n ai python=版本号 conda init 重启终端命令 conda activate ai conda env export > 目的路径\environment.yml2.Jupyter Notebook使用
- day_01篇使用的编辑平台即为Jupyter
打开终端命令 conda activate ai cd /d D:\major\myjupyter\MachineLearning //切换到项目文件地址 jupyter botebook新建Python 3文件 输入print('Hello World') ctrl+Enter运行代码输出
3.jupyter快捷键
七、Matplotlib
1.构图
2.三层结构
2.1容器层
- canvas
- figure
- axes
2.2辅助显示层
- 添加x轴、y轴描述
2.3图像层
- 绘制什么图像的声明
3.折线图(plot)和基础绘图功能
3.1设置画布属性与图片保存
- figsize:指定图的长度
- dpi:图像的清晰度
- plt.savefig(路径):保存图片到指定路径
注意:plt.show()会释放figure资源 如果在显示图像之后保存图片将只能保存空图片
3.2完善原始折线图
1.案例:显示温度变化状况;需求:画出某城市11点到12点1小时内每分钟的温度变化折线图 温度范围在15-18度;效果:
2.准备数据并画出初始折线图
3.3添加自定义x,y刻度
- plt.xticks(x,**kwargs) x:要显示的刻度值
- plt.yticks(y,**kwargs) y:要显示的刻度值
- 注意:第一个参数必须是数字 如果不是数字 需要进行值替换
3.4添加网格显示
- plt.grid(True,linestyle='-',alpha=0.5)
- True:添加 linestyle:绘制网格的方式(虚线或实线) alpha:透明度
3.5添加x,y轴描述
3.6完善原始折线图
- 需求:再添加一个城市的温度变化
#画出温度变化图 #0.准备x,y坐标的数据 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] y_beijing = [random.uniform(15,25) for i in x] #1.创建画布 plt.figure(figsize=(20,8),dpi=80) #2.绘制折线图 plt.plot(x,y_shanghai,label="上海") plt.plot(x,y_beijing,label="北京") #2.1添加x,y轴刻度 x_ticks_labels = ['11点{}分'.format(i) for i in x] plt.xticks(x[::5],x_ticks_labels[::5]) #必须最开始传进去的是数字,x_ticks_labels是字符串 y_ticks = range(40) plt.yticks(y_ticks[::5]) #2.2添加网格线 plt.grid(True,linestyle='-',alpha=0.5) #2.3添加描述,需要声明plot里面的具体值 plt.xlabel("时间",fontsize=20) plt.ylabel("温度",fontsize=20) plt.title("一小时温度变化图",fontsize=20) #2.4显示图例 plt.legend() #3.显示图像 plt.show()3.7多个坐标系显示-plt.subplots(面向对象的画图方法)
#画出温度变化图 #0.准备x,y坐标的数据 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] y_beijing = [random.uniform(15,25) 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,label="上海") axes[1].plot(x,y_beijing,label="北京") #2.1添加x,y轴刻度 y_yicks = range(40) x_ticks_labels = ["11点{}分".format(i) for i in x] 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]) #2.2添加网格线 axes[0].grid(True,linestyle="--",alpha=0.7) axes[1].grid(True,linestyle="--",alpha=0.7) #2.3添加描述 axes[0].set_xlabel("时间") axes[0].set_ylabel("温度") axes[0].set_title("上海一小时温度变化图",fontsize=20) axes[1].set_xlabel("时间") axes[1].set_ylabel("温度") axes[1].set_title("北京一小时温度变化图",fontsize=20) #2.4显示图例 axes[0].legend() axes[1].legend() #3.显示图像 plt.show()3.8折线图的应用场景
- 呈现公司产品(不同区域)每天活跃用户数
- 呈现app每天下载数量
- 呈现产品新功能上线后,用户点击次数随时间的变化
- 拓展:画各种函数图像
3.9常见图形绘制
3.9.1折线图
- 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图
- 特点:能够显示数据的变化趋势,反映事物的变化情况
- api:plt.plot(x,y)
3.9.2散点图
- 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结做坐标点的分布模式
- 特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
- api:plt.scatter(x,y)
#0.数据准备 x = [255.98, 247.07, 253.17, 457.68, 241.53, 301.22, 20.67, 288.45, 163.25, 120.07, 207.48, 342.15, 147.64, 53.06, 224.53, 29.17, 21.49, 483.51, 245.4, 399.62, 343.18] y = [196.55, 203.15, 210.56, 372.49, 202.15, 247.16, 24.97, 239.34, 140.26, 104.13, 176.53, 288.64, 128.97, 49.68, 191.78, 33.1, 30.74, 400.02, 205.03, 330.30, 283.94] #1.创建画布 plt.figure(figsize=(20,8),dpi=100) #2.图像绘制 plt.scatter(x,y) #3.图像显示 plt.show()3.9.3柱状图
- 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中
- 特带你:回执联离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别
- api:plt.bar(x,width,align='center',**kwargs)
- x:具体的值 width:柱状图的宽度 aligen:每个柱状图的位置对齐方式
#0.准备数据 movie_name = ['雷神3','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它'] x = range(len(movie_name)) y = [73853,57767,22345,15969,14873,8725,8716,8318,7916,6764,52222] #1.创建画布 plt.figure(figsize=(20,8), dpi=100) #2.绘制 plt.bar(x, y, color=['b','r','g','y','c','m','y','k','c','g','b'],width=0.5) #2.1 x轴 plt.xticks(x,movie_name,fontsize=15) #2.2网格 plt.grid() #2.3标题 plt.title("某月电影票房统计") #3.显示 plt.show()3.9.4直方图
- 直方图:有一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表述数据,纵轴表示分布情况
- 特点:绘制连续性的数据詹氏一族或者多组数据的分布状况
- api:matplotlib.pyplot.hist(x, bins=None)
- x:具体的值 bins:组距
3.9.5饼图
- 饼图:用于表示不同分类的占比情况 通过弧度大小来对比各种分类
- 特点:分类数据的占比情况
- api:plt.pie(x, labels=,autopct=,colors)
- x:数量 labels:每部分的名称 autopct:占比显示指定%1.2f%% colors:每部分颜色
