机器学习实战第一章02

1.5 Python语言的优势

基于以下三个原因,我们选择Python作为实现机器学习算法的编程语言:(1)Python的语法清晰;(2)易于操作纯文本文件;(3)使用广泛,存在大量的开发文档。

1.5.1 可执行伪代码

Python具有清晰的语法结构,大家也把它称作可执行伪代码。默认安装的Python开发环境已经附带了很多高级数据类型,如列表、元组、字典、集合、队列等,无需进一步编程就可以使用这些数据类型的操作。使用这些数据类型使得实现抽象的数学概念非常简单。此外,读者还可以使用自己熟悉的编程风格,如面向对象编程、面向过程编程、或者面向函数式编程。

Python语言处理和操作文本文件非常简单,非常易于处理非数值型数据。Python语言提供了丰富的正则表达式函数以及很多访问web页面的函数库,使得从HTML中提取数据变得非常简单直观。

1.5.2 Python比较流行

Python语言使用广泛,代码范例也很多,便于读者快速学习和掌握。此外,在开发实际用程序时,也可以利用丰富的模块库缩短开发周期。在科学和金融领域,Python语言得到了广泛应用。SciPy和NumPy等许多科学函数库都实现了向量和矩阵操作,这些函数库增加了代码的可读性,学过线性代数的人都可以看懂代码的实际功能。另外,科学函数库Scipy和NumPy使用底层语言(C和Fortran)编写,提高了相关应用程序的计算性能。

Python的科学工具可以与绘图工具Matplotlib协同工作。Matplotlib可以绘制2D、3D图形,也可以处理科学研究中经常使用到的图形,所以我们也将大量使用Matplotlib。

Python开发环境还提供了交互式shell环境,允许用户开发程序时查看和检测程序内容。

Python开发环境将来还会集成Pylab模块,它将NumPy、SciPy和Matplotlib合并为一个开发环境。

1.5.3 Python语言的特色

诸如MATLAB和Mathematica等高级程序语言也允许用户执行矩阵操作,MATLAB甚至还有许多内嵌的特征可以轻松地构造机器学习应用,而且MATLAB的运算速度也很快。然而MATLAB的不足之处时软件费用太高,单个软件授权就要花费数千美元。虽然也有适合MATLAB的第三方插件,但是没有一个有影响力的大型开源项目。

Java和C等强类型程序设计语言也有矩阵数学库,然而对于这些程序设计语言来说,最大的问题是即使完成简单的操作也要编写大量的代码。程序员首先需要定义变量的类型,对于Java来说,每次封装属性时还需要实现getter和setter方法。另外还要记着实现子类,即使并不想使用子类,也必须实现子类方法。为了完成一个简单的工作,我们必须花费大量时间编写了很多无用冗长的代码。Python语言则与Java和C完全不同,它清晰简练,而且易于理解,即使不是编程人员也能够理解程序含义,而Java和C对于非编程人员则像天书一样难于理解。

Python语言是高级编程语言,我们可以花费更多的时间处理数据内在含义,而无须花费太多的精力解决计算机如何得到数据结果。Python语言使得我们很容易表达自己的目的。

1.5.4  Python语言的缺点

Python语言唯一的不足是性能问题。Python程序运行的效率不如Java或者C代码高,但是我们可以使用Python调用C编译的代码。这样,我们就可以同时利用C和Python的有点,逐步地开发机器学习应用程序。我们可以首先使用Python编写实验程序,如果进一步想要在产品中实现机器学习,转换成C代码也不困难。如果程序是按照模块化原则组织的,我们可以先构造可运行的Python程序,然后再逐步使用C代码替换核心代码以改进程序性能。C++Boost库就适合完成这个任务,其他类似于Cython和PyPy的工具也可以编写强类型的Python代码,改进一般Python程序的性能。

如果程序的算法或者思想有缺陷,则无论程序的性能如何,都无法得到正确的结果。如果解决问题的思想存在问题,那么单纯通过提高程序的运行效率,扩展用户规模都无法解决这个核心问题。从这个角度来看,Python快速实现系统的优势就更加明显了,我们可以快速地检验算法或者思想是否正确,如果需要,再进一步优化代码。

本节大致介绍了本书选择Python语言实现机器学习算法的原因,霞姐我们讲学习Python语言的shell开发环境以及NumPy函数库。

1.6 Numpy函数库基础

机器学习算法涉及很多线性代数知识, 因此本书在使用Python语言构造机器学习应用时,会经常使用NumPy函数库。如果不熟悉线性代数也不用着急,这里用到线性代数只是为了简化不同的数据点上执行的相同数学运算。将数据表示为矩阵的形式,只需要执行简单的矩阵运算而不需要复杂的循环操作。在你开始学习机器学习算法之前,必须保证可以运行Python开发环境,同时正确安装了Numpy函数库。NumPy函数库时Python开发环境的一个独立模块,而且大多数Python发行版本没有默认安装Numpy函数库,因此在安装Python之后必须单独安装NumPy函数库。在Windows命令提示符下输入C:\Python27\python.exe,在Linux或者Mac OS的终端上输入Python,进入Python shell开发环境。今后,一旦看到下述提示符就意味着我们已经进入Python shell开发环境:

>>>

在Python shell开发环境中输入下列命令:

>>>from numpy import *

上述命令将NumPy函数库中的所有模块引入当前的命名空间。输出结果下图所示。

然后在Python shell开发环境中输入下述命令:

上述命令构造了一个4X4的随机数组,因为产生的是随机数组,不同计算机的输出结果上可能与上述结果完全不同。

NumPy矩阵与数组的区别

Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素。虽然它们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中NumP函数库 中的matrix与MATLAB中的matrices等价。

调用mat()函数可以将数组转化为矩阵,输入下述命令:

randMat=mat(random.rand(4,4))

由于使用随机函数产生矩阵,不同计算机上输出的值可能略有不同:

>>> randMat.I
matrix([[ 3.4419018 ,  3.0862257 ,  5.56107304, -9.35262899],
        [-5.15720601, -4.26557793, -5.54440464, 12.74269242],
        [ 1.2303159 ,  2.92959154, -1.61960835, -2.35588676],
        [ 2.42608604, -1.24091757,  2.87546732, -2.85165582]])

.I操作实现了矩阵求逆的运算。非常简单吧?没有Numpy库,Python也不能这么容易算出矩阵的逆运算。不记得或者没学过矩阵求逆也没有关系,NumPy库帮我们做完了,执行下面的命令存储逆矩阵:

 invRandMat=randMat.I

接着执行矩阵乘法,得到矩阵与其逆矩阵相乘的结果:

randMat*invRandMat
matrix([[ 1.00000000e+00, -8.88178420e-16, -2.22044605e-16,
          0.00000000e+00],
        [ 0.00000000e+00,  1.00000000e+00, -8.88178420e-16,
          0.00000000e+00],
        [ 0.00000000e+00,  4.44089210e-16,  1.00000000e+00,
         -1.77635684e-15],
        [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
          1.00000000e+00]])

结果应该是单位矩阵,除了对角线元素是1,4X4矩阵的其他元素应该是0。实际输出结果略有不同,矩阵力还留了许多非常小的元素,这是计算机处理误差产生的结果。输入下述命令,得到误差值:

>>> myEye-eye(4)
matrix([[ 2.22044605e-16, -8.88178420e-16, -2.22044605e-16,
          0.00000000e+00],
        [ 0.00000000e+00,  8.88178420e-16, -8.88178420e-16,
          0.00000000e+00],
        [ 0.00000000e+00,  4.44089210e-16,  4.44089210e-16,
         -1.77635684e-15],
        [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
         -1.77635684e-15]])

函数eye(4)创建4X4的单位矩阵。

只要能够树立地完成上述例子,就说明已经正确地安装了NumPy函数库,以后我们就可以利用它构造机器学习应用程序。即使没有提前学习所有的函数也没有关系,我们将在需要的时候介绍更多的NumPy函数库的功能。

1.7 本章小结

尽管没有引起大多数人的注意,但是机器学习算法已经广泛应用于我么的日常生活之中。每天我们需要处理的数据在不断地增加,能够深入理解数据背后的真实含义,是数据驱动产业必须具备的技能。

学习机器学习算法,必须了解数据实例,每个数据实例由多个特征值组成。分类是基本的机器学习任务,它分析未分类数据,以确定如何将其放入已知群组中。为了构建和训练分类器,必须首先输入大量已知分类的数据,我们称这些数据为训练样本集。

尽管我们构造的鸟类识别专家系统无法像人类专家一样精确地识别不同的鸟类,然而构建接近专家水平的机器系统可以显著地改进我们的生活质量。如果我们可以构造的医生专家系统能够达到人类医生的准确率,则病人可以得到快速的治疗;如果我们可以改进天气预报,则可以减少水资源的短缺,提高食物供给。我们可以举许许多多这样的例子,机器学习的应用前景几乎是无限的。

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值