求业之精,别无他法,日专而已矣!
一、概论
1.机器学习是什么
2.机器学习做什么
3.机器学习基本概念
二、机器学习四剑客(Numpy、Pandas、PIL、Matplotlib)
1.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('------------------------------------------')
>>函数六: 矩阵乘法
注意:numpy提供了用于矩阵乘法的 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的最小二乘解 |