算法工程师修仙之路:机器学习实战(三)

第一部分:分类

第一章 机器学习基础


Python 语言的优势

  • 基于以下三个原因,我们选择 Python 作为实现机器学习算法的编程语言:

    • Python 的语法清晰;
    • 易于操作纯文本文件;
    • 使用广泛,存在大量的开发文档。
  • 可执行伪代码

    • Python 具有清晰的语法结构,它也被称作可执行伪代码(executable pseudo-code);
    • 默认安装的 Python 开发环境已经附带了很多高级数据类型,如列表、元组、字典、集合、队列等,无需进一步编程就可以使用这些数据类型的操作;
    • 使用这些数据类型使得实现抽象的数学概念非常简单;
    • Python 语言处理和操作文本文件非常简单,非常易于处理非数值型数据;
    • Python 语言提供了丰富的正则表达式函数以及很多访问 Web 页面的函数库,使得从HTML 中提取数据变得非常简单直观。
  • Python 比较流行

    • Python 语言使用广泛,代码范例也很多,便于快速学习和掌握;
    • 此外,在开发实际应用程序时,也可以利用丰富的模块库缩短开发周期;
    • 在科学和金融领域,Python 语言得到了广泛应用;
    • SciPy 和 NumPy 等许多科学函数库都实现了向量和矩阵操作,这些函数库增加了代码的可读性,另外,科学函数库 SciPy 和 NumPy 使用底层语言编写,提高了相关应用程序的计算性能;
    • Python 的科学工具可以与绘图工具 Matplotlib 协同工作,Matplotlib 可以绘制 2D、3D图形,也可以处理科学研究中经常使用到的图形;
    • Python 开发环境还提供了交互式 shell 环境,允许用户开发程序时查看和检测程序内容;
  • Python 语言的特色

    • Python 语言则与 Java 和 C 完全不同,它清晰简练,而且易于理解,即使不是编程人员也能够理解程序的含义,而 Java 和 C 对于非编程人员则像天书一样难于理解;
    • Python 语言是高级编程语言,我们可以花费更多的时间处理数据的内在含义,而无须花费太多精力解决计算机如何得到数据结果,Python 语言使得我们很容易表达自己的目的。
  • Python 语言的缺点

    • Python 语言唯一的不足是性能问题;
      • Python 程序运行的效率不如 Java 或者 C 代码高,但是我们可以使用 Python 调用 C 编译的代码;
      • 这样,我们就可以同时利用 C 和 Python 的优点,逐步地开发机器学习应用程序;
      • 我们可以首先使用 Python 编写实验程序,如果进一步想要在产品中实现机器学习,转换成 C 代码也不困难;
      • 如果程序是按照模块化原则组织的,我们可以先构造可运行的 Python 程序,然后再逐步使用 C 代码替换核心代码以改进程序的性能;
      • C++ Boost 库就适合完成这个任务,其他类似于 Cython 和 PyPy 的工具也可以编写强类型的 Python 代码,改进一般 Python 程序的性能。
    • 如果程序的算法或者思想有缺陷,则无论程序的性能如何,都无法得到正确的结果;
    • 如果解决问题的思想存在问题,那么单纯通过提高程序的运行效率,扩展用户规模都无法解决这个核心问题,从这个角度来看, Python 快速实现系统的优势就更加明显了,我们可以快速地检验算法或者思想是否正确,如果需要,再进一步优化代码。

NumPy 函数库基础

  • NumPy函数库将数据表示为矩阵形式,只需要执行简单的矩阵运算而不需要复杂的循环操作。

  • NumPy 矩阵与数组的区别

    • NumPy 函数库中存在两种不同的数据类型(矩阵 matrix 和数组 array),都可以用于处理行列表示的数字元素;

    • 虽然它们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中 NumPy 函数库中的 matrix 与 MATLAB 中 matrices 等价。

      import numpy as np 
      from numpy import *
      
      # 构造一个4×4的随机数组,因为产生的是随机数组,不同计算机的输出结果可能与上述结果完全不同。
      rint(random.rand(4, 4))
      
      # 调用 mat() 函数可以将数组转化为矩阵,输入下述命令:
      randomMat = mat(random.rand(4, 4))
      # 由于使用随机函数产生矩阵,不同计算机上输出的值可能略有不同:
      print(randomMat.I)      # .I操作符实现了矩阵求逆的运算。
      """ 
      [[  4.71629641  -1.94916498   1.36821745  -4.01802929]
       [ -3.16839776   1.71731342   0.36038256   1.9790573 ]
       [ 13.17442453  -2.56783332  -1.87777552  -8.30747618]
       [ -8.63665271   1.10967629   1.05564456   6.65494258]] 
       """
      
      # 执行下面的命令存储逆矩阵:
      invRandMat = randomMat.I 
      
      # 接着执行矩阵乘法,得到矩阵与其逆矩阵相乘的结果:
      print(invRandMat * randomMat)
      
      """ 
      [[  1.00000000e+00   0.00000000e+00  -4.44089210e-16  -4.44089210e-16]
       [  5.55111512e-17   1.00000000e+00   2.22044605e-16   2.22044605e-16]
       [ -2.22044605e-16  -1.77635684e-15   1.00000000e+00  -8.88178420e-16]
       [  2.22044605e-16   8.88178420e-16   0.00000000e+00   1.00000000e+00]] 
      """
      """ 结果应该是单位矩阵,除了对角线元素是1,4×4矩阵的其他元素应该全是0。
      实际输出结果略有不同,矩阵里还留下了许多非常小的元素,这是计算机处理误差产生的结果。 """
      
      # 输入下述命令,得到误差值:
      myEye = randomMat * invRandMat
      print(myEye - eye(4))       # 函数 eye(4) 创建4×4的单位矩阵。
      """ 
      [[  0.00000000e+00   0.00000000e+00   0.00000000e+00   8.88178420e-16]
       [  0.00000000e+00   2.22044605e-16   0.00000000e+00   0.00000000e+00]
       [  0.00000000e+00  -2.22044605e-16   2.22044605e-16   0.00000000e+00]
       [ -1.77635684e-15   0.00000000e+00   0.00000000e+00   0.00000000e+00]] 
       """
      

本章小结

  • 学习机器学习算法,必须了解数据实例,每个数据实例由多个特征值组成。

  • 分类是基本的机器学习任务,它分析未分类数据,以确定如何将其放入已知群组中。为了构建和训练分类器,必须首先输入大量已知分类的数据,我们将这些数据称为训练样本集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值