机器学习系统所解决的都是无法直接使用固定规则或者流程代码完成的问题。
所谓具备“学习”能力的程序都是指它能够不断地从经历和数据中吸取经验教训,从而应对未来的预测任务。我们习惯地把这种对未知的预测能力叫做泛化力。
该书侧重2个基础方面:监督学习和无监督学习。
============
监督学习包括:回归和分类。
回归是指:是预测问题,只是预测的目标往往是连续变量。比如,根据房屋的面积、地理位置、建筑年代等进行销售价格的预测,销售价格就是一个连续变量。比如统计学里面的线性回归:把一些离散的数据,尽量用一个线性函数来表述它们,让它们尽可能的都回归到你的拟合函数上,你有了拟合函数既可以去预测一些具体的值了。
分类:是对其所在的类别进行预测。比如让神经网络去识别猫和狗的图片,就是随机给一张陌生图片给训练好的神经网络去识别分类。
============
无监督学习包括:数据降维和聚类等。
数据降维:是对事物的特性进行压缩和筛选,这项任务相对比较抽象。
比如,在识别图像中人脸的任务中,我们可以直接读取到图像的像素信息。若是直接使用这些像素信息,那么数据的维度会非常高,特别是在图像分辨率越来越高的今天。因此,我们通常会利用数据降维的技术对图像进行降维,保留最具有区分度的像素组合。
聚类:是依赖于数据的相似性,把相似的数据样本划分为一个簇。字面意思也看得出就是把相似或相近的归为一类聚在一起。物以类聚最好的总结了。
=============
总结一下
监督学习:一般我们训练的数据样本都有一些反映数据内在规律的信息特征,我们把这些特征高度概括浓缩起来用一个特征向量表示这个样本。比如,我们每个人有一个身份证,每个身份证有一个唯一的ID。ID可以理解为我们的特征向量,它可以独一无二的表示我们自己的身份证。
除了用特征向量表示当前的样本之外,还要一个label标签,表示前面分类里面说的,该类别的名字。比如前面的猫和狗,有很多猫的照片,那么这些猫的照片都用label=1表示猫,余下的狗的照片我们用label=0表示,这就是认为定义的label表示同一个类别。
无监督学习:自然就没有标记label,因此也无法从事预测任务,却更加适合对数据结构的分析。而监督数据的标注因为经常耗费大量的时间、金钱和人力,所以数据量相对较少。
Python特点:
方便调试的解释型语言:Python是一门解释型编程语言,与Java类似,Python解释器逐行处理这些代码。因此方便了调试过程,也特别适合于使用不同机器学习模型进行增量式开发。
跨平台:上面提到Python的源代码都会先解释成独特的字节码,然后才会被运行。从另一个角度讲,只要一个平台(win,Mac,Linux)安装有用于运行这些字节码的虚拟机,那么Python便可以执行跨平台作业。和Java虚拟机很相似。
广泛的编程接口:除了那些被用于编程人员自行开发所使用的第三方程序库以外,业界许多著名的公司都拥有用于科研和商业的云平台,如亚马逊的AWS (Amazon Web Services)、谷歌的Prediction API等。同时也提供机器学习功能的Python应用编程接口许多平台的机器学习功能模块不需要用户来编写,只需要用户像搭建积木一样,通过Python语言并且遵照API的编写协议与规则,把各个模块串接起来即可。
丰富完备的开源工具包:通常情况下,我们都不会从零开始编程。比如,学习算法中经常会涉及的向量计算;如果Python中没有直接提供用于向量计算的工具,我们还需要自己花费时间编写这样的基础功能吗?答案是否定的。Python自身免费开源的特性使得大量专业、甚至天才型的编程人员,参与到Python第三方开源工具包(程序库)的构建中。更为可喜的是,大多数的工具包(程序库)都允许个人免费使用,乃至商用。这其中就包括本书主要使用的多个用于机器学习的第三方程序库,如便于向量、矩阵和复杂科学计算的NumPy与SciPy;仿MATLAB样式绘图的Matplotlib;包含大量经典机器学习模型的Scikit一learn;对数据进行快捷分析和处理的Pandas;以及集成了上述所有第三方程序库的综合实践平台Anaconda。
SciPy需要依赖NumPy的支持进行安装和运行。对这两个编程库感兴趣的读者,可以参考下面这个在线教程详细学习它们的用法:http://www. numpy. org/
http://www. scipy. org/
欲了解详情的读者可以查阅Matplotlib 的在线文档 http://matplotlib. org contents. html
Pandas工具包,具体文档见 http://pandas. pydata.org/pandasdocs/stable/
http://matplotlib. org/
http://scikit-learn. org/
http://pandas. pydata. org/
anaconda 工具包: https ://www. continuum. io/documentation
python内置的常用数据类型共有6种:数字(Number)、布尔值(Boolean)、字符串(String),还有复杂一些的元组(Tuple)、
列表(List)以及字典(Dictionary)。
数字(Number):常用的数字类型包括整型数(Integer)、长整型数(Long)、浮点数 (Float)以及复杂型数(Complex)0整型数和浮点数是我们平时最常使用的两类,举例来说:读者可以先简单地理解为常用的整数,如10、100、一100等都是整型数;一般用于计算的小数,如一0,1、10,01等都可以使用Python的浮点数数字类型进行存储0。长整型与复杂数据类型(虚数)不太常用,因此不过多介绍。
·布尔值(Boolean):计算机的计算基础是二进制,因此任何一门编程语言都会有这个数据类型,用来表示真/假。在Python中,这两个值有固定的表示:True代表真,False代表假。切记,Python是大小写敏感的编程语言,因此只有按照这样输人才会被解释器理解为布尔值。
·字符串(String):字符串是由一系列字符(Character)组成的数据类型,应用范围十分广泛,特别是针对文本数据的处理。在Python里,字符串的表示可以使用成对的英文单引号或者双引号辅助进行表示:'abc',或者“ 123 "。尽管123看似是一入整型数,但是一旦被成对的单引号或者双引号限制起来,便成了字符串类型的数据
上述三类都是Python基本的内置数据类型。它们是数据表达、存储的基础。下面即将介绍的。种数据结构相对复杂,而且需要上述三种基础数据类型的配合。
·元组(Tuple):元组是一系列Python数据类型按照顺序组成的序列。使用一组小括号()表征,如(0,'abc',0、4)是一个包含有三个元素的元组。而且读者会发现,元组中的数据类型不必统一,这个是Python的一大特点。另外,假设上例的这个元组叫做t,那么t[0]的值为1,t[1 ]的值为'abc'。也就是说,我们可以通过索引直接从元组中找到我们需要的数据0特别需要提醒的是,大多数编程语言都默认索引的起始值为0,不是1。
·列表(List):列表和元组在功能上几乎是类似的,只是表示方法略有不同。列表实用一对中括号[]来组织数据,如[ 1,'abc" 0.4 ]。需要记住一点例外的是: Python允许在使用者在访问列表的同时修改列表里的数据,而元组则不然。列表数据类型不必统一
字典(Dicoonary):这是Python里面非常实用而且功能强大的数据结构,特别在数据处理任务里面,字典几乎成了数据存储的主流形式。从字典自身的数据结构而言,它包括多组键(key).值(value)对,Python实用大括号来容纳些这键值对,
如{ 1:'1','abc':0 · 1,0,4:80 }。需要读者注意的是,字典中的键是唯一的,但是没有数据类型的要求。而查找某个键对应的值也和元组或者列表的访问方式类似。比如,假设上例的字典为变量d,那么d[ 1 ]的值为'1';d['abc]的值为0 · 1。
补充一下:Python需要严格代码缩进,一般空4格,不用{}表示代码块,用缩进表示,对应键盘上的tap键,
注释有3种:
#xxx 表示注释一行代码
注释多行代码可以用‘’xxx‘’或者‘xxx’2种方法,上面字符表示也是这2种方法。