L o a d i n g . . . . . .

[概念] 机器学习初识笔记

机器学习关键问题

什么是机器学习?

机器通过分析大量数据来进行学习。比如说,不需要通过编程来识别猫或人脸,它们可以通过使用图片来进行训练,从而归纳和识别特定的目标。

机器学习的工作方式

①选择数据: 将你的数据分成三组:训练数据、验证数据和测试数据

②模型数据: 使用训练数据来构建使用相关特征的模型

③验证模型: 使用你的验证数据接入你的模型

④测试模型: 使用你的测试数据检查被验证的模型的表现

⑤使用模型: 使用完全训练好的模型在新数据上做预测

⑥调优模型: 使用更多数据、不同的特征或调整过的参数来提升算法的性能表现

机器学习所处的位置

①传统编程: 软件工程师编写程序来解决问题。首先存在一些数据→为了解决一个问题,软件工程师编写一个流程来告诉机器应该怎样做→计算机遵照这一流程执行,然后得出结果

②统计学: 分析师比较变量之间的关系

③机器学习: 数据科学家使用训练数据集来教计算机应该怎么做,然后系统执行该任务。首先存在大数据→机器会学习使用训练数据集来进行分类,调节特定的算法来实现目标分类→该计算机可学习识别数据中的关系、趋势和模式

④智能应用: 智能应用使用人工智能所得到的结果,如图是一个精准农业的应用案例示意,该应用基于无人机所收集到的数据

经典机器学习算法

经典机器学习算法基本涵盖了数学建模竞赛所需的模型算法。经典机器学习通常分为两类:有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。

有监督学习分为两类:

  • 分类(classification),预测一个对象所属的类别;(例如:过滤垃圾邮件、语言检测、查找相似文档、情感分析、识别手写字母或数字、欺诈侦测)
  • 回归(regression),预测数轴上的一个特定点;(例如:股票价格预测、供应和销售量分析、医学诊断、计算时间序列相关性)

分类常用的算法:

  • 朴素贝叶斯(Naive Bayes)
  • 决策树(Decision Tree)
  • Logistic回归(Logistic Regression)
  • K近邻(K-Nearest Neighbours)
  • 支持向量机(Support Vector Machine)

回归常见的算法:

  • 线性回归(Linear Regression)
  • 多项式回归(Polynomial Regression)

数据本身就蕴含知识和规律,例如下图左边众多的数据点可以分为三类,在右图中用三种颜色来表示,无监督学习就可以直接学习到数据中的这种规律,因此无监督学习也称为知识发现

无监督学习分类:

  • 聚类(Clustering),机器会选择最好的方式,基于一些未知的特征将事物区分开来。(例如:市场细分(顾客类型,忠诚度)、合并地图上邻近的点、图像压缩、分析和标注新的数据、检测异常行为)

  • 降维(Dimensionality Reduction),将特定的特征组装成更高级的特征。(例如:振型分解、推荐系统、漂亮的可视化、主题建模和查找相似文档、假图识别、风险管理)

  • 关联规则学习(Association rule learning),在订单流水中查找模式。(例如:预测销售和折扣、分析“一起购买”的商品、规划商品陈列、分析网页浏览模式)

聚类常见算法:

  • K均值聚类
  • Mean-Shift
  • DBSCAN

降维常用的算法:

  • 主成分分析(Principal Component Analysis ,PCA)
  • 奇异值分解(Singular Value Decomposition ,SVD)
  • 潜在狄里克雷特分配( Latent Dirichlet allocation, LDA)
  • 潜在语义分析( Latent Semantic Analysis ,LSA, pLSA, GLSA),
  • t-SNE (用于可视化)

常用的关联规则学习算法:

  • Apriori
  • Euclat
  • FP-growth

机器学习语言库选择

Python


    1. Theano是一个python类库,用数组向量来定义和计算数学表达式。它使得在Python环境下编写深度学习算法变得简单。在它基础之上还搭建了许多类库。

    1. Keras是一个简洁、高度模块化的神经网络库,它的设计参考了Torch,用Python语言编写,支持调用GPU和CPU优化后的Theano运算。

    1. Pylearn2是一个集成大量深度学习常见模型和训练算法的库,如随机梯度下降等。它的功能库都是基于Theano之上。

    1. Lasagne是一个搭建和训练神经网络的轻量级封装库,基于Theano。它遵循简洁化、透明化、模块化、实用化和专一化的原则。

    1. Blocks也是一个基于Theano的帮助搭建神经网络的框架。

    1. Caffe是深度学习的框架,它注重于代码的表达形式、运算速度以及模块化程度。它是由伯克利视觉和学习中心(Berkeley Vision and Learning Center, BVLC)以及社区成员共同开发。谷歌的DeepDream项目就是基于Caffe框架完成。这个框架是使用BSD许可证的C++库,并提供了Python调用接口。

    1. nolearn囊括了大量的现有神经网络函数库的封装和抽象接口、大名鼎鼎的Lasagne以及一些机器学习的常用模块。

    1. Genism也是一个用Python编写的深度学习小工具,采用高效的算法来处理大规模文本数据。

    1. Chainer在深度学习的理论算法和实际应用之间架起一座桥梁。它的特点是强大、灵活、直观,被认为是深度学习的灵活框架。

    1. deepnet是基于GPU的深度学习算法函数库,使用Python语言开发,实现了前馈神经网络(FNN)、受限玻尔兹曼机(RBM)、深度信念网络(DBN)、自编码器(AE)、深度玻尔兹曼机(DBM)和卷积神经网络(CNN)等算法。

    1. Hebel也是深度学习和神经网络的一个Python库,它通过pyCUDA控制支持CUDA的GPU加速。它实现了最重要的几类神经网络模型,提供了多种激活函数和模型训练方法,例如momentum、Nesterov momentum、dropout、和early stopping等方法。

    1. CXXNET是一个基于MShadow开发的快速、简洁的分布式深度学习框架。它是一个轻量级、易扩展的C++/CUDA神经网络工具箱,提供友好的Python/Matlab接口来进行训练和预测。

    1. DeepPy是基于NumPy的深度学习框架。

    1. DeepLearning是一个用C++和Python共同开发的深度学习函数库。

    1. Neon是Nervana System 的深度学习框架,使用Python开发。

Matlab


    1. ConvNet 卷积神经网络是一类深度学习分类算法,它可以从原始数据中自主学习有用的特征,通过调节权重值来实现。

    1. DeepLearnToolBox是用于深度学习的Matlab/Octave工具箱,它包含深度信念网络(DBN)、栈式自编码器(stacked AE)、卷积神经网络(CNN)等算法。

    1. cuda-convet是一套卷积神经网络(CNN)代码,也适用于前馈神经网络,使用C++/CUDA进行运算。它能对任意深度的多层神经网络建模。只要是有向无环图的网络结构都可以。训练过程采用反向传播算法(BP算法)。

    1. MatConvNet是一个面向计算机视觉应用的卷积神经网络(CNN)Matlab工具箱。它简单高效,能够运行和学习最先进的机器学习算法。

CPP


    1. eblearn是开源的机器学习C++封装库,由Yann LeCun主导的纽约大学机器学习实验室开发。它用基于能量的模型实现卷积神经网络,并提供可视化交互界面(GUI)、示例以及示范教程。

    1. SINGA是Apache软件基金会支持的一个项目,它的设计目标是在现有系统上提供通用的分布式模型训练算法。

    1. NVIDIA DIGITS是用于开发、训练和可视化深度神经网络的一套新系统。它把深度学习的强大功能用浏览器界面呈现出来,使得数据科学家和研究员可以实时地可视化神经网络行为,快速地设计出最适合数据的深度神经网络。

    1. Intel® Deep Learning Framework 提供了Intel®平台加速深度卷积神经网络的一个统一平台。

Java


    1. N-Dimensional Arrays for Java (ND4J) 是JVM平台的科学计算函数库。它主要用于产品中,也就是说函数的设计需求是运算速度快、存储空间最省。

    1. Deeplearning4j是第一款商业级别的开源分布式深度学习类库,用Java和Scala编写。它的设计目的是为了在商业环境下使用,而不是作为一款研究工具。

    1. Encog是一个机器学习的高级框架,涵盖支持向量机、人工神经网络、遗传编程、贝叶斯网络、隐马可夫模型等,也支持遗传算法。

JavaScript

  • Convnet.js 由JavaScript编写,是一个完全在浏览器内完成训练深度学习模型(主要是神经网络)的封装库。不需要其它软件,不需要编译器,不需要安装包,不需要GPU,甚至不费吹灰之力。

Lua

  • Torch是一款广泛适用于各种机器学习算法的科学计算框架。它使用容易,用快速的脚本语言LuaJit开发,底层是C/CUDA实现。Torch基于Lua编程语言。

Julia

  • Mocha是Julia的深度学习框架,受C++框架Caffe的启发。Mocha中通用随机梯度求解程序和通用模块的高效实现,可以用来训练深度/浅层(卷积)神经网络,可以通过(栈式)自编码器配合非监督式预训练(可选)完成。它的优势特性包括模块化结构、提供上层接口,可能还有速度、兼容性等更多特性。

Lisp

  • Lush(Lisp Universal Shell) 是一种面向对象的编程语言,面向对大规模数值和图形应用感兴趣的广大研究员、实验员和工程师们。它拥有机器学习的函数库,其中包含丰富的深度学习库。

Haskell

  • DNNGraph 是Haskell用于深度神经网络模型生成的领域特定语言(DSL)。

.NET

  • Accord.NET 是完全用C#编写的.NET机器学习框架,包括音频和图像处理的类库。它是产品级的完整框架,用于计算机视觉、计算机音频、信号处理和统计应用领域。

R语言


    1. darch包可以用来生成多层神经网络(深度结构)。训练的方法包括了对比散度的预训练和众所周知的训练算法(如反向传播法或共轭梯度法)的细调。

    1. deepnet实现了许多深度学习框架和神经网络算法,包括反向传播(BP)、受限玻尔兹曼机(RBM)、深度信念网络(DBP)、深度自编码器(Deep autoencoder)等等。

更多精彩,关注建源学堂!


欢迎关注微信公众号: 建源学堂