《Python机器学习手册——从数据预处理到深度学习》

这本书类似于工具书或者字典,对于python具体代码的调用和使用场景写的很清楚,感觉虽然是工具书,但是对照着做一遍应该可以对机器学习中python常用的这些库有更深入的理解,在应用中也能更为熟练。

以下是根据书上的代码进行实操,注释基本写明了每句代码的作用(写在本句代码之前)和print的输出结果(写在print之后)。不一定严格按照书上内容进行,根据代码运行时具体情况稍作顺序调整,也加入了一些自己的理解。

如果复制到自己的环境下跑一遍输出,相信理解会更深刻更清楚。

博客中每个代码块代表一次完整的运行结果,可以直接以此为单位复制并运行。


01-向量、矩阵和数组

本节主要是numpy库的基本应用。

包括:

  1. 初始化与格式
  2. 数据读取与批量处理
  3. 数值计算
  4. 矩阵计算
  5. 随机数

01-1 初始化与格式

  1. import numpy as np
  2. # 创建一个行向量
  3. vector = np.array([1,2,3])
  4. # 创建一个列向量
  5. vector = np.array([[1],[2],[3]])
  6. print(vector)
  7. # 创建一个矩阵
  8. matrix = np.array([[0,0],[2,0],[0,3]])
  9. print(type(matrix)) #<class 'numpy.ndarray'>
  10. # 查看行数和列数
  11. print(matrix.shape) #(3, 2)
  12. # 查看元素数量
  13. print(matrix.size) #6
  14. # 查看维数
  15. print(matrix.ndim) #2
  16. # 转换为矩阵格式mat
  17. matrix = np.mat(matrix)
  18. print(type(matrix)) #<class 'numpy.matrix'>
  19. from scipy import sparse
  20. # 转换为压缩的稀疏行矩阵
  21. matrix = sparse.csr_matrix(matrix)
  22. print(matrix)
  23. # (1, 0) 2
  24. # (2, 1) 3
  25. print(type(matrix)) #<class 'scipy.sparse.csr.csr_matrix'>

01-2 数据读取与批量处理

  1. import numpy as np
  2. matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
  3. # 输出矩阵第二行第三列的元素(下标从0开始)
  4. # 注意此处下标与二维list不同
  5. print(matrix[1,2]) # 6
  6. # 一维切片,[起始位置:结束位置],包括起始位置,不包括结束位置元素
  7. # 输出第三个元素之前所有元素
  8. vector = np.array([1,2,3])
  9. print(vector[0:2])
  10. # [1 2]
  11. # 二维切片,与一维类似[起始位置:结束位置],不同维度用','隔开
  12. # '1:'第二行及之后所有行
  13. # ':2'第三列之前所有列
  14. print(matrix[1:,:2])
  15. # [[4 5]
  16. # [7 8]]
  17. # 对一个数组中多个元素同时应用某个函数
  18. # 创建一个函数,add_100返回:输入值+100的值
  19. add_100 = lambda i : i + 100
  20. # 创建向量化函数
  21. vectorized_add_100 = np.vectorize(add_100)
  22. # 对矩阵所有元素应用这个函数
  23. print(vectorized_add_100(matrix))
  24. # [[101 102 103]
  25. # [104 105 106]
  26. # [107 108 109]]

01-3 数值计算

  1. import numpy as np
  2. matrix = np.array([[1,2,3],[4,5,6],[7,8,9]])
  3. # 求矩阵中最大的元素
  4. print(np.max(matrix)) # 9
  5. # 求矩阵中最小的元素
  6. print(np.min(matrix)) # 1
  7. # 求每列最大的元素,axis指维度
  8. print(np.max(matrix, axis = 0)) # [7 8 9]
  9. # 求每行最大的元素
  10. print(np.max(matrix, axis = 1)) # [3 6 9]
  11. # 计算矩阵的平均值
  12. print(np.mean(matrix)) # 5.0
  13. print(type(np.mean(matrix))) # <class 'numpy.float64'>
  14. # 计算矩阵的方差
  15. print(np.var(matrix)) # 6.666666666666667
  16. print(type(np.var(matrix))) # <class 'numpy.float64'>
  17. # 计算矩阵的标准差
  18. print(np.std(matrix)) # 2.581988897471611
  19. print(type(np.std(matrix))) # <class 'numpy.float64'>
  20. # 以上计算均可以加参数axis求每行或每列
  21. # 求每行的平均值
  22. print(np.mean(matrix, axis = 1)) # [2. 5. 8.]

01-4 矩阵计算

01-4-1 矩阵变形与矩阵转置

  1. import numpy as np
  2. matrix = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
  3. # 矩阵变形,不改变元素值,改变矩阵的形状
  4. # 将矩阵从4*3变为2*6
  5. print(matrix.shape) # (4, 3)
  6. matrix = matrix.reshape(2,6)
  7. print(matrix.shape) # (2, 6)
  8. print(matrix)
  9. # [[ 1 2 3 4 5 6]
  10. # [ 7 8 9 10 11 12]]
  11. # 也可以将其中一个维度设为默认'-1',会自己取整除之后的数作为默认维度
  12. matrix = matrix.reshape(3,-1)
  13. print(matrix.shape) # (3, 4)
  14. print(matrix)
  15. # [[ 1 2 3 4]
  16. # [ 5 6 7 8]
  17. # [ 9 10 11 12]]
  18. # 以下三种情况注意区别:
  19. # 情况1
  20. matrix = matrix.reshape(1,-1)
  21. print(matrix.shape) # (1, 12)
  22. print(matrix)
  23. # [[ 1 2 3 4 5 6 7 8 9 10 11 12]]
  24. # 情况2
  25. matrix = matrix.reshape(3,-1)
  26. print(matrix.shape) # (3, 4)
  27. matrix = matrix.reshape(matrix.size)
  28. print(matrix.shape) # (12,)
  29. print(matrix)
  30. # [ 1 2 3 4 5 6 7 8 9 10 11 12]
  31. # 情况3
  32. # 展开矩阵
  33. matrix = matrix.reshape(3,-1)
  34. print(matrix.shape) # (3, 4)
  35. matrix = matrix.flatten()
  36. print(matrix.shape) # (12,)
  37. print(matrix)
  38. # [ 1 7 2 8 3 9 4 10 5 11 6 12]
  39. # 矩阵转置
  40. matrix = matrix.reshape(2,6)
  41. print(matrix.shape) # (2, 6)
  42. print(matrix)
  43. # [[ 1 2 3 4 5 6]
  44. # [ 7 8 9 10 11 12]]
  45. matrix = matrix.T
  46. print(matrix.shape) # (6, 2)
  47. print(matrix)
  48. # [[ 1 7]
  49. # [ 2 8]
  50. # [ 3 9]
  51. # [ 4 10]
  52. # [ 5 11]
  53. # [ 6 12]]

01-4-2 矩阵的秩、行列式、迹、特征值与特征向量

  1. import numpy as np
  2. matrix = np.array([[1,1,3],[2,2,6],[3,3,9]])
  3. print(matrix)
  4. # [[1 1 3]
  5. # [2 2 6]
  6. # [3 3 9]]
  7. # 矩阵的秩 r(A)
  8. print(np.linalg.matrix_rank(matrix)) # 1
  9. # 矩阵的行列式 det(A)或|A|
  10. print(np.linalg.det(matrix)) # 0.0
  11. # 矩阵的对角线元素 tr(A)
  12. print(np.diagonal(matrix)) # [1 2 9]
  13. # 可以引入参数offset对主对角线上下偏移
  14. # 向上偏移
  15. print(np.diagonal(matrix, offset = 1)) # [1 6]
  16. # 向下偏移
  17. print(np.diagonal(matrix, offset = -1)) # [2 3]
  18. # 矩阵的迹 tr(A),即对角线元素之和
  19. print(np.trace(matrix)) # 12
  20. # 同样可以对主对角线进行偏移
  21. print(np.trace(matrix, offset = 1)) # 7
  22. matrix = np.array([[-2,1,1],[0,2,0],[-4,1,3]])
  23. # 矩阵的特征值和特征向量
  24. eigen_values, eigen_vectors = np.linalg.eig(matrix)
  25. # 特征值
  26. print(eigen_values)
  27. # [-1. 2. 2.]
  28. # 特征向量
  29. print(eigen_vectors)
  30. # [[-0.70710678 -0.24253563 0.30151134]
  31. # [ 0. 0. 0.90453403]
  32. # [-0.70710678 -0.9701425 0.30151134]]

01-4-3 矩阵的加减、乘法和矩阵的逆

  1. import numpy as np
  2. mat_1 = np.array([[1,1,2],[1,1,2],[1,1,2]])
  3. mat_2 = np.array([[1,2,1],[1,2,1],[1,2,1]])
  4. # 矩阵相加
  5. print(np.add(mat_1, mat_2))
  6. # [[2 3 3]
  7. # [2 3 3]
  8. # [2 3 3]]
  9. print(mat_1 + mat_2)
  10. # [[2 3 3]
  11. # [2 3 3]
  12. # [2 3 3]]
  13. # 矩阵相减
  14. print(np.subtract(mat_1, mat_2))
  15. # [[ 0 -1 1]
  16. # [ 0 -1 1]
  17. # [ 0 -1 1]]
  18. print(mat_1 - mat_2)
  19. # [[ 0 -1 1]
  20. # [ 0 -1 1]
  21. # [ 0 -1 1]]
  22. # 矩阵乘法
  23. print(np.dot(mat_1, mat_2))
  24. # [[4 8 4]
  25. # [4 8 4]
  26. # [4 8 4]]
  27. print(mat_1 @ mat_2)
  28. # [[4 8 4]
  29. # [4 8 4]
  30. # [4 8 4]]
  31. # 矩阵对应元素相乘
  32. print(mat_1 * mat_2)
  33. # [[1 2 2]
  34. # [1 2 2]
  35. # [1 2 2]]
  36. # 矩阵的逆 A-1
  37. mat = np.array([[0,1],[1,0]])
  38. print(np.linalg.inv(mat))
  39. # [[0. 1.]
  40. # [1. 0.]]
  41. # 验证:A*(A-1) = I
  42. print(mat @ np.linalg.inv(mat))
  43. # [[1. 0.]
  44. # [0. 1.]]

01-5 随机数

  1. import numpy as np
  2. # 设计随机数种子
  3. np.random.seed(0)
  4. # 生成3个0.0到1.0之间的随机数
  5. rand = np.random.random(3)
  6. print(rand) # [0.5488135 0.71518937 0.60276338]
  7. # 生成3个1到10之间的随机整数
  8. rand = np.random.randint(0, 11, 3)
  9. print(rand) # [3 7 9]
  10. # 从均值为0,标准差为1的正态分布中抽取3个数
  11. rand = np.random.normal(0, 1, 3)
  12. print(rand) # [-1.42232584 1.52006949 -0.29139398]
  13. # 从均值为0,散布程度为1的logistic分布中抽取3个数
  14. rand = np.random.logistic(0, 1, 3)
  15. print(rand) # [-0.98118713 -0.08939902 1.46416405]
  16. # 从大于等于1,小于2的范围中抽取3个数
  17. rand = np.random.uniform(1, 2, 3)
  18. print(rand) # [1.47997717 1.3927848 1.83607876]

[Python]-numpy模块-机器学习Python入门《Python机器学习手册》-01-向量、矩阵和数组的更多相关文章

  1. python numPy模块 与numpy里的数据类型、数据类型对象dtype

    学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 官方链接:https://numpy.org/devdocs/user/quickstart. ...

  2. python numpy模块

    目录 numpy模块 一维数组 二维数组(用的最多的) 获取多维数组的行和列 多维数组的索引 高级功能 多维数组的元素的替换 通过函数方法创建多维数组 矩阵的运算 点乘和转置(了解) 点乘必须 m*n ...

  3. matlab入门笔记(二):矩阵和数组

    摘自<matlab从入门到精通>胡晓东 matlab最基本的数据结构就是矩阵,一个二维的.长方形形状的数据,可以用易于使用的矩阵形式来存储,这些数据可以是数字,字符.逻辑状态,甚至是mat ...

  4. python numpy 模块简单介绍

    用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...

  5. python - json模块使用 / 快速入门

    json基本格式 """ json格式 -> [{}, {}]: [{ "name": "Bob", "gende ...

  6. python numpy模块使用笔记(更新)

    np.arange(int a) 生成一个一维array,元素个数是a个,元素是0到a-1 注意arange不能直接生成多维array np.arange(int a).reshape(int b,i ...

  7. Python Numpy模块函数np.c_和np.r_

    np.r_:是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat(). np.c_:是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的 ...

  8. python pickle模块的使用/将python数据对象序列化保存到文件中

    # Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...

  9. Python Deque 模块使用详解,python中yield的用法详解

    Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...

随机推荐

  1. NC15975 小C的记事本

    NC15975 小C的记事本 题目 题目描述 小C最近学会了java小程序的开发,他很开心,于是想做一个简单的记事本程序练练手. 他希望他的记事本包含以下功能: 1.append(str),向记事本插 ...

  2. DTCC 干货分享:Real Time DaaS - 面向TP+AP业务的数据平台架构

      2021年10月20日,Tapdata 创始人唐建法(TJ)受邀出席 DTCC 2021(中国数据库技术大会),并在企业数据中台设计与实践专场上,发表主旨演讲"Real Time Daa ...

  3. ArrayList源码深度剖析,从最基本的扩容原理,到魔幻的迭代器和fast-fail机制,你想要的这都有!!!

    ArrayList源码深度剖析 本篇文章主要跟大家分析一下ArrayList的源代码.阅读本文你首先得对ArrayList有一些基本的了解,至少使用过它.如果你对ArrayList的一些基本使用还不太 ...

  4. Git Rebase操作

    概括 rebase翻译过来为"变基",可以理解为改变基础,它可以用于分支合并和修改提交记录. 合并分支的区别 我们知道merge操作也可以用于分支合并,但是其和rebase操作有着 ...

  5. iis 7 -mvc WebApi {"message":"an error has occurred"}

    iis 7 - WebApi's {"message":"an error has occurred"} 原因是web api的Controller有两个类名重 ...

  6. Techempower web框架性能测试第21轮结果发布--asp.net core继续前进

    废话不说,直接上结果: Round 21 results - TechEmpower Framework Benchmarks Techempower benchmark是包含范围最广泛的web框架性 ...

  7. Ngnix初步学习

    Nginx下载与安装(Linux) nginx下载 1.root用户下进入/usr/local/src su root cd /usr/local/src 2.下载nginx所需包 # nginx w ...

  8. PHP goto

    if (true){ echo "run if\n"; goto fly; } else{ fly: echo "run else"; }

  9. 中高级Java程序员,挑战20k+,知识点汇总(一),Java修饰符

    1 前言 工作久了就会发现,基础知识忘得差不多了.为了复习下基础的知识,同时为以后找工作做准备,这里简单总结一些常见的可能会被问到的问题. 2 自我介绍 自己根据实际情况发挥就行 3 Java SE ...

  10. 在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_84 一般情况下,将一个项目部署到生产环境的流程如下: 需求分析-原型设计-开发代码-内网部署-提交测试-确认上线-备份数据-外网更 ...