机器学习四剑客1——Numpy

求业之精,别无他法,日专而已矣!

一、概论

        1.机器学习是什么

        2.机器学习做什么

        3.机器学习基本概念

二、机器学习第一步:数据分析

        1.Python被大量应用在数据挖掘和深度学习领域;

        2.其中使用极其广泛的是Numpy、Pandas、Matplotlib、PIL等库;

        3.数据分析流程:提出问题--准备数据--分析数据--或的结论--成果可视化。

三、机器学习四剑客(Numpy、Pandas、PIL、Matplotlib)

        1.Numpy:是高性能科学计算和数据分析的基础包。

        2.Pandas:是python第三方库,提供高性能易用数据类型和分析工具。

        3.PIL:是一个具有强大图像处理能力的第三方库。用途:图像处理

        4.Matplotlib:是一个主要用于绘制二维图形的Python库。用途:绘图、可视化

四、四剑客的应用

        1.数据增强:深层神经网络一般都需要大量的训练数据才能获得比较理想的结果。在数据量有限的情况下,可以通过数据增强(Data Augmentation)来增加样本的多样性,提高模型鲁棒性

        1)增加数据量(翻转/噪声/旋转/裁剪/缩放/拉伸/模糊)

        2)采集更多的图像特征

        3)使网络可见更多的数据变化,提高模型的泛化能力

        2.训练可视化

        3.数据可视化

第一节:Numpy

  • Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其功能如下:
  • ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
  • ndarray数组是Numpy的基础数据结构。
  • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 用于集成由C、C++、Fortran等语言编写的代码的工具。

优点:1)批量操作比列表更快;

           2)支持广播机制,矩阵运算不需要写for循环;

           3)底层C语言;

# 创建ndarray
import numpy as np
data = [1, 2, 3, 4]
arr = np.array(data)  # 创建ndarray
print(arr)
print(type(arr))
print(arr.shape)      # 打印数组的形态

>>函数一: numpy.zeros() 用于机器学习程序中,函数提供给定形状和类型的新数组, 并用零填充。

# 模板:numpy.zeros(shape, dtype=float, order='C')

import numpy as np
arr_zero = np.zeros(5, dtype=int, order='C')
print(arr_zero)
print(arr_zero.dtype)
print(type(arr_zero))

参数解析:numpy.zeros(shape, dtype=float, order='C')

1)shape:整数或整数元组  此参数创建数组的形状, 例如(3, 2)或2。

2)dtype:数据类型(可选)    此参数用于定义数组的所需数据类型。默认情况下, 数据类型为numpy.float64。此参数对于定义不是必需的。

3)order:{‘C’, ‘F’}(可选)   此参数用于定义存储数据的顺序, 即行(C样式)或列(Fortran样式)。

拓展:np.empty() 函数创建一个没有任何具体值的ndarray数组,是创建数组最快的方法,根据给定的维度和数值类型返回一个新的数组,其元素不进行初始化。

import numpy as np

# 创建全1数组
arr_one = np.ones((2,2), dtype=int, order='C')
print(arr_one)
print(arr_one.dtype)

# 创建全1数组
arr_empty = np.empty((2,2))
print(arr_empty)
print(arr_empty.dtype)

# np.empty()函数创建一个没有任何具体值的ndarray数组,是创建数组最快的方法。
# 根据给定的维度和数值类型返回一个新的数组,其元素不进行初始化。

>>函数二: 创建随机数组

import numpy as np

# 01 创建随机数组

ary = np.arange(1, 10)
print(ary)

# 可以生成浮点数
ary = np.arange(0.1,1,0.1)
print(ary)

#设置随机数种子
np.random.seed(10)

# 均匀分布
arr1 = np.random.rand(2,2)                # 创建指定形状的数组(范围在0至1之间)
arr2 = np.random.uniform(0,10)            # 创建指定范围内的一个数
arr3 = np.random.randint(0,10)            # 创建指定范围内的一个整数

# 正态分布
a = np.random.randn(3,3)                  # 生成标准正态分布随机数
arr4 = np.random.normal(0.5, 0.1, (2,2))  # 给定均值/标准差/维度的正态分布

# 02 随机打乱数组序列
np.random.shuffle(a)
print(a)

print('arr1:', arr1)
print('arr2:', arr2)
print('arr3:', arr3)
print('arr4:', arr4)

# 查看ndarray的常用属性
print(arr4.size)       # 数组元素个数
print(arr4.shape)      # 数组形状
print(arr4.ndim)       # 数组维度
print(arr4.dtype)      # 数组元素类型

>>函数三: 数组的运算

  • 标量和ndarray数组之间运算;
  • 两个ndarray数组之间运算;

注意:大小相等的数组之间的任何算术运算都会将运算应用到元素级,数组与标量的算术运算也会将标量值传播到各个元素。矢量化(vectorization):不用编写循环即可对数据执行批量运算。

# 数组和标量之间的运算

import numpy as np
arr = np.array([[1, 2], [3, 4], [5, 6]])
print('arr + arr = \n', arr + arr)
print('arr - arr = \n', arr - arr)
print('arr * arr = \n', arr * arr)
print('arr / arr = \n', arr / arr)
print('arr + 1 = \n', arr + 1)
print('arr - 1 = \n', arr - 1)
print('arr * 2 = \n', arr * 2)
print('arr / 2 = \n', arr / 2)
print('1 / arr = \n', 1 / arr)
print('arr ** 2 = \n', arr**2)

>>函数四: 数组的索引和切片

注意:跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。

# 数组的索引和切片

import numpy as np

arr = np.arange(10)
print(arr)
arr_slice = arr[4:8]
print(arr_slice)
arr_slice[:] = 20   # 将一个标量值赋值给一个切片时,该值会自动传播到整个选区
print(arr_slice)
print(arr)

>>函数五: 数学和统计方法

注意:可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算 ,sum、mean以及标准差std等聚合计算既可以当做数组的实例方法调用,也可以当做顶级Numpy函数使用。

# 数学和统计方法

import numpy as np
arr = np.random.randn(3,3)     # 随机创建指定形状数组
print(arr)
print(np.mean(arr))            # 对所有元素求均值
print(arr.mean())              # 对所有元素求均值
print('------------------------------------------')
print('0',np.mean(arr, 0))     # 压缩行,对各列求均值
print(arr.mean(axis=0))        # 压缩行,对各列求均值

print('1',np.mean(arr, 1))     # 压缩列,对各行求均值
print(arr.mean(axis=1))        # 压缩列,对各行求均值
print('------------------------------------------')

print(arr.sum())               # 对所有元素求和
print(arr.std())               # 对所有元素求标准差
print('------------------------------------------')
方法说明
sum对数组中全部或某轴向的元素求和。零长度的数组的sum为0
mean算术平均数。零长度的数组的mean为Nan
std, var分别为标准差和方差,自由度可调(默认为n)
min, max最大值和最小值
argmin, argmax分别为最大和最小元素的索引
cumsum所有元素的累加
cumprod所有元素的累积

>>函数六: 矩阵乘法

线性代数:(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分unumpy提供了一个用于矩阵乘法 dot()函数

# 矩阵乘法
import numpy as np
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
print(np.dot(x,y))
print(x.dot(y))

>>其他常用函数

函数名用途
diag以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
dot矩阵乘法
trace计算对角线元素的和
det计算矩阵行列式
eig计算方阵的特征值和特征向量
inv计算方阵的逆
svd计算奇异值分解(SVD)
inv计算方阵的逆
solve解线性方程组Ax=b,其中A为一个方阵
lstsq计算Ax=b的最小二乘解

>>Numpy保存和导入文件

  •  设置参数sep='  '表述用空白字符来分隔数据
import numpy as np

# 文件读写
datafile = '../data/home/housing.data'
data = np.fromfile(datafile, sep=' ')
print(data)

# 文件保存
np.save('data.npy',data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡先生的笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值