[Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择

2023-11-11

从本系列文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前五篇文章讲解了神经网络基础概念、Theano库的安装过程及基础用法、theano实现回归神经网络、theano实现分类神经网络、theano正规化处理,这篇文章讲解神经网络的评价指标、特征标准化和特征选择,均是基础性知识。主要是学习"莫烦大神" 网易云视频的在线笔记,后面随着深入会讲解具体的项目及应用。基础性文章和在线笔记,希望对您有所帮助,本系列作者采用一篇基础一篇代码的形式讲解,也建议大家一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~

"莫烦大神" 网易云视频地址:http://study.163.com/provider/1111519/course.html

同时推荐前面作者另外三个Python系列文章。

从2014年开始,作者主要写了三个Python系列文章,分别是基础知识、网络爬虫和数据分析。

这里写图片描述 这里写图片描述 这里写图片描述

前文参考:
[Python人工智能] 一.神经网络入门及theano基础代码讲解
[Python人工智能] 二.theano实现回归神经网络分析
[Python人工智能] 三.theano实现分类神经网络及机器学习基础
[Python人工智能] 四.神经网络和深度学习入门知识
[Python人工智能] 五.theano实现神经网络正规化Regularization处理




一. 神经网络评价指标


由于各种问题影响,会导致神经网络的学习效率不高,或者干扰因素太多导致分析结果不理想。这些因素可能是数据问题,学习参数问题等。这就涉及到了神经网络评价指标。
如何评价(Evaluate)神经网络呢?我们可以通过一些指标对神经网络进行评价,通过评价来改进我们的神经网络。评价神经网络的方法和评价机器学习的方法大同小异,常见的包括误差、准确率、R2 score等。



数据分析通常会将数据集划分为训练数据和预测数据,常见的如70%训练集和30%测试集,或者80%训练集和20%测试集。例如,我们读书时包括作业题和考试题,虽然期末考试时间很少,但其得分比例要高于平时作业。

1.误差(Error)

先用误差评价神经网络,如下图所示,随着训练时间增长,预测误差会不断减小,得到更为准确的答案,最后误差会趋近于水平。



2.精准度(Accuracy)

精准度是指预测结果与真实结果的准确率,接近100%是最好的结果。例如,神经网络中分类问题,100个样本中有90个分类正确,则其预测精准度为90%。通过可以使用精准度预测分类问题,那么,如果是回归问题呢?如何评价连续值的精准度呢?我们使用R2 Score值来进行。



3.R2 Score

在评价回归模型时,sklearn中提供了四种评价尺度,分别为mean_squared_error、mean_absolute_error、explained_variance_score 和 r2_score。
参考:https://blog.csdn.net/Softdiamonds/article/details/80061191

    (1) 均方差(mean_squared_error)


    (2) 平均绝对值误差(mean_absolute_error)


    (3) 可释方差得分(explained_variance_score) 
   Explained variation measures the proportion to which a mathematical model accounts for the variation (dispersion) of a given data set.


    (4) 中值绝对误差(Median absolute error)


    (5) R2 决定系数(拟合优度)


    模型越好:r2→1,模型越差:r2→0。Sklearn代码调用如下:

from sklearn.metrics import r2_score

y_true = [1,2,4]
y_pred = [1.3,2.5,3.7]
r2_score(y_true,y_pred)


4.其他标准。

如F1 Score值,用于测量不均衡数据的精度。


过拟合问题:

有时候意外猝不及防,作业题明明会做,但是考试却不理想,因为我们只复习了作业题,而没有深入拓展作业反映的知识。这样的问题也会发生在机器学习中,我们称为过拟合。简言之,过拟合就是训练样本得到的输出和期望输出基本一致,但是测试样本的输出和测试样本的期望输出相差却很大 。当某个模型过度的学习训练数据中的细节和噪音,以至于模型在新的数据上表现很差,我们称过拟合发生了。这意味着训练数据中的噪音或者随机波动也被当做概念被模型学习了。而问题就在于这些概念不适用于新的数据,从而导致模型泛化性能的变差。

下图是经典的误差曲线,红色曲线为训练误差,黑色曲线为测试误差,训练误差校友测试误差,但由于过于依赖平时作业,考试成绩不理想,没把知识拓展开来。

机器学习中解决过拟合方法有很多,常用的包括L1/L2 Regularization(正规化)、Dropout等。
代码详见前一篇博客:
[Python人工智能] 五.theano实现神经网络正规化Regularization处理




交叉验证:
神经网络中有很多参数,我们怎么确定哪些参数更有效解决现有问题呢?这时候交叉验证是最好的途径。交叉验证不仅可以用于神经网络调参,还可以用于其他机器学习的调参。例如:X轴为学习率(Learning rate)、神经网络层数(N-layers),Y轴为Error或精确度,不同神经层数对应的误差值或精准度也不同。


  


由于神经层数目越多,计算机消耗的时间也会增加,所以只需要找到满足误差要求又能节约时间的层结构即可。例如,当误差在0.005以下时都能接收,则采用30层(N-layers=30)的结构即可。




二. 特征标准化

特征标准化(Feature Normalization)又称为正常化或归一化。为什么需要进行特征标准化呢?

为了让机器学习更好地消化,我们需要对数据动些手脚,这就包括特征标准化。现实中,数据来自不同的地方,有不同的规格,被不同人采集。比如房价预测数据,房屋特征可能包括:离市中心距离、楼层数目、房屋面积、所在城市等。



假设用线性回归来做预测,方程可能为:价格 = a*离市中心 + b*楼层 + c*面积
机器学习要求出a、b、c,然后预测价格,其误差定义为:误差 = 预测值  - 实际价格



接着需要对误差进行数据处理,使之变成进步的阶梯,然后反向传递a、b、c,提升下一次的精确度。
那么,这些概念和标准化又有什么关系呢?

我们可以把 a、b、c 想象成三个人,他们共同努力解决一个问题。在该问题中,a工作时总是不知道发生了什么,b的能力适中,c的能力最强。老板看了以后,说你们的结果和我期望的还有些差距,你们快去缩小差距。老板给出的要求是缩小差距,可是a、b、c不知道如何缩小差距,不知道差距在哪?他们只好平分任务,c很快就完成了,b要慢点,a最慢,但总时间很长,c、b需要等a把工作完成才给老板看结果。


这样的效率并不高,把这个问题放到机器学习中,怎么解决呢?
为了方便理解,我们先把b去除掉,留下两个特征属性,如下:价格 = a*离市中心 + c*面积
其中离市中心距离一般0-10取值,而面积一般100-300取值,在公式中,c只要稍微变化一点,它对价格的影响很大,而a变化对价格的影响不会像c那么大,这样的差别会影响最终的效率,所以我们需要进行特征标准化处理,从而提升效率。




我们在机器学习之前,先对数据预先处理一下,对取值跨度大的数据浓缩一下,跨度小的数据扩展一下,使得他们的跨度尽量统一,通常有两种方法:
    1.minmax normalization
    
它们会将所有数据按照比例缩放到0到1之间,有的也可以是-1到1区间。
    2.std normalization
    
它会将所有数据浓缩成平均值为0,方差为1的数据。
通过这些标准化手段,我们不仅能加快机器学习的学习速度,还可以避免机器学习学得特别扭曲。



minmax normalization标准化方法代码如下(参考前文):
#正常化处理 数据降为0-1之间  
def minmax_normalization(data):  
    xs_max = np.max(data, axis=0)  
    xs_min = np.min(data, axis=0)  
    xs = (1-0) * (data - xs_min) / (xs_max - xs_min) + 0  
    return xs 


三. 特征选择

这里使用机器学习的分类器作为贯穿特征选择的例子,分类器只有你在提供好特征时,才能发挥出最好效果,这也意味着找到好的特征,才是机器学习能学好的重要前提。那么,如何区分哪些是好的特征(good feature)?你怎么知道特征是好还是坏呢?

我们在用特征描述一个物体,比如A和B两种物体中,包括两个属性长度和颜色。然后用这些属性描述类别,好的特征能够让我们更轻松的辨别出相应特征所代表的类别,而不好的特征会混乱我们的感官,带来一些没用的信息,浪费计算资源。



避免无意义的信息:
比如对比金毛和吉娃娃,它们有很多特征可以对比,比如眼睛的颜色、毛色、体重、身高等,为了简化我们的问题,我们主要观察毛色和身高这两个特征,而且我们假设这两种狗毛色仅为偏黄色或偏白色。接着我们来对比毛色,结果发现金毛和吉娃娃两种颜色的比例各占一半。


  


然后我们将它们用数据形式展现出来,假设只有两种颜色(偏黄、偏白),用红色表示金毛,蓝色表示吉娃娃,两种狗所占比例各为一半。该数据说明:给你一只毛色偏黄的特征,你是无法判断这只狗是金毛还是吉娃娃的,这就意味着通过毛色判断两种狗的品种是不恰当的,这个特征在区分品种上没有起到作用,我们要避免这种无意义的特征信息。


接下来我们尝试用身高来进行分类,使用Python可视化来进行实验。
----------------------------------------------------------------------------------

import matplotlib.pyplot as plt
import numpy as np
#定义400个样本
gold, chihh = 400, 400 
#平均身高假设为40厘米加上一个随机数,金毛随机幅度稍微大些,吉娃娃小些

gold_height = 40 + 10 * np.random.randn(gold)
chihh_height = 25 + 6 * np.random.randn(gold)
#柱状图可视化显示这些高度数据,红色金毛高度个数,蓝色代表吉娃娃
plt.hist([gold_height, chihh_height], stacked=True, color=['r', 'b'])
plt.show()
----------------------------------------------------------------------------------

如下图所示,高度为50的红色这组数据中,基本上判断这只狗就是金毛,同样高度大于50的也是金毛;而当数据为20时,我们能够说它很可能就是吉娃娃;而高度为30的范围,我们很难判断它是金毛还是吉娃娃,因为两种狗都存在而且数量差别不大。
所以,虽然高度是一个非常有用的特征,但并不完美,这就需要我们引入更多的特征来判断机器学习中的问题。



如果要收集更多的信息,我们就要剔除那些没有意义或不能区分信息的特征,比如毛色,而高度比较有用,保留该特征;同时需要寻找更多的特征来弥补高度的不足,比如体重、跑步速度、耳朵形状等,用这些加起来的信息我们就能弥补单一特征所缺失的信息量。

避免重复性特征:
有时候,我们会有很多特征信息数据,而有些特征虽然名字不同,但描述的意义却相似,比如描述距离的公里和里两种单位,虽然它们在数值上并不重复,但都表示同一个意思。在机器学习中,特征越多越好,但是把这两种信息都放入机器学习中,它并没有更多的帮助。



避免复杂性特征:
同样在这张图片中,如果从A到B,有两种方式可供选择,一种是经纬度,另一种是AB之间的距离。虽然都属于地理为止信息,但是处理经纬度会比计算距离麻烦很多,所以我们在挑选特征时,会增加一条:避免复杂的特征。因为特征与结果之间的关系越简单,机器学习就能够更快地学习到东西,所以选择特征时,需要注意这三点:避免无意义的信息、避免重复性的信息、避免复杂的信息。



一个人如果总是自己说自己厉害,那么他就已经再走下坡路了,最近很浮躁,少发点朋友圈和说说吧,更需要不忘初心,砥砺前行。珍惜每一段学习时光,也享受公交车的视频学习之路,加油,最近兴起的傲娇和看重基金之心快离去吧,平常心才是更美,当然娜最美,早安。
(By:Eastmount 2018-06-12 深夜1点  http://blog.csdn.net/eastmount/ )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择 的相关文章

  • Python Pandas 滚动聚合一列列表

    我有一个简单的数据框 df 和一列列表lists 我想根据以下内容生成一个附加列lists The df好像 import pandas as pd lists 1 1 2 1 2 3 3 2 9 7 9 4 2 7 3 5 create
  • 熊猫按 n 最大总和分组

    我正在尝试使用groupby nlargest and sum在 Pandas 中一起运行 但在运行时遇到困难 State County Population Alabama a 100 Alabama b 50 Alabama c 40
  • 如何让“conda”安装程序查找“PyPi”包

    我试图使用conda http conda pydata org docs using pkgs html managing packages包管理器来安装我的 Python 包 最近 我遇到了 Anaconda org 存储库中不存在我需
  • 导入错误:无法导入名称“FFProbe”

    我无法获取ffprobe包 https github com simonh10 ffprobe在 Python 3 6 中工作 我使用 pip 安装它 但是当我输入import ffprobe it says Traceback most
  • docker 容器中的“(pygame parachute)分段错误”

    尝试在 docker 容器中使用 pygame 时出现以下错误 我想从容器中获取显示 Fatal Python error pygame parachute Segmentation Fault 重现 Docker已安装 docker ru
  • 使用 Python 和 lmfit 拟合复杂模型?

    我想适合椭偏仪 http en wikipedia org wiki Ellipsometry使用 LMFit 将数据转换为复杂模型 两个测量参数 psi and delta 是复杂函数中的变量rho 我可以尝试将问题分离为实部和虚部共享参
  • 将整数系列转换为交替(双元)二进制系列

    我不知道如何最好地表达这个问题 因为在这里谷歌搜索和搜索总是让我找到更复杂的东西 我很确定这是基本的东西 但对于我的生活来说 我找不到一个好的方法来做到这一点下列 给定一个整数序列 比如说 for x in range 0 36 我想将这些
  • 使用 Pandas 从 csv 文件读取标题信息

    我有一个包含 14 行标题的数据文件 在标头中 有经纬度坐标和时间的元数据 我目前正在使用 pandas read csv filename delimiter header 14 读取文件 但这只是获取数据 我似乎无法获取元数据 有人知道
  • 使用 scikit 时 scipy.sparse 矩阵的缩放问题

    在使用 scikit learn 解决机器学习问题时 我需要在使用 SVM 进行训练之前对 scipy sparse 矩阵进行缩放 但在文档 http scikit learn org stable modules preprocessin
  • 会话数据库表清理

    该表是否需要清除或者由 Django 自动处理 Django 不提供自动清除功能 然而 有一个方便的命令可以帮助您手动完成此操作 Django 文档 清除会话存储 https docs djangoproject com en dev to
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • Flymake的临时文件可以在系统临时目录下创建吗?

    我目前正在使用以下代码在 emacs 中连接 Flymake 和 Pyflakes defun flymake create temp in system tempdir filename prefix make temp file or
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 将图与热图(可能是对数)配对?

    How to create a pair plot in Python like the following but with heat maps instead of points or instead of a hex bin plot
  • 如何将 URL 添加到 Telegram Bot 的 InlineKeyboardButton

    我想制作一个按钮 可以从 Telegram 聊天中在浏览器中打开 URL 外部超链接 目前 我只开发了可点击的操作按钮 update message reply text Subscribe to us on Facebook and Te
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 在Python中使用pil读取tif图像时出现值错误?

    我必须读取尺寸的tif图像2200 2200并输入 uint16 我将 PIL 库与 anaconda python 一起使用 如下所示 from PIL import Image img Image open test tif img i
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • PyObjC + Python 3.0 问题

    默认情况下 Cocoa Python 应用程序使用默认的 Python 运行时版本 2 5 如何配置我的 Xcode 项目以便它使用较新的 Python 3 0 运行时 我尝试用新版本替换项目中包含的Python framework 但它不

随机推荐

  • 怎么用Python设置Tkinter(TK)窗口屏幕居中且获得/设置Tkinter窗口的标题

    要修改窗口位置和修改窗口大小 要用到是tk对象提供的geometry方法 该方法的用法是geometry 字符串 这个字符串格式为 窗口宽x窗口高 窗口位于屏幕x轴 窗口位于屏幕y轴 可以只设置窗口大小或者是只设置窗口的x轴和y轴 例如ge
  • 《百万在线 大型游戏服务端开发》前两章概念笔记

    第1章 从角色走路说起 游戏网络通信的流程则是服务端先开启监听 等待客户端的连接 然后交互操作 最后断开 套接字 每个Socket都包含网络连接中一端的信息 每个客户端需要一个Socket结构 服务端则需要N 1个Socket结构 其中N为
  • MySQL数据库表的合并及分区

    今天我们来聊聊处理大数据时Mysql的存储优化 当数据达到一定量时 一般的存储方式就无法解决高并发问题了 最直接的MySQL优化就是分区分表 以下是我个人对分区分表的笔记 1 合并表 把多个结果相同的的表合并为一个容器 容器的类型 Myis
  • 欢聚集团 -- 前端二面

    面试形式 牛客网 电话面试 30多分钟 我二面进行两次 第一次二面自我介绍完 输出等腰三角形代码还没写完牛客网面试页面就死掉了 第一次二面就这样结束了 第二次二面牛客网还是不行就直接电话面试了 面试内容 用JS在控制台输出由 构成的等腰三角
  • Harbor仓库自启动设置

    1 配置文件 cd etc systemd system vi harbor service Unit Description Harbor After docker service systemd networkd service sys
  • Java搭建区块链

    前言 为了更好的理解区块链的底层实现原理 决定自己动手模拟实现一条区块链 思路分析 通过之前的学习 从文本知识的角度 我们知道 创世区块 记账原理 挖矿原理 工作量证明 共识机制等等区块链的相关知识 创建一条区块链 首先默认构造创世区块 在
  • 【Vue介绍】

    Vue js是一套构建用户界面的渐进式框架 Vue 只关注视图层 采用自底向上增量开发的设计 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件 Vue js 使用了基于 HTML 的模板语法 允许声明式地将 DO
  • 通过方法引用获取方法名

    在学习Mybatis plus时 可以通过getter方法的方法引用来获取到对应的字段名 LambdaQueryWrapper
  • vue前端下载——jszip压缩和解压,结合file-saver导出图片zip,每20个图片分一个目录

    使用jszip和file saver导出图片 并打包为zip import JSZip from jszip import FileSaver from file saver 一 jszip解压缩 使用loadAsync zipFile为压
  • 侧信道攻击

    1 侧信道攻击简介 侧信道攻击中所指的侧信道信息一般为这几种 声音 温度 功耗 电磁 色彩 等等 这些信息叫做侧信道信息是因为 在加密硬件进行加密的时候 上述的信息只是加密过程中附带产生的一些物理量 这些物理量不会对加密提供任何好处 而天才
  • OSI七层模型、TCP/IP四层模型(超详细!!!!!)

    OSI七层模型 七层模型 亦称OSI Open System Interconnection 参考模型是国际标准化组织 ISO 制定的一个用于计算机或通信系统间互联的标准体系 一般称为OSI参考模型或七层模型 它是一个七层的 抽象的模型体
  • Matlab_day_3

    Matlab矩阵的表示 1 矩阵的建立 1 直接输入法 如 lt
  • AIGC 基础,从VAE到DDPM 原理、代码详解

    作者 王建周 编辑 汽车人 原文链接 https zhuanlan zhihu com p 607117094 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 AIGC 技术交流群 一 前言 A
  • yolov5 训练一半中断,如何重连

    resume python train py xxx resume last pt
  • 用ENVI为风云三号VIRR地表温度LST日产品添加头文件(地理信息)

    上一篇文章中我们介绍了怎么用ENVI查看风云三号VIRR地表温度LST日产品的属性 下面介绍怎么用ENVI将该产品从HDF格式转换成ENVI标准格式 2019 1 7更新 有小伙伴说头文件中的datum设置成unknown才可以和他的其他矢
  • 【Google drive】【Colab】引用同级下的.py文件

    ps 1 drive后稍等片刻左侧目录会刷新 2 上传文件格式为 ipynb能够直接打开编辑 py文件只读模式
  • 1-5、Lua函数

    1 5 Lua函数 文章目录 1 5 Lua函数 5 1 多返回值 5 2 可变参数 5 3 命名参数 函数有两种用途 1 完成指定的任务 这种情况下函数作为调用语句使用 2 计算并返回值 这种情况下函数作为赋值语句的表达式使用 语法 fu
  • ffmpeg批量转换ape为mp3

    1 新建一个txt文件 并复制如下代码进入 然后保存 echo off title cd d dp0 for a in ape do ffmpeg i sa y acodec libmp3lame aq 0 na mp3 pause 2 把
  • 批量重命名:删除文件名相同的部分或指定的部分

    本代码提供两个函数 1 用于批量重命名文件 重命名时 删除 路径 下的文件名中含有 重复名 的部分 重命名删除同义名 路径 重复名 例如 删除 Image001 png Image002 png Image003 png 中的 Image
  • [Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择

    从本系列文章开始 作者正式开始研究Python深度学习 神经网络及人工智能相关知识 前五篇文章讲解了神经网络基础概念 Theano库的安装过程及基础用法 theano实现回归神经网络 theano实现分类神经网络 theano正规化处理 这