简单介绍下机器学习入门知识

目录

一、什么是机器学习

二、为什么要使用机器学习

三、机器学习系统的种类

3.1 监督/无监督学习

3.2 半监督学习

3.3 强化学习

3.4 批量学习与线上学习

3.5 基于实例学习与基于模型的学习

四、机器学习的主要挑战

4.1 训练数据的数量不足

4.2 数据的不合理有效性

4.3 训练数据不具代表性

五、过拟合和欠拟合

六、测试和验证

6.1 测试集

6.2 交叉验证

七、没有免费午餐公理

八、总结


一、什么是机器学习

机器学习是一门能够让编程计算机从数据中学习的计算机科学(和艺术)。
工程化定义:
一个计算机程序在完成任务T之后,获得经验E,其表现效果为P,如果任务T的性能表现,也就是用以衡量的P,随着E的增加而增加,可以称之为机器学习。

 

二、为什么要使用机器学习

(1)通过机器学习算法可以简化那些现有解决方案需要大量手动调整或者规则列表超长的问题的代码,并且提升执行表现;

  • 比如用传统编程技术编写垃圾邮件过滤器

(2)解决传统技术手段根本无法解决的复杂问题;

  • 语音识别问题

(3)在环境波动中适应新的数据;

  • 新写法的垃圾邮件

(4)从复杂问题和海量数据中获得洞见。

  • 通过研究训练效果优秀的学习算法的数据,了解人类没有发现的数据中的关联性或新趋势

 

三、机器学习系统的种类

3.1 监督/无监督学习

标准:是否在人类的监督下训练。

(1)监督学习

重要的监督学习算法:

  • K-近邻算法(KNN)
  • 线性回归(LR)
  • 逻辑回归(LR)
  • 支持向量机(SVM)
  • 决策树和随机森林(DT RF)
  • 一部分神经网络(NN)

(2)无监督学习

聚类算法(比如,检测相似访客的分组)

  • K-平均算法(K-means)
  • 层次聚类分析(HCA)
  • 最大期望算法(EM)

可视化和降维(可视化,便于人理解数据怎么组织)(降维,用来做特征提取,减小数据所占空间,提高速度,有可能提高性能)

  • 主成分分析(PCA)
  • 核主成分分析(Kernel PCA)
  • 局部线性嵌入(LLE)
  • t-分布领域嵌入算法(t-SNE)

关联规则学习(发现数据属性间的联系:比如超市的商品)

  • Apriori
  • Eclat

3.2 半监督学习

  • 大量未标记数据和少量已标记数据
  • 大多数半监督算法采用无监督和监督算法结合
  • 深度信念网络(DBN)基于一种互相叠加的非监督组件(受限玻尔兹曼机),然后用监督学习进行微调

3.3 强化学习

学习系统,又称为智能体,能够观察环境,作出选择,执行操作,并获得回报,或者以负面回报的形式获得惩罚。

  • 比如:AlphaGo

3.4 批量学习与线上学习

标准:是否能从导入的数据流进行持续学习。

(1)批量学习

必须使用所有的可用数据进行训练,一般采用离线学习的方式,即先训练系统,然后将其投入生产环境,这时候学习过程停止,只是将所学的应用处理。只是每次更新数据的时候,重新训练的成本较大。

(2)线上学习

又称为增量学习,持续接收数据流,并同时对数据流的变化做出快速或自主的反应,可以解决超大数据集的训练问题。需要指出的是,整个训练通常也是离线完成的,“在线学习”具有歧义性,称为增量学习更合适。

3.5 基于实例学习与基于模型的学习

是将新的数据和已知的数据进行匹配,还是对训练数据进行模式检测,进而建立预测模型。根据如何泛化来分类。

(1)基于实例的学习

将所有的训练数据全部记住,然后根据某种相似度度量方式将其泛化到新的实例。

(2)基于模型的学习

构建符合训练数据特征的模型,然后根据模型来预测。

  • 研究数据;
  • 选择模型;
  • 用训练数据进行训练(即,学习算法搜寻模型参数值,使代价函数最小);
  • 最后,使用模型对新案例进行预测(这称作推断),但愿这个模型推广效果不差。

 

四、机器学习的主要挑战

4.1 训练数据的数量不足

目前大部分机器学习算法都需要大量的数据才能正常工作(除非重用现有模型的某些部分)。

4.2 数据的不合理有效性

2001年,微软有研究员表明,截然不同的机器学习算法(包括最简单的算法)在自然语言歧义消除这个复杂问题的表现上,几乎完全一致
这些数据表明,和算法开发上,数据的建设尤为重要。

4.3 训练数据不具代表性

如果有部分数据缺失,则会是模型的预测不准确。

 

五、过拟合和欠拟合

(1)过拟合

警告:过拟合发生在相对于训练数据的量和噪声,模型过于复杂的情况。可能的解决方案有:

  • 简化模型,可以通过选择一个参数更少的模型(比如使用线性模型,而不是高阶多项式模型)、减少训练数据的属性数、或限制一下模型
  • 收集更多的训练数据
  • 减小训练数据的噪声(比如,修改数据错误和去除异常值)

(2)欠拟合

与过拟合相反,产生的原因是对于训练数据来说,模型过于简单,比如用线性模型预测幸福值,就属于拟合不足,因为实际情况显然比这要复杂的多。
解决方式:

  • 选择一个更强大的模型,带有更多参数
  • 用更好的特征训练学习算法(特征工程)
  • 减小对模型的限制(比如,减小正规化超参数)

 

六、测试和验证

了解一个模型对于新场景的泛化能力的唯一方法就是,让模型真实的取处理新场景。

6.1 测试集

做法之一是将模型部署到新场景,然后监控它的输出。但这样如果模型效果不好,用和肯定会抱怨,所以这显然不是最好的办法。

更好的选择是将数据分割成两部分:训练集和测试集。顾名思义,训练集用来训练模型,测试集用来测试模型,应对新场景的误差率称为泛化误差。通过测试集来评估模型,就可以得到对这个误差的评估。这个评估可以知道模型在处理新场景的能力如何。 如果训练误差很低(模型对于训练集很少出错),但是泛化误差很高,那说明模型对于训练数据存在过度拟合

通常采用2/8定律,20%用于测试,80%用于训练

6.2 交叉验证

评估一个模型,可以采用测试集,那么对于多个模型呢?(比如线性模型和多项式模型)

这时候,千万不要用测试集去验证,这样仍然会出现过拟合。正确的做法是交叉验证,通过将训练机分成若干个互补的子集,然后将多个模型,在这些子集的不同组合进行训练,再用剩下的子集进行验证,从而选定最好的模型,最后再用测试集来测试泛化误差

 

七、没有免费午餐公理

模型是观察的简化,这个简化是丢弃了那些不大可能泛化到新实例上的多余细节。要确定舍弃什么数据、保留什么数据,必须要做假设。例如,线性模型的假设是数据基本上是线性的,实例和模型直线间的距离只是噪音,可以放心忽略。

1996年,David Wolpert提到,如果没有对数据做出假设,那么就没有理由更偏好于哪个模型,那么想要知道哪个模型最好的方式,就是对所有模型进行评估。但实际上是不可能的,所以需要对数据做出一些合理的假设。

例如,对于简单任务,你可能是用不同程度的正规化评估线性模型,对于复杂问题,你可能要评估几个神经网络模型

 

八、总结

  1. 机器学习是让机器通过学习数据对某些任务做得更好,而不使用确定的代码规则;
  2. 有许多不同类型的机器学习系统:监督或非监督,批量或线上,基于实例或基于模型,等等;
  3. 在机器学习项目中,训练集来收集数据,然后对学习算法进行训练。如果算法是基于模型的,就调节一些参数,让模型拟合到训练集(即,对训练集本身作出好的预测),然后希望它对新样本也能有好预测。如果算法是基于实例的,就是用记忆学习样本,然后用相似度推广到新实例;
  4. 如果训练集太小、数据没有代表性、含有噪声、或掺有不相关的特征(垃圾进,垃圾出),系统的性能不会好。最后,模型不能太简单(会发生欠拟合)或太复杂(会发生过拟合)。

 

 

 

你可能感兴趣的:(机器学习,机器学习)