监督学习目标变量标称型有限目标集中取值和数值型无限数据集合中取值把无序数据转换成有用信息 解释并操作数据传感器和海量数据 数据分析关键术语机器学习中的专家系统 分类可近似于判断 由特征进行分类 分类算法和回归算法训练样本集必须必须知道目标变量类别的值以便机器学习算法可以发现特征和目标变量之间的关系。知识表示机器学习的主要任务分类和回归回归预测数值型数据无监督学习没有类别信息 不给定目标值 聚类 密度估计选择合适的算法从上表中所列的算法中选择实际可用的算法必须考虑下面两个问题一、使用机器学习算法的目的想要算法完成何种任务比如是预测明天下雨的概率还是对投票者按照兴趣分组二、需要分析或收集的数据是什么。首先考虑使用机器学习算法的目的。如果想要预测目标变量的值则可以选择监督学习算法否则可以选择无监督学习算法。确定选择监督学习算法之后需要进一步确定目标变量类型如果目标变量是离散型如是否、1/2/3、A/B/C或者红黄黑等则可以选择分类算法如果目标变量是连续型的数值如0.0 ~ 100.00、-999 ~ 999或者o∞ ~-o∞等则需要选择回归算法。如果不想预测目标变量的值则可以选择无监督学习算法。进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求则使用聚类算法如果还需要估计数据与每个分组的相似程度则需要使用密度估计算法。在大多数情况下上面给出的选择方法都能选择恰当的机器学习算法但这也并非一成不变。第9章我们就会使用分类算法来处理回归问题显然这将与上面监督学习中处理回归问题的原则不同。其次需要考虑的是数据问题。我们应该充分了解数据对实际数据了解得越充分越容易创建符合实际需求的应用程序。主要应该了解数据的以下特性特征值是离散型变量还是连续型变量特征值中是否存在缺失的值何种原因造成缺失值数据中是否存在异常值某个特征发生的频率如何是否罕见得如同海底捞针等等。充分了解上面提到的这些数据特性可以缩短选择机器学习算法的时间。只能在一定程度上缩小算法的选择范围一般并不存在最好的算法或者可以给出最好结果的算法同时还要尝试不同算法的执行效果。对于所选的每种算法都可以使用其他的机器学习技术来改进其性能。在处理输入数据之后两个算法的相对性能也可能会发生变化。后续章节我们将进一步讨论此类问题一般说来发现最好算法的关键环节是反复试错的迭代过程。机器学习算法虽然各不相同但是使用算法创建应用程序的步骤却基本类似。开发机器学习应用程序的步骤(1收集数据。我们可以使用很多方法收集样本数据如制作网络爬虫从网站上抽取数据、从RSS反馈或者API中得到信息、设备发送过来的实测数据风速、血糖等。提取数据的方法非常多为了节省时间与精力可以使用公开可用的数据源。(2准备输入数据。得到数据之后还必须确保数据格式符合要求现采用的格式是Python 语言的List。使用这种标准数据格式可以融合算法和数据源方便匹配操作。此外还需要为机器学习算法准备特定的数据格式如某些算法要求特征值使用特定的格式一些算法要求目标变量和特征值是字符串类型而另一些算法则可能要求是整数类型。但是与收集数据的格式相比处理特殊算法要求的格式相对简单得多。(3分析输入数据。此步骤主要是人工分析以前得到的数据。为了确保前两步有效最简单的方法是用文本编辑器打开数据文件查看得到的数据是否为空值。此外还可以进一步浏览数据分析是否可以识别出模式数据中是否存在明显的异常值如某些数据点与数据集中的其他值存在明显的差异。通过一维、二维或三维图形展示数据也是不错的方法然而大多数时候我们得到数据的特征值都不会低于三个无法一次图形化展示所有特征。后续将会介绍提炼数据的方法使得多维数据可以压缩到二维或三维方便我们图形化展示数据。这一步的主要作用是确保数据集中没有数据。如果是在产品化系统中使用机器学习算法并且算法可以处理系统产生的数据格式或者我们信任数据来源可以直接跳过第3步。此步骤需要人工干预如果在自动化系统中还需要人工干预显然就降低了系统的价值。(4训练算法。机器学习算法从这一步才真正开始学习。根据算法的不同第4步和第5步是机器学习算法的核心。我们将前两步得到的格式化数据输入到算法从中抽取知识或信息。这里得到的知识需要存储为计算机可以处理的格式方便后续步骤使用。如果使用无监督学习算法由于不存在目标变量值故而也不需要训练算法所有与算法相关的内容都集中在第5步。(5测试算法。这一步将实际使用第4步机器学习得到的知识信息。为了评估算法必须测试算法工作的效果。对于监督学习必须已知用于评估算法的目标变量值对于无监督学习也必须用其他的评测手段来检验算法的成功率。无论哪种情形如果不满意算法的输出结果则可以回到第4步改正并加以测试。问题常常会跟数据的收集和准备有关这时你就必须跳回第1步重新开始。(6使用算法。将机器学习算法转换为应用程序执行实际任务以检验上述步骤是否可以在实际环境中正常工作。此时如果碰到新的数据问题同样需要重复执行上述的步骤。Python易于理解、丰富的函数库尤其是矩阵操作、活跃的开发者社区等。但是性能稍微有点差。NumPy函数库。NumPy矩阵和数组不一样。统计学 《如何使用统计学说谎》