「基础篇」机器学习概览

news2024/11/15 8:03:24

文章目录

    • 1. 什么是机器学习
    • 2. 引入机器学习
    • 3. 应用场景
    • 4. 机器学习分类
      • 4.1. 有无人类监督
      • 4.2. 是否增量学习
      • 4.3. 泛化方式
    • 5. 主要挑战
    • 6. 测试与验证

1. 什么是机器学习

机器学习Machine LearningML)是一个研究领域,让计算机无需进行明确编程,就具备从数据学习的能力;

一个计算机程序利用经验 E 来学习任务 T,性能是 P,如果针对任务 T 的性能 P 随着经验 E 不断增长,则称为机器学习

垃圾邮件过滤器,根据垃圾邮件(用户标记为垃圾)和普通邮件学习标记垃圾邮件;任务 T 就是标记新邮件是否是垃圾邮件,经验 E 就是训练数据,性能 P 需要定义(如准确率:正确分类的邮件比例);

  • 训练集,系统用来进行学习的样例;
  • 训练实例样本),每一个训练样例;

2. 引入机器学习

垃圾邮件过滤器(传统规则系统)

请添加图片描述

  • 研究问题:看垃圾邮件一般是什么样子;比如垃圾邮件会频繁出现一些固定模式的词或短语(4U、credit card、free、amazing 等);
  • 编写规则:为每个模式各写一个检测算法,程序在邮件中匹配到一个模式(规律),就将之标记为垃圾邮件;
  • 评估 & 分析错误:测试程序匹配正确性,重复迭代,直到匹配效果足够好;

传统规则系统应对这类需要大量人工微调或大量规则的问题,很难维护大量复杂的规则;

请添加图片描述

ML 技术的垃圾邮件过滤器会自动学习词和短语(预测因素),通过与非垃圾邮件比较,检测垃圾邮件中反复出现的词语模式;更易维护,也更精确;

请添加图片描述

  • 更新数据:用户手动标记垃圾邮件,此时 ML 算法会自动完成垃圾邮件标记,无须人工干预;

  • 数据挖掘,在训练了足够多的样本后,就可以列出模型的特征,这有时可能发现不引人注意的关联或新趋势,有助于更好的理解问题;这种使用机器学习方法挖掘大量数据来发现不明显规律的方式,就是数据挖掘;

ML 适用场景

  • 有解决方案,但需要大量人工微调或准信大量规则的问题,机器学习通常可以简化代码,相比传统方法有更好的性能(如垃圾邮件过滤器);
  • 传统方法难以解决的复杂问题,最好的 ML 自我学习算法也许可以找到解决方案(如语言识别);
  • 环境有波动的问题,ML 算法可以适应新数据;
  • 帮助人类洞察复杂问题和大量数量(数据挖掘);

3. 应用场景

  • 图像分类:使用卷积神经网络CNN)分析生产线产品图像,对产品进行自动分类;
  • 语义分割:通过脑部扫描图像,使用 CNN 给图像每个像素分类,以确认肿瘤的确切位置和形状;
  • 文本分类:使用循环神经网络RNN)、CNNTransformer自然语言处理NLP)工具进行新闻自动分类:
  • 文本分类:使用自然语言处理NLP)工具自动标识论坛中的恶评;
  • 文本总结:使用自然语言处理NLP)工具自动对长文章做总结;
  • 自然语言理解NLU)& 问答模块:使用自然语言处理NLP)工具创建聊天机器人或个人助理;
  • 回归问题:使用回归模型,如线性回归多项式回归SVM 回归随机森林回归人工神经网络等,或通过过去性能指标使用如 RNNCNNTransformer 等,预测公司下一年的收入;
  • 语言识别:使用 RNN、CNN、Transformer 等处理音频采样,实现对语言命令做出反应;
  • 异常检测:检测性用卡欺诈;
  • 聚类问题:基于客户的购买记录对客户进行分类,对不同类别的客户设计不同的市场策略;
  • 数据可视化:通过降维技术,使用图表展示复杂的高维数据集;
  • 推荐系统:使用人工神经网络,基于以前的购买记录给客户推荐可能感兴趣的产品;
  • 强化学习RL):通过奖惩机制训练代理,为游戏建造智能机器人;

4. 机器学习分类

分类方式类别
是否在人类监督下监督学习无监督学习半监督学习强化学习
是否动态进行增量学习在线学习批量学习
泛化方式基于实例的学习基于模型的学习

4.1. 有无人类监督

  1. 有监督学习

通过经标记的数据(标签)进行训练的学习任务;

  • 标签,在学习中,提供给算法的包含解决方案的训练集;
  • 属性,一种数据类型,反映事件或对象在某方面的表现或性质的事项;
  • 特征,通常指一个属性加上其值;也可指代属性;
  • 分类任务,典型的有监督学习任务,通过大量包含类别信息的样本进行训练,学习如何对新样本进行分类;预测结果为离散值;
  • 回归任务,典型的有监督学习任务,通过大量包含标签的样本进行训练,学习如何给新的样本预测一个目标数值;预测结果为连续值;

重要的监督学习算法

  • k-近邻算法
  • 线性回归
  • 逻辑回归
  • 支持向量机(SVM)
  • 决策树和随机森林
  • 神经网络
  1. 无监督学习

通过未经标记的数据进行训练的学习任务;

  • 聚类,将通常不拥有标记信息的训练集的样本分为若干组,每个组称为一个“簇”(cluster),对应一些潜在的概念划分;
  • 可视化,将大量复杂的未经标记的数据绘制成 2D 或 3D 的数据表示,保留尽可能多的结构,并识别出一些未知的模式;
  • 降维,在不丢失太多信息的前提下简化数据,如将多个相关特征合并为一个(特征提取:如将汽车的里程和使用年限合并成一个磨损度的特征);
  • 异常检测,用正常的实例进行训练,然后判断新势力是正常还是异常;
  • 关联规则学习,挖掘大量数据,发现属性之间的联系;

可以通过降维减少训练数据的维度,在将之提供给另一个 ML 算法(比如监督学习算法),这样可以缩小运行所需空间,并提升执行性能;

重要的无监督学习算法

  • 聚类算法
  • k-均值算法
  • DBSCAN
  • 分层聚类
  • 异常检测和新颖性检测
  • 单类 SVM
  • 孤立森林
  • 可视化和降维
  • 主成分分析(PCA)
  • 局部线性嵌入(LLE)
  • t-分布随机近邻嵌入(t-SNE)
  • 关联规则学习
  • Apriori
  • Eclat
  1. 半监督学习

处理部分已标记数据的算法,被称为半监督学习算法;

  • 照片托管服务,先自动识别照片中出现的人物 A、B、C,然后由认为告诉系统 A、B、C 是谁;

半监督学习算法

  • 深度信念网络(DBN),基于一种互相堆叠的无监督组件(受限玻尔兹曼机(RBM),无监督),使用监督学习技术对整个系统进行微调;
  1. 强化学习

通过观察环境,做出选择,执行动作,并获得正负回报(奖惩),从而学习什么是最好的策略;如 DeepMind 的 AlphaGo,机器人行走等;

4.2. 是否增量学习

  1. 批量学习

使用所有可用数据进行离线训练,得到系统,然后将停止学习的系统投入生产环境,将所学到的应用出来;

新数据的学习需要在完整数据集(新旧数据)的基础上重新训练系统,然后停用旧系统,用新系统取代;

无法增量学习,需要的大量时间和计算资源(CPU、内存、磁盘空间、磁盘 I/O、网络 I/O 等);

  1. 在线学习

循序渐进的给系统提供训练数据,逐步积累学习成果;模型经过训练并投入生产环境,然后根据飞速写入的最新数据继续不断学习;

新的数据一旦经过在线学习系统的学习,就可以丢弃(节省了大量资源,除非需要留备重新学习);

适用于资源有限的系统,或者超大数据集的学习任务(核外学习,将数据集分成小批量数据用于在线学习系统的持续训练);

在线学习在接收不良数据后,系统的性能会逐渐下降;这需要密切监控系统,一旦性能下降,及时中断学习(甚至恢复之前的工作状态);需要监控输入数据,检测出异常数据(异常检测算法);

  • 学习率,在线学习系统的一个参数,代表适应新数据的速度;学习率高,则很快适应新数据,但会很快忘记旧数据;学习率低,则系统存在较高的惰性,学习会更缓慢,但也会对新数据的噪声非典型数据点离群值)的序列更不敏感;

4.3. 泛化方式

  • 泛化,系统通过给定的训练示例,在它未见过的示例上进行预测的能力(ML 的真正目的是要在新的对象实例上表现出色,而非局限在训练集上);
  1. 基于实例学习

系统会记住训练实例(死记硬背),通过使用相识度度量来比较新实例和已学习的实例,从而泛化新实例;

例:k-近邻回归

通过找到与新实例最相近的若干训练实例,将这些训练实例的均值作为新实例的预测结果;

  1. 基于模型学习

泛化出适配训练实例的模型(可以描述实例分布的代数表示?),使用该模型进行新实例的预测;

  • 模型,数据中学得的结果,对应了数据中某种潜在的规律,亦称假设,规律本身称作“真相”,学习过程就是为了找出或逼近真相(模型表示全局性结果,模式表示局部性结果,比如一条规则);
  • 模型训练,运行一种寻找模型参数的算法,通过训练样本,找出最符合训练数据的模型参数,使成本函数最小;
  • 模型选择,包括选择模型的类型和完全指定它的架构(输入输出结构);
  • 效用函数,衡量模型多好的函数;
  • 成本函数,衡量模型多差的函数;

例:线性回归

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model
# Load the data
oecd_bli = pd.read_csv("oecd_bli_2015.csv", thousands=',')
gdp_per_capita = pd.read_csv("gdp_per_capita.csv",thousands=',',delimiter='\t',
                            encoding='latin1', na_values="n/a")
# Prepare the data
country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
X = np.c_[country_stats["GDP per capita"]]
y = np.c_[country_stats["Life satisfaction"]]
# Visualize the data
country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')
plt.show()

# Select a linear model
model = sklearn.linear_model.LinearRegression()
# Train the model
model.fit(X, y)
# Make a prediction for Cyprus
X_new = [[22587]]  # Cyprus's GDP per capita
print(model.predict(X_new)) # outputs [[ 5.96242338]]

# # Select a 3-Nearest Neighbors regression model
# import sklearn.neighbors
# model1 = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3)

通过模型训练找到最拟合训练数据的模型参数,然后直接通过得到的模型计算新实例的预测结果;

研究数据 -> 选择模型 -> 训练模型 -> 模型推理

5. 主要挑战

在 ML 过程中最主要的任务是选择学习算法、使用某些数据进行训练;因此最可能出现的问题就是坏算法坏数据;

  1. 数据不足
  • 数据的不合理有效性,给定足够数据,不同的 ML 算法在自然语言歧义消除上表现几乎一致;

把钱和时间花在算法的开发上,还是语料库的建设上是需要权衡的问题;对于复杂的问题,数据比算法更重要;

  1. 训练数据不具代表性

对于将要泛化的新实例,训练数据必须有非常强的代表性;

  • 采样偏差,若样本集太小,会出现采样噪声;即使样本集够大,若采样方式欠妥,也可能拿到非代表性数据集;
  1. 低质量数据

训练集是错误、异常值或噪声,系统将难以检测底层模式,学习效果不可能好;

  • 若某些实例明显异常,可以直接丢弃、或尝试手动修复;
  • 若某些实例缺少部分特征,可以整体忽略这些特征、忽略这部分缺失的实例、将缺失部分补全(中位数等)、训练一个带这个特征的模型,再训练一个不带这个特征的模型,进行比较;
  1. 无关特征

只有训练数据里包含足够多的相关特征,较少的无关特征,系统才能完成学习;

  • 特征工程,提取一组好的用来训练的特征集;
    • 特征选择,从现有特征中选择最有用的特征进行训练;
    • 特征提取,将现有特征进行整合,产生更有用的特征(如降维);
    • 创建新特征,收集新数据等;
  1. 过拟合

把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质;可以检测到数据中微小模式,但若训练集本身是有噪声的,或者数据集太小(引入了采样噪声),就很可能导致模型检测噪声本身的模式;这些模式不能泛化新的实例;

  • 简化模型,选择较少参数的模型(高阶多项式模型 -> 线性模型)、减少训练数据中的属性数量、约束模型;

  • 收集更多训练数据;

  • 减少训练数据中的噪声(修复数据错误和异常值);

  • 自由度,模型的参数个数代表了调整模型的自由度大小;

  • 正则化,通过约束模型使其更简单,并降低过拟合的风险,这个过程叫正则化;

  • 超参数,学习算法本身的参数,并非模型的参数,如应用正则化的数量;

在完美匹配数据和保持模型简单之间找到平衡点,从而确保模型能够较好的泛化;

  1. 欠拟合

欠拟合过拟合相反,表示底层数据结构的模型太简单;对训练样本的一般性质尚未学好;

  • 选择一个带有更多参数、更强大的模型;
  • 给学习算法提供更好的特征集(特征工程);
  • 减少模型中的约束(减少正则化超参数);

6. 测试与验证

一旦训练了一个模型,不能只是希望它可以正确的对新的场景做出泛化,还需要评估它,必要时做出一些调整;

了解一个模型对新场景的泛化能力唯一的办法是让模型真实的去处理新场景(部署到生产环境,然后监控它的输出,但可能导致用户抱怨);

将数据分割为两部分:训练集、测试集;

  • 训练集,用于训练模型的数据集;
  • 测试集,用于测试模型泛化能力的数据集;从样本真实分布中独立同分布采样而得,应尽量与训练集互斥,且未被训练集使用过(为了得到泛化性能强的模型);
  • 泛化误差样例外误差,通过测试集评估模型,评估应对新场景的误差率,体现了模型处理新场景时的能力;

训练误差很低,但泛化误差很高,就是典型的过拟合

  1. 超参数调整与模型选择

使用若干个不同超参数训练出不同的模型,用验证集找到其中最佳的超参数版本(最佳模型);然后用完整的训练集(训练集 + 验证集)训练这个最佳模型,最后在测试集上评估这个模型的泛化误差;

若直接使用测试集进行超参数调整和模型选择,则使用测试集进行的拟合评估是无效的,因为通过测试集选择出来的模型必然会高度拟合测试集,因此需要再从训练集中分出一个验证集,专用于做超参数调整与模型选择

  • 保持验证,保留训练集的一部分,以评估几种候选模型,并选择最佳模型;新的保留集称为验证集(或开发集dev set);
  • 验证集,用于评估和选择模型超参数的数据集;
  • 奥卡姆剃刀偏好选择),若有多个假设与观察一致,则选最简单的那一个;

验证集太小则模型选择不精确,太大则训练集剩余部分变小,犹如让短跑运动员参加马拉松;

  • 交叉验证法cross validation)/k 折交叉验证k-fold cross validation),将数据集 D 划分为 k 个大小相似,数据分布一致(通过分层采样获得)的互斥子集,每次用 k-1 个子集对并集作为训练集,剩余那个子集作为验证集;这样可以获得 k 组训练/验证集,进行 k 次训练和测试后,求 k 次测试结果的均值;
  1. 数据不匹配

验证集测试集必须与在生产环境中使用的数据具有相同的代表性,可以将其混洗,一半作为验证集,一半作为测试集(确保两者不重复也不接近重复);

  • 分层采样stratified sampling),保留类别比例的采样方式;

训练集验证集测试集的数据之间不匹配时,可以使用 train-dev 集

  • train-dev 集训练集的一部分(模型未在其上训练过,该数据集应始终与模型投入生产环境后使用的数据尽可能接近);模型在训练集的其他部分上进行训练,并在 train-dev 集验证集上进行评估;

    • 如果模型在训练集上表现良好,但在 train-dev 集上表现不佳,则该模型可能过拟合训练集;
    • 如果它在训练集train-dev 集上均表现良好,但在验证集上却表现不佳,那么训练集验证集测试集之间可能存在明显的数据不匹配,应该尝试改善训练数据,使其看起来更像验证集测试集
  • NFLNo Free Lunch Theorem没有免费的午餐): 无论算法 a 多聪明,算法 b 多笨拙,他们的期望性能相同,若对数据绝对没有任何假设,就没有理由偏好于某个模型;脱离具体问题,空泛地谈论什么学习算法更好毫无意义;


专栏:《机器学习》

PS:感谢每一位志同道合者的阅读,欢迎关注、评论、赞!


参考资料:

  • [1]《机器学习》
  • [2]《机器学习实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac item2 配置免密登录开发机

1、配置 vi ~/.ssh/config 内容如下: Host * ControlMaster auto ControlPath ~/.ssh/master-%r%h:%p ControlPersist yes ServerAliveInterval 60 学习: ControlMaster #连接共享 ControlPath #与ControlMaster一起使用,指定连接共享的路径…

log4j控制台不打印日志的故障解决方案

前言 接管了别的项目组的一个代码,在IDAE调试程序的过程中,发现log4j日志居然没有打印在控制台上,日志相关代码也没有问题。 在网上搜索了一圈,总结了一下个人解决这个问题的流程。 流程 1. 判断用了什么配置文件 不知道是出…

线程池的使用——线程池的创建方式

线程池的使用——创建线程线程池的创建线程池的创建方式Executors.newFixedThreadPool:Executors.newCachedThreadPool:Executors.newSingleThreadExecutor:Executors.newScheduledThreadPool:Executors.newSingleThreadScheduled…

24- 深度学习的模型保存和加载 (TensorFlow系列) (深度学习)

知识要点 keras 保存成hdf5文件, 1.保存模型和参数, 2.只保存参数 1.保存模型和参数 save_modelcallback ModelCheckpoint2. 只保存参数 save_weightscallback ModelCheckpoint save_weights_only True 保存模型: 案例数据: Fashion-MNIST总共有十个类别的图像model.save_w…

spark graph基础(一)

1 overView 1.1 图的构成 图由节点和边组成,其中VertexRDD[VD] 和EdgeRDD[ED] 继承和优化了 RDD[(VertexId, VD)] 和RDD[Edge[ED]] 。 class Graph[VD, ED] {val vertices: VertexRDD[VD]val edges: EdgeRDD[ED] }1.2 图使用示例 如下图所示,使用spa…

Typro使用以及安装教程来啦

Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。今天为大家分享下有关Typroa的安装以及使用&a…

TryHackMe-黑我杯

黑我杯 相信我们大家在TryHackMe的日积月累都学到了不少东西,从纯萌新到oscp再到更高 我很高兴能将国内各thm玩家聚集到一起,构建一个更好的学习环境和氛围 本次娱乐分两场: Offensive Pentesting — 中等难度Junior Penetration — 容易难…

@Autowired和@Resource到底有什么区别

Autowired 和 Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它。 Autowired 和 Resource 的…

Linux 确认 NTP 是否同步成功

NTP 即Network Time Protocol,它通过网络同步计算机系统之间的时钟。NTP 客户端会将其时钟与 NTP 服务器同步。NTP同步状态可以通过以下三个命令查询:ntpq:ntpq 是标准的 NTP 查询程序。ntpstat:显示网络时间同步的状态。timedate…

【房间墙上凿个洞,看你在干嘛~】安全攻防内网渗透-绕过防火墙和安全检测,搭建DNS隐蔽隧道

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。所以可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。…

Spark 广播/累加

Spark 广播/累加广播变量普通变量广播分布式数据集广播克制 Shuffle强制广播配置项Join Hintsbroadcast累加器Spark 提供了两类共享变量:广播变量(Broadcast variables)/累加器(Accumulators) 广播变量 创建广播变量…

快速上手配置firewalld

firewalld使用firewall-cmd命令配置策略。 查看当前firewalld当前服务运行状态 firewall-cmd --state firewalld防火墙状态还用使用如下命令查看状态 systemctl status firewalld 查看所有打开运行的端口 firewall-cmd --zonepublic --list-ports 查看区域信息情况 firewall…

qml学习之qwidget与qml结合使用并调用信号槽交互

学习qml系列之一说明: 学习qml系列之qwiget和qml信号槽的交互使用,并在qwidget中显示qml界面 在qml中发送信号到qwidget里 在qwidget里发送信号给qml 在qwidget里面调用qml界面方式 方式一:使用QQuickView 这个是Qt5.0中提供的一个类&…

小白量化《穿云箭集群量化》(5)抄底雷达策略

小白量化《穿云箭集群量化》(5)抄底雷达策略 雷达能够提前发现远处敌我动向。雷达是现代战争不可或缺的装备。 证券市场中分三类人,先知先觉者,后知后觉者,不知不觉者。先知先觉者往往是市场主力,他们拥有信…

Feign踩坑源码分析 -- 请求参数分号变逗号

一.案例 1.1.Post请求: http://localhost:8250/xx/task/test json格式参数: {"string": "a;b;c;d" } 1.2.controller代码: AutowiredDataSourceClientService dataSourceClientService;RequestMapping("/test"…

《计算机原理》——HelloWorld.cpp如何运行的

学校《计算机原理》开课啦!特此开辟专栏,将一些知识作为笔记,记录下来。 前言 本篇博客知识点来源于educoder的相关题目 1. 相关知识 1.1 计算机语言 计算机语言是人与计算机之间通讯的语言,计算机语言包括编写计算机程序的字符…

[MatLab]图像绘制

一、绘制二维图像 1.一张图上绘制一条线 绘制代码如下面所示: x 0:0.01:2*pi; y sin(x); figure %建立幕布 plot(x,y) %绘制图像 %设置图像属性 title(ysin(x)) xlabel(x) ylabel(y)xlim([0 2*pi]) %限制x轴的值域 自定义图线的颜色…

GB28181协议--SIP协议介绍

1、SIP协议简介 SIP(Session Initiation Protocol,会话初始协议)是一个用于建立、更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体会话或多媒体会议(GB28181安防使用的是SIP协议)。S…

lab备考第二步:HCIE-Cloud-Compute-第一题:FusionCompute

第一题 FusionCompute 一、题目介绍 1.1. 扩容CAN节点与对接共享存储(必选) 题目及【考生提醒关键点】 扩容一台CNA节点,配置管理地址设置为:192.168.100.212。密码设置为:Cloud12#$。【输入之前确认自己的大小写是否…

任务类风险漏洞挖掘思路

任务类风险定义: 大部分游戏都离不开任务,游戏往往也会借助任务,来引导玩家上手,了解游戏背景,增加游戏玩法,提升游戏趣味性。任务就像线索,将游戏的各个章节,各种玩法,…