深度学习 | 绪论

深度学习及Python基础、Python第三方库的使用

Posted by JoselynZhao on April 22, 2019

深度学习简介

应用

  • 视频图像
  • 语音 : 语音识别、语音合成、声纹识别
  • 自然语言处理:机器翻译、信息检索、舆情分析
  • 控制决策:游戏

深度学习基本原理

深度学习本质

机器学习:学习如何映射 F(x): 数据 ￿ 结果 数据规律复杂——F(x) 复杂 一把学出 F(x) 有点难,能不能简化? 在这里插入图片描述

深度学习vs传统机器学习

机器学习:手工设计特征和模型,并学习数据分布 深度学习:侧重从大量数据中直接学习高维、复杂的数据特征 在这里插入图片描述 机器学习: 实现人工智能的方法 深度学习: 机器学习的一种特殊形式,是一种表示学习 在这里插入图片描述

深度学习基本原理

来源:人工神经网络 实质:非常“深”的人工神经网络 目的:学习数据-> 特征 特点:多层表达,高层复杂特征是底层简单特征的抽象 在这里插入图片描述

深度学习发展的原因

  • 数据量:互联网提供了大量的数据,与日俱增的数据量推动了深度学习的发展。
  • 计算能力
    1. 摩尔定律
    2. 针对深度学习的GPU
    3. 人工智能芯片(TPU、Tesla)
  • 促进构建更深网络的算法发展:Relu、BP、Dropout

深度学习小结

  • 概念:源于神经网络,现在是一系列能够用来构建可组合可微分的体系结构的技术和方法
  • 相比传统机器学习:适用于从大量数据中学习复杂特征
  • 效果:实实在在的成效,突破弱人工智能,但强人工智能还远未达 到

Python 基础

Python特性

  • 开源的、解释性,面向对象编程语言
  • 优雅的语法,可读性强
  • 丰富的库,可处理各种工作
  • 支持类和多层继承等面向对象编程技术
  • 跨平台,如 Unix,Windows,MacOS 等等

使用python的知名项目

  • Reddit:社交分享网站,最早使用 Lisp 开发,在 2005 年转为 Python
  • Dropbox:文件分享服务
  • 豆瓣网:文青大本营
  • BitTorrent:BT 下载软件客户端
  • Civilization IV :《文明 4》
  • Google Groups、Gmail、Google Maps 等

搭建python编程环境

集成开发环境

  • Visual Studio:VS 下集成 python 开发环境, 目前仅支持 Windows, 调试、编辑和 C++ 在 VS 中类似
  • PyCharm:JetBrains 开发的 Python IDE,支持 MacOS、Windows、 Linux 等系统;
  • PyCharm 功能:调试、语法高亮、Project 管理、代码跳转、自动完 成、单元测试、版本控制…

安装Python

  • Anaconda: 可以便捷获取和管理 Python 库。包含 conda、Python 在内的超过 180 个科学库及其依赖项
  • 适用平台:Windows,macOS,Linux
  • 推荐使用对应 Python 3.6 的版本

只要装好了anaconda ,python就装好了。 验证是否装好了

conda --version

Python数据类型

Python基本数据类型

数字类型和布尔类型

  • 无需声明类型,系统根据变量赋值语句记性判定。

    字符串类型

  • 用于深度学习程序中配置数据路径等信息
  • 两种定义方式,双引号和单引号

Python 容器类型

在深度学习的实践中,数据集扮演重要的角色 假设数据集 D 包含 N 个训练样本,每个样本为三维浮点数,并对 应一维整形标签 (1.73, 3.86, 2.50)-> 1 (2.56, 9.75, 3.21)-> 2 …… 用基本数据类型难以定义 使用容器类型

列表(List)和元组(Tuple)

将list转为tuple

mytuple  = tuple(myList1)

列表和元组的设计目的

  • 列表:用于存储需要经常修改的内容
  • 元组:用于存储不希望改变的内容

列表和元组的具体区别:

  • 初始化后,列表可以改变而元组不可改变
  • 元组通常由不同的数据组成,列表是相同类型的数据队列
  • 元组表示的是结构,列表表示的是顺序
  • 元组可以作为字典的 key,但是列表不行

元组使用案例: 定义数据集 D 中的单个训练样本: 表示结构 不可改变 例如:(1.73, 3.86, 2.50)、(2.56, 9.75, 3.21) 等

列表使用案例: 定义整个数据集 D: 数据列表:包含所有训练样本元组:[(1.73, 3.86, 2.50), (2.56, 9.75,3.21), …] 标签列表:包含所有标签:[1, 2, …] 表示顺序 可以增减或修改数据

列表和元组的索引访问: 列表和元组的索引都是从0开始。

列表和元组的分片访问:

  • 基本方法:myList[0:3:1] [起点元素索引: 终点元素索引: 跨度]
  • 左闭右开:起点元素包含在结果中,终点元素不包含在结果中
  • 负数索引:从后往前计数,最后一个元素索引为-1

在这里插入图片描述 在这里插入图片描述 列表元素的批量修改: 在这里插入图片描述

字典

  • 存储键(key)值(value)对
  • 字典数据能够使用键名快速取回、添加、删除、编辑值
  • 数据集 D 也可以使用字典表示 1. 键:训练数据(元组) 2. 值:标签(整型数) 在这里插入图片描述 访问和修改字典:
  • 访问:通过键访问值
  • 修改:键不可直接修改,值可以修改
  • 添加键值对:直接添加
  • 删除键值对:del

通过[]来取键。 遍历字典: 在这里插入图片描述 字典类型下的更多函数: 在这里插入图片描述 pop之后就会从字典中删除。

集合

  • 使用大括号或者 set() 函数创建集合,
  • 注意:创建一个空集合必须用 set() 而不是,因为是用来创建一个 空字典
  • 可以使用列表创建集合
  • 在深度学习中可用来统计数据集类别数量
Labels_set= set(Labels)

集合的运算: 在这里插入图片描述 集合的操作:

  • 添加元素 s.add( x )
  • 移除元素 s.remove( x )
  • 计算集合元素个数 len(s)
  • 清空集合 s.clear()
  • 判断元素是否在集合中存在 x in s
  • 通过将数据集标签列表转为集合,可以获取类别数量等信息

Python 函数

Python使用def关键字创建函数:

def function_name(arg1,arg2...):
		# statement inside function

Python 函数仅支持返回一个值,可以通过返回元组的方式变相实现返回多个值。

在这里插入图片描述

常用Python库的使用

利用常用Python库处理股票指数预测问题

股票指数预测:

  • 通过第前 300 天的股市数据:X, 预测当天的收盘价: Y, 既是X→Y
  • 第前 300 天的股市数据 X = [x1, x2, …, xn]T 是包含多个特征的向 量,特征包括:
    1. 收盘价 x1
    2. 最高价与最低价的变化百分比 x2
    3. 收盘价与开盘价的变化百分比 x3
    4. 成交量 x4

      线性回归

      线性回归的定义: 在统计学中,线性回归 (Linear regression) 是利用称为线性回归方 程的最小二乘函数对一个或多个自变量和因变量之间关系进行线 性建模的一种回归分析 只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归

多元线性回归的形式: 在这里插入图片描述 需要解决的问题是多元回归。

Python 库

标准库 : pprint,sys,os,… 第三方库 Numpy Scipy Matlibplot Scikit-learn Pandas ……

第三方库配置

第三方库安装

conda install  <libname>

第三方库更新

conda update <libname>

第三方库的导入

import numpy
import numpy as np
from numpy import array

案例:使用第三方库进行股价预测

流程

在这里插入图片描述 Pandas 库:

  • 提供快捷处理结构化数据的大量数据结构和函数
  • 兼具高性能数据计算功能以及电子表格和关系型数据库的灵活数据处理功能
  • 提供大量适用于金融数据的高性能时间序列分析功能和工具

数据加载 (Pandas处理表格数据)

导入pandas 模块:

import pandas as pd

pandas.read_csv 模块:加载 csv 文件:

df = pd.read_csv(googlestock.csv)

df 数据类型:pandas.core.frame.DataFrame

将 df 修改为按时间戳索引,以便后续处理:

df[Date] = pd.to_datetime(df[Date]) 
df.set_index(Date, inplace=True)

将Date项变为索引项,不再是真正的数据 在这里插入图片描述 ** 预处理 DataFrame 类型数据:**

df[HL_PCT] = (df[Adj. High] - df[Adj.Close]) / df[Adj. Close]
* 100.0 # 最高价与最低价的变化百分比

df[PCT_change] = (df[Adj. Close] - df[Adj.Open]) / df[Adj.Open] * 100.0 # 收盘价与开盘价的变化百分比

df = df[[Adj. Close, HL_PCT, PCT_change,Adj.Volume]] # 最终进行预测时需要的特征

df[label] = df[Adj. Close].shift(300) # 标签:以收盘价为预测指标,每一项特征对应的标签为 300 个时间片之后的股价

得到的数据结果: 在这里插入图片描述

数据格式转换(Numpy)

NumPy

python 科学计算的基础包

  • Numerical Python
  • 快速高效的多维数组对象 ndarray
  • 用于对数组执行元素级计算及直接对数组执行数学运算的函数
  • 用于读写磁盘上基于数组的数据集工具
  • 线性代数运算、傅里叶变换、随机数生成
  • 将 C、C++、Fortran 代码集成到 Python 工具
  • 算法之间传递数据的容器

ndarray可以作为数据类型转化的桥梁。

NumPy 数组的创建:向 array 中传入一个 list:

  • 一维数组: np.array([1,2,3])
  • 二维数组: np.array([[1,2,3],[4,5,6]])
  • 随机数组: x = np.random.rand(10)

显示数组元素的属性 在这里插入图片描述 改变数组元素类型 在这里插入图片描述 改变数组的尺寸:reshape方法 在这里插入图片描述 将reshape 的某个参数指定位-1时,numpy会根据实际数组元素个数自动替换-1 为具体的大小。 常用于数据量比较大的时候。 在这里插入图片描述 元素所以(基于列表和元组的索引方式):从零开始,左闭右开。 在这里插入图片描述 使用布尔型索引 在这里插入图片描述 使用条件索引 在这里插入图片描述 元素修改 在这里插入图片描述 多维数组的索引和切片 在这里插入图片描述 多维数组的布尔索引和切片 在这里插入图片描述 ufunc操作:可对数组的每个元素进行操作的函数 在这里插入图片描述 四则运算符同样具有ufunc属性 在这里插入图片描述 比较操作 在这里插入图片描述 矩阵乘法 在这里插入图片描述 文件存取(假设有数组array为a,类型为int32) 在这里插入图片描述 将 DataFrame 的数据转换成 Numpy 矩阵,并分为数据和标签,以 便下一步处理 在这里插入图片描述 然后可以利用 Scikit-learn 等第三方库对 X 和 y 做进一步处理

数据预处理(Scikit-learn)

  • python 机器学习库
  • 进行数据挖掘和数据分析的简单而高效的工具
  • 基于 NumPy,SciPy 和 matplotlib 构建
  • 支持数据预处理、降维、回归、聚类、分类等操作

在这里插入图片描述 案例 1:数据预处理 sklearn.preprocessing.scale 模块:数据零均值化和单位方差化在这里插入图片描述 案例 2:数据特征降维 sklearn.decomposition.PCA 模块:PCA 数据降维 在这里插入图片描述 案例 3:数据集处理 sklearn. model_selection.train_test_split 模块:快速划分训练集与测 试集 在这里插入图片描述 案例 4:机器学习模型 sklearn.linear_model. LinearRegression 模块:线性回归 举例:用线性回归做直线拟合 (注意:之前股票回归的线性回归是 做多元数据预测) 在这里插入图片描述

股价预测程序:对调用 Numpy 生成的数据和标签矩阵 X 和 y,使 用 Scikit-learn 进行进一步处理: 在这里插入图片描述

完成数据规范化和训练测试集划分之后,调用线性回归模块进行 回归预测 在这里插入图片描述

clf = sklearn.linear_model.LinearRegression() # 定 义 线 性回归器
clf.fit(X_train, y_train) # 开 始 训 练
accuracy = clf.score(X_test, y_test) # 测 试 并 得 到 测 试 集性能
forecast_set = clf.predict(X_lately) # X_lately: 一 部 分不包括在训练和测试集中的数据,用于生成股价预测结果

结果可视化(Matplotlib)

完成线性回归训练和预测之后,下一步需要输出预测结果

结果可视化工具(matplotlib)

  • matplotlib.image 模块:图像操作
  • matplotlib.pyplpot 模块:显示图像 在这里插入图片描述

    实现数据可视化

    在这里插入图片描述

股价预测程序的结果绘制分成两个部分: (1)已有的收盘价格数 据; (2)预测的未来收盘价 在这里插入图片描述 绘制出来的效果 在这里插入图片描述

第三方库:Scipy

  • 基于 Numpy 之上,操控 Numpy 数组进行科学计算
  • 专门解决科学计算中各种标准问题域的包的集合
  • 数值积分、矩阵分解、信号处理、稀疏矩阵和线性系统求解器、统 计工具等。

    1. scipy.io:加载和保存 MATLAB 文件
    2. scipy.linalg:包含一系列线性代数操作
    3. Scipy.optimize:优化和拟合

Scipy.io 模块:保存和加载 MATLAB 文件 (mat) 在这里插入图片描述

  1. scipy.linalg 模块:标准的线性代数操作 scipy.linalg.det() 函数:计算方阵的行列式 scipy.linalg.inv() 函数:矩阵求逆
  2. scipy.fftpack:快速傅立叶变换

scipy.optimize:优化和拟合 在这里插入图片描述 绘制效果如下: 在这里插入图片描述