机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。从数据中提取知识,也被称为预测分析统计学习

  它是人工智能的核心,是使计算机具有智能的根本途径。

  下面就让我们先了解一下机器学习吧。

一:学习机器学习原因和能够解决的问题

1.原因

  机器学习现在已经越来越流行,并且在实际生活运用以及高级的科学问题上做出了贡献。

  在早期的时候,许多系统和程序都是人为设定的决策规则,但是,人为制定的决策规则有缺点。一个是任务稍微有变化,可能需要重写系统;另一方面,还需要决策者对决策过程有很深刻的理解。

  一个例子就是人脸识别,人类和计算机对人脸的描述有所不同,因此有时候需要用机器进行非常复杂的操作,并且需要机器能够自动学习和识别,这就需要让计算机机器进行机器学习。因此学习机器学习是很有必要的。

2.机器学习能够解决的问题

  最成功的机器学习算法是能够将决策过程自动化的算法,从已知的示例中推导并泛化得出。这种算法叫做监督学习

  在这种算法中,用户将成对的输入和预期输出提供给算法,算法根据输入和预期输出得到一种方法,就可以把该方法作用到其他数据集上,根据已知推测未知。这就好像有一个老师监督着算法。
  监督学习算法实例:识别信封上的邮政编码,判断肿瘤大小,检测银行信用卡消费真实性。

  还有一种算法是无监督学习算法。这种算法只有输入数据是已知的,没有提供输出数据,因此评估起来很困难。

  无监督学习算法实例:确定系列博客主题,将客户或者好友分成不同类型的群组,检测网站的异常访问模式。

  将输入数据表示成表格形式是非常有用的,每一个数据点代表行,该数据代表的属性代表列。

  在机器学习中,每个实体或每一行被称为一个样本数据点,而每一列(描述这些实体的某一个属性)则被称为特征

  必须要有有效的信息集合,才能够用某一机器学习算法进行构建机器学习模型。

二:为什么选择python作为机器学习的语言

  python既有通用编程语言的强大,也有特定领域脚本语言的易用性。有很多功能库,使用它的主要优势是可以利用终端或其他类似Jupyter notebook的工具直接与代码进行交互。

三:机器学习常用库简介

1.scikit-learn

  简介:它是一个开源的python库,包含了目前最先进的机器学习算法,也是最有名的python机器学习库。

  用户指南http://scikit-learn.org/stable/user_guide.html

  安装scikit-learn:直接装集合了多个数据分析库的python发行版Anaconda,包含了所需的所有机器学习库。

2.Jupyter notebook

  这是一个可以在浏览器中运行代码的交互环境,有很多方便的交互功能,可以用来整合代码,文本和图像。

3.NumPy

  是基本的数据结构。功能包括多维数组,高级数学函数,以及伪随机数生成器等。所有的数据格式必须转化为NumPy多维数组。简称为"NumPy数组"或"数组"。

4.SciPy

  SciPy是python中用于科学计算的函数集合。具有线性代数高级程序,数学函数优化,信号处理,特殊函数和统计分布等功能。

5.matplotlib

  matplotlib是Python主要的科学绘图库,功能为将数据分析并生成可视化内容。一般用%matplotlib notebook和%matplotlib inline命令将图像显示在浏览器中。

6.pandas

  pandas是用于处理和分析数据的Python库。它基于一种叫做DataFrame的数据结构。类似于数据库中的二维表结构。

7.mglearn

  实用函数库,用户快速美化绘图,或者用户获取一些有趣的数字。

8.导入机器学习常用库

import sys
import pandas as pd
import matplotlib
import numpy as np
import scipy as sp
import ipython
import sklearn 

四:机器学习流程

1.实际问题抽象成数学问题

  将实际问题抽象成数学问题,目标的数学问题是一个怎样的问题,是一个分类还是回归,或聚类的问题,找到具体的问题类型,以及适合该问题可以用到哪些数据。

2.获取数据

  机器学习的第一个步骤就是收集数据,收集到的数据的质量和数量将直接决定预测模型是否能够建好,将收集的数据去重复、标准化、错误修正,得到标准数据,并进行多维数组化。保存到文本文件(csv,txt,json)或者数据库中。

  这里要注意,获取的数据包括获取原始数据以及从原始数据中经过特征工程从原始数据中提取训练、测试的数据。数据决定机器学习结果的上限,而算法只是尽可能的逼近这个上限。如果数据量太大可以考虑减少训练样本、降维或者使用分布式机器学习系统。

3.分析

  主要是进行数据发现,找出每列的最大、最小值、平均值、方差、中位数、三分位数、四分位数、某些特定值(比如零值)所占比例或者分布规律等。了解这些最好的办法就是可视化,直观对数据进行分析。

4.特征工程

  特征工程包括从原始数据中特征构建、特征提取、特征选择。特征工程能够使得算法的效果和性能得到显著的提升,有时能使简单的模型的效果比复杂的模型效果好。 数据挖掘的大部分时间就花在特征工程上面,是机器学习非常基础而又必备的步骤 。数据预处理、数据清洗、筛选显著特征、摒弃非显著特征等等都非常重要。

5.向量化

  向量化是对特征提取结果的再加工,目的是增强特征的表示能力,防止模型过于复杂和学习困难,把复杂的问题简单化。

6.拆分数据集

  将数据分为两部分。一方面是用于训练模型;另一方面是用于评估我们训练有素的模型的表现,来测试我们的模型是否适合。

7.模型训练

  进行模型训练之前,要确定合适的算法,比如线性回归、决策树、随机森林、逻辑回归、梯度提升、SVM等等。最佳方法是测试各种不同的算法,然后通过 交叉验证 选择最好的一个。但如果训练集很小,高偏差/低方差分类器(如朴素贝叶斯分类器)要优于低偏差/高方差分类器(如k近邻分类器),更容易拟合,但是训练集大的话,低偏差/高方差就比较适合了。

8.评估

  训练完成之后,通过拆分出来的训练的数据来对模型进行评估,通过真实数据和预测数据进行对比,来判定模型的好坏。常见的五个方法:混淆矩阵、提升图&洛伦兹图、基尼系数、ks曲线、roc曲线。

  完成评估后,如果想进一步改善训练,我们可以通过调整模型的参数来实现,然后重复训练和评估的过程。

9.文件整理

  模型训练完之后,要整理出不同含义的文件,确保模型能够正确运行。

10.接口封装,上线

  通过封装封装服务接口,实现对模型的调用,以便返回预测结果。然后将整个机器学习模型上线。