Python机器学习手册(一)
正在学习机器学习,感觉这本书比较不错,第一次写,没有经验,嘻嘻嘻。
我用的工具是Anaconda中的Jupyter Notebook,代码都跑通了
进入正文咯~
第1章 向量、矩阵和数组
1.0 简介
Numpy是Python机器学习技术栈的基础。Numpy能对机器学习中常用的数据结构——向量(vector)、矩阵(matrice)、张量(tensor)进行高效的操作。
1.1 创建一个向量
#加载Numpy库
import numpy as np
#创建一个行向量
vector_row=np.array([1,2,3])
#创建一个列向量
vector_column=np.array([[1],[2],[3]])
#打印结果
print(vector_row)
print(vector_column)
#[1 2 3]
#[[1]
#[2]
#[3]]
创建一个向量,只需要简单的创建一个一维数组即可
1.2 创建一个矩阵
加载库
import numpy as np
#方法一:使用Numpy创建一个二维数组
matrix=np.array([[1,2],[1,2],[1,2]])
matrix
#运行结果
array([[1, 2],
[1, 2],
[1, 2]])
#方法二:通过Numpy专有函数mat进行构造矩阵
matrix_object=np.mat([[1,2],[1,2],[1,2]])
matrix_object
#运行结果
matrix([[1, 2],
[1, 2],
[1, 2]])
不推荐使用专有函数进行构造矩阵。一方面,矩阵是Numpy的标准数据结构;另一方面,绝大多数Numpy返回的是数组而不是矩阵结构
1.3 创建一个稀疏矩阵
import numpy as np
from scipy import sparse
#创建一个矩阵
matrix=np.array([[0,0],[0,1],[3,0]])
#创建一个压缩的稀疏行(Compressed Sparse Row,CSR)矩阵
matrix_sparse=sparse.csr_matrix(matrix)
print(matrix_sparse)
#运行结果,会返回相应的下标和数值
(1, 1) 1
(2, 0) 3
#创建一个更大的稀疏矩阵
matrix=np.array([[0,0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0,0],[3,0,0,0,0,0,0,0,0]])
#创建压缩行
matrix_large_sparse=sparse.csr_matrix(matrix)
print(matrix_large_sparse)
#运行结果
(1, 0) 1
(2, 0) 3
尽管更大的稀疏矩阵中增加了很多零元素,但是和较小的稀疏矩阵的表示相同,所以说增加的零元素并没有改变稀疏矩阵的大小,也就是说上述两个矩阵所消耗的内存一样¶。
1.4 选择数据
和python中的大多事物一样,Numpy数组的索引也是从0开始的
import numpy as np
#创建一个行向量
vector=np.array([1,2,3,4,5,6])
#创建一个矩阵
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#选择行向量的第三个元素
vector[2]
#运行结果
3
#选择矩阵第二行第二列的元素
matrix[1,1]
#运行结果
5
#选择行向量中所有的元素
vector[:]
#运行结果
array([1, 2, 3, 4, 5, 6])
#选择从0开始,三个元素
vector[:3]
#运行结果
array([1, 2, 3])
#选择第3个元素后的所有元素
vector[3:]
#运行结果
array([4, 5, 6])
#选择行向量的最后一个元素
vector[-1]
#运行结果
6
#选取矩阵的第1行和第2行以及所有列
matrix[:2,:]
#运行结果
array([[1, 2, 3],
[4, 5, 6]])
#选取所有行中的第二列
matrix[:,1:2]
#运行结果
array([[2],
[5],
[8]])
1.5 展示一个矩阵的属性
#展示一个矩阵的形状、大小、维数
#使用shape,size,ndim
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#查看行数和列数
matrix.shape
#查看矩阵的大小
matrix.size
#查看矩阵的维数
matrix.ndim
1.6 对多个元素同时应用某个操作
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#创建一个函数,返回输入值加上100以后的值
add_100=lambda i:i+100
#创建向量化函数
vectorized_add_100=np.vectorize(add_100)
#对矩阵的所有元素应用这个函数
vectorized_add_100(matrix)
#另一种方法对矩阵进行加100的操作
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
matrix+100
1.7 找到最大值和最小值
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#最大值
np.max(matrix)
#最小值
np.min(matrix)
#找到每一行最大的元素
np.max(matrix,axis=1)
#找到每一列最大的元素
np.min(matrix,axis=0)
1.8 计算平均值、方差和标准差
包括整个矩阵、每一行、每一列的平均值、方差和标准差
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#计算平均值
np.mean(matrix)
#计算方差
np.var(matrix)
#计算标准差
np.std(matrix)
#找到每一行的平均值
np.mean(matrix,axis=1)
#找到每一行的方差
np.var(matrix,axis=0)
每一列和上述方法相似
1.9 矩阵变形
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
#将矩阵变化成2*6形式的矩阵
matrix.reshape(2,6)
#将矩阵变化为一行
matrix.reshape(-1,1)
1.10 转置向量或矩阵
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#转置向量
matrix.T
#向量不能转置,行向量可以转置为列向量
np.array([[1,2,3,4,5,6]]).T
1.11 展开一个矩阵
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#展开一个矩阵 转换为一维数组
matrix.flatten()
1.12 计算矩阵的秩
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#计算矩阵的秩
np.linalg.matrix_rank(matrix)
1.13 计算行列式
使用函数linalg.det可计算矩阵的行列式
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#计算矩阵的行列式
np.linalg.det(matrix)
1.14 获取矩阵的对角线元素
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#获取矩阵的对角线元素
matrix.diagonal()
#返回主对角线向上偏移量为1的对角线元素
matrix.diagonal(offset=1)
#返回主对角线向下偏移量为1的对角线元素
matrix.diagonal(offset=-1)
1.15 计算矩阵的迹
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#返回矩阵的迹
matrix.trace()
1.16 计算矩阵的特征值和特征向量
import numpy as np
matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])
#计算特征值和特征向量
eugenvalues,eugenvectors = np.linalg.eig(matrix)
#查看特征值
eugenvalues
#查看特征向量
eugenvectors
1.17 计算点积
import numpy as np
#创建两个向量
vector_a = np.array([1,2,3])
vector_b = np.array([4,5,6])
#计算点击积
np.dot(vector_a,vector_b)
#计算向量的点积
vector_a@vector_b
1.18 矩阵的相加或相减
两种办法,一种利用numpy中的add、subtract函数进行相加或相减一种是直接进行加减。
import numpy as np
#创建两个向量
matrix_a = np.array([[1,1,1],[1,1,1],[1,1,2]])
matrix_b = np.array([[1,3,1],[1,3,1],[1,3,8]])
#将两个矩阵相加
np.add(matrix_a,matrix_b)
#将两个矩阵相减
np.subtract(matrix_a,matrix_b)
matrix_a+matrix_b
1.19 矩阵的乘法
import numpy as np
#创建两个向量
matrix_a = np.array([[1,1,1],[1,1,1],[1,1,2]])
matrix_b = np.array([[1,3,1],[1,3,1],[1,3,8]])
#计算两个矩阵相乘
np.dot(matrix_a,matrix_b)
#两个矩阵相乘
matrix_a@matrix_b
#两个矩阵对应元素相乘
matrix_a*matrix_b
1.20 计算矩阵的逆
import numpy as np
#创建一个矩阵
matrix=np.array([[1,4],[2,5]])
#计算一个矩阵的逆
np.linalg.inv(matrix)
1.21 生成随机数
import numpy as np
#设置随机数种子
np.random.seed(0)
#生成3个0.0到1.0之间的随机浮点数
np.random.random(3)
#生成3个1到10之间的随机整数
np.random.randint(0,11,3)
#从平均值是0.0且标准差是1.0的正态分布中抽取3个数
np.random.normal(0.0,1.0,3)
#从平均值是0.0且散步程度是1.0的logistic分布中中抽取3个数
np.random.logistic(0.0,1.0,3)
#从大于或等于1.0并且小于2.0的范围中抽取3个数
np.random.uniform(1.0,2.0,3)
结束啦!!!