求业之精,别无他法,日专而已矣!
一、概论
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,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
- 线性代数、随机数生成以及傅里叶变换功能。
- 用于集成由C、C++、Fortran等语言编写的代码的工具。
# 创建ndarray import numpy as np data = [1, 2, 3, 4] arr = np.array(data) # 创建ndarray print(arr) print(type(arr))
>>函数一: 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数组,是创建数组最快的方法。 # 根据给定的维度和数值类型返回一个新的数组,其元素不进行初始化。
>>函数二: 创建随机数组
# 创建随机数组
# 均匀分布
arr1 = np.random.rand(2,2) # 创建指定形状的数组(范围在0至1之间)
arr2 = np.random.uniform(0,10) # 创建指定范围内的一个数
arr3 = np.random.randint(0,10) # 创建指定范围内的一个整数
# 正态分布
arr4 = np.random.normal(0.5, 0.1, (2,2)) # 给定均值/标准差/维度的正态分布
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) # 数组元素类型
>>函数三: 数组的运算
注意:大小相等的数组之间的任何算术运算都会将运算应用到元素级,数组与标量的算术运算也会将标量值传播到各个元素。矢量化(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的最小二乘解 |



