用Scikit-learn和TensorFlow进行机器学习(一)

机器学习概览

一、什么是机器学习?

1、定义

计算机程序利用经验 E 学习任务 T, 性能是 P, 如果针对任务 T 的性能 P 随着经验 E 不断增长, 则称为机器学习。(汤姆·米切尔,1997)

2、适用

  • 需要进行大量手工调整或需要拥有长串规则才能解决的问题: 机器学习算法通常可以简化代码、 提高性能。
  • 问题复杂, 传统方法难以解决: 最好的机器学习方法可以找到解决方案。
  • 环境有波动: 机器学习算法可以适应新数据。
  • 洞察复杂问题和大量数据

二、分类

注意下述规则可以组合

1、监督, 非监督, 半监督和强化学习

分类依据:根据训练时监督的量和类型进行分类。

(1)监督学习

分为:分类任务、回归任务

常用算法:

  • K近邻算法
  • 线性回归
  • 逻辑回归
  • 支持向量机( SVM)
  • 决策树和随机森林
  • 神经网络

(2)非监督学习

常用算法:
聚类

  • K 均值
  • 层次聚类分析( Hierarchical Cluster Analysis, HCA)
  • 期望最大值

可视化和降维(简化数据、 但是不能失去大部分信息)

  • 主成分分析( Principal Component Analysis, PCA)
  • 核主成分分析
  • 局部线性嵌入( Locally-Linear Embedding, LLE)
  • t-分布邻域嵌入算法( t-distributed Stochastic Neighbor Embedding, t-SNE)

关联性规则学习(挖掘大量数据以发现属性间有趣的关系)

  • Apriori 算法
  • Eclat 算法

此外,还常用于异常检测( anomaly detection)

(3)半监督学习

数据形式:通常是大量不带标签数据加上小部分带标签数
据。

多数半监督学习算法是非监督和监督算法的结合。eg:深度信念网络(deep belief networks)

(4)强化学习

智能体(agent), 可以对环境进行观察(observation), 选择和执行动作(action), 获得奖励。然后它必须自己学习哪个是最佳方法( 称为策略, policy) , 以得到长久的最大奖励。 策略决定了智能体在给定情况下应该采取的行动。
用Scikit-learn和TensorFlow进行机器学习(一)

2、在线学习 vs 批量学习

分类依据:是否能从导入的数据流进行持续学习

(1)在线学习

用数据实例持续地进行训练,可以一次一个或一次几个实例( 称为小批量)。 每个学习步骤都很快且廉价,所以系统可以动态地学习到达的新数据。
==》适合接收连续流的数据,且需要自动对改变作出调整。

数据的使用:

  • 一旦在线学习系统学习了新的数据实例,它就不再需要这些数据了, 所以扔掉这些数据( 除非你想滚回到之前的一个状态, 再次使用数据)==》这样可以节省大量的空间。
  • 核外数据(机器内存存不下大量数据集时):加载部分数据,之后训练,然后重复该过程,直到所有数据都进行了训练。

(2)批量学习

系统不能持续学习:必须用所有可用数据进行训练。
==》占用大量时间和计算资源

3、基于实例学习 vs 基于模型学习

(1)基于实例学习

记忆学习。系统先用记忆学习案例, 然后使用相似度测量推广到新的例子

(2)基于模型学习

从样本集进行归纳的方法是建立这些样本的模型, 然后使用这个模型进行预测。

三、主要挑战

  • 训练数据量不足:数据不合理的有效性;
  • 没有代表性的训练数据;
    • 样本太小==》样本噪声
    • 样本太大==》样本偏差:可能没有代表性, 如果取样方法错误的话。
  • 低质量数据:错误、异常值和噪声
  • 不相关的特征
    • 特征工程(特征选择、特征提取、收集新数据创建新特性)
  • 过拟合训练数据
    • 简化模型, 可以通过选择一个参数更少的模型( 比如使用线性模型, 而不是高阶多项式模型)、 减少训练数据的属性数、 或限制一下模型(正则化)
    • 收集更多的训练数据
    • 减小训练数据的噪声( 比如, 修改数据错误和去除异常值)
  • 欠拟合训练数据

四、测试和确认

数据集划分:训练集、验证集、测试集;

在验证集上模型和超参数,选择性能最佳的模型和超参数