机器学习入门

275 阅读18分钟

机器学习的概述

什么是机器学习

  • 人工智能

人工智能(Artificial intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它是一个笼统而宽泛的概念,人工智能的最终目标是使计算机能够模拟人的思维方式和行为。大概在上世纪50年代开始兴起,但是受限于数据和硬件设备等限制,当时发展缓慢。

  • 机器学习

机器学习(Machine learning)是人工智能的子集,是实现人工智能的一种途径,但并不是唯一的途径。机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测。大概在上世纪80年代开始蓬勃发展,诞生了一大批数学统计相关的机器学习模型。

  • 深度学习

深度学习(Deep learning)是机器学习的子集,灵感来自人脑,由人工神经网络(ANN)组成,它模仿人脑中存在的相似结构。在深度学习中,学习是通过相互关联的「神经元」的一个深层的、多层的「网络」来进行的。「深度」一词通常指的是神经网络中隐藏层的数量。

发展历史

1950 - 1980 萌芽

1950年艾伦.图灵提出图灵测试,用图灵的话总结起来就是 :”如果一台计算机可让人误认为它是人,则可称它具有智能 “。 1966年设立了以图灵名字命名的图灵奖,这被称为计算机界的“诺贝尔奖”。

1955年,达特茅斯学院的达特茅斯会议上,约翰•麦卡锡(John McCarthy),首次提出了“人工智能”的概念,来概括神经网络、自然语言等“各类机器智能”技术。

在人工智能的热潮中,涌现了从不同的学科背景出发的三大学派:

  • 连接主义:又称为仿生学派或生理学派,包含感知器,人工神经网络,深度学习等技术。代表人物有罗森布莱特(Frank Rosenblatt)等。

  • 符号主义:强调使用符号和逻辑规则来模拟人类智能行为。包含决策树相关的算法,专家系统等技术。代表人物有西蒙和纽厄尔、马文·明斯基等。

  • 行为主义:代表观点智能体与环境交互获得智能,包含控制论、马尔科夫决策过程、强化学习等技术。代表人物有萨顿(Richard Sutton)等。

1980 - 2010 发展

  • 专家系统的兴起与衰落

知识库系统和知识工程成为80年代AI研究的主要方向,出现了许多有名的专家系统:

MYCIN:识别可能导致急性感染的各种细菌,根据患者的体重推荐药物。

DENDRAL:用于化学分析,可预测分子结构。

PXDES:用于预测肺癌程度和类型。

XCON:1980年由CMU为DEC设计,1986年之前每年为DEC省下四千万美金。

由于专家系统知识采集难度大、使用和维护成本高和不具备通用性等问题,使得它的商业化变得异常艰难,引发了第二次AI寒冬。

  • 深度学习的萌芽和发展

在人工智能的第二次寒冬期,神经网络的研究出现了一系列的突破性进展,深度学习开始萌芽。杨乐昆1989年使用反向传播和神经网络识别手写数字,用来读取银行支票上的手写数字,首次实现神经网络商业化。2018年被授予图灵奖。

  • 大数据到来和算力革命

随着互联网的快速发展,人类进入了大数据时代。这一方面为人工智能的发展提供了广阔的应用空间,同时也提供了海量的数据。大数据CPU集群、GPU图形处理器、分布式计算框架为AI提供了良好的条件,算法、数据和算力,相辅相成,推动着人工智能的发展进入了快车道。

2010 - 至今 爆发

人工智能在各行各业中得到广泛使用,推荐系统、自动驾驶、语音识别、图像识别等。

大模型通用人工智能,OpenAI推出的ChatGPT大语言模型,基于大规模、多模态的数据进行训练,已经能够理解人类自然语言并对问题作出反馈。

机器学习的三要素

传统的软件设计模式是:算法 + 数据结构 = 软件,以技术架构和业务逻辑为主。机器学习三要素包括数据算法模型,是数据和算法驱动的,算法是核心,数据和计算是基础。 屏幕截图 2023-08-27 193259.png

数据

数据是机器学习的基础,它包含了输入特征和对应的输出标签(在监督学习中)。数据用于训练模型和评估模型。高质量、多样化的数据对于机器学习的成功至关重要。

算法

指学习模型的具体计算方法,它定义了模型的训练过程和预测过程,通过优化模型参数来使模型更好地拟合数据。

模型

机器学习的核心,模型指的是基于数据X做决策Y的假设函数,可以有不同的形态,计算型和规则型等。模型是基于算法对样本数据进行训练得到的。

机器学习算法开发的基本流程

机器学习流程.png

  • 数据预处理:输入(未处理的数据 + 标签)→ 特征工程(特征处理+幅度缩放、特征选择、维度约减、采样)→ 输出(测试集 + 训练集)。
  • 模型学习:根据问题的性质选择合适的机器学习模型,如决策树、支持向量机、神经网络等。然后使用训练集对模型进行训练,通过学习数据的模式和规律来调整模型的参数。
  • 模型评估:在完成模型的训练和调优后,使用测试集对模型进行最终的评估,评估模型在真实场景下的性能。如果模型表现良好,可以将其应用于实际问题中,进行预测、分类、聚类等任务,如果模型评估结果不理想则会重复特征工程和模型学习来对模型进行迭代,直到模型达到要求。

应用场景

在机器学习中,数据可以分为离散数据和连续数据,这是根据数据的特征类型来划分的。

离散型数据

离散数据是指只能取有限个数数值的数据。离散数据通常表示分类或标签信息,例如性别(男、女)、颜色(红、绿、蓝)等。离散数据的取值通常是通过离散的类别或标签来表示,它们之间没有连续的数值关系。

连续型数据

连续数据是指可以在一定范围内取任意实数值的数据。连续数据通常表示数值型特征,例如身高、体重、温度等。连续数据的取值可以是任意的实数,它们之间存在着连续的数值关系。

机器学习的主要应用场景就是用来处理以下几类问题:

  • 分类:应用以分类数据进行模型训练,根据模型对新样本进行精准分类与预测。
  • 回归:根据对已知属性值数据的训练,为模型寻找最佳拟合参数,基于模型预测新样本的输出值。
  • 聚类:从海量数据中识别数据的相似性与差异性,并按照最大共同点聚合为多个类别。
  • 异常检测:对数据点的分布规律进行分析,识别与正常数据及差异较大的离群点。

image.png

常见名词

  • 特征(Feature)

    特征是描述数据的属性或观测值,也可以理解为数据的各个维度。在机器学习中,特征用于表示输入数据的不同方面,以便模型能够学习和预测。

  • 标签(Label)

    标签是在监督学习中与输入数据对应的输出结果或目标变量。标签用于训练模型,使其能够学习输入特征与输出标签之间的关系,从而进行预测。

  • 训练集(Training Set)

    训练集是用于训练机器学习模型的数据集合。它包含了已知的输入特征和对应的输出标签,模型通过训练集学习输入特征与输出标签之间的关系。

  • 测试集(Test Set)

    测试集是用于评估机器学习模型性能的数据集合。它包含了输入特征,但没有输出标签,模型利用学习到的关系对测试集进行预测,并与真实标签进行比较,以评估模型的准确性和泛化能力。

  • 模型评估(Model Evaluation)

    模型评估是对机器学习模型性能的度量和分析。常见的评估指标包括准确率、召回率、F1值等,用于衡量模型的预测准确性和性能。

  • 过拟合(Overfitting)

    过拟合是指机器学习模型在训练集上表现很好,但在新的未见过的数据上表现较差的现象。过拟合可能是因为模型过于复杂,过度拟合训练数据中的噪声和细节,导致泛化能力下降。

  • 欠拟合(Underfitting)

    欠拟合是指机器学习模型无法很好地拟合训练数据和捕捉数据中的模式和关系。欠拟合通常是由于模型过于简单或训练数据量不足等原因导致的。

  • 交叉验证(Cross-validation)

    交叉验证是一种评估机器学习模型性能的方法。它将数据集划分为多个子集,每次使用其中一部分作为验证集,其他部分作为训练集,多次进行训练和评估,以获得更准确的模型性能估计。

算法分类

常规分类

根据算法在训练过程中使用的数据类型和学习方式来确定,机器学习可以分为:监督学习、无监督学习和强化学习。

算法分类.png

  • 监督学习

监督学习算法的训练数据包含输入特征和对应的输出标签(或目标变量)。算法通过学习输入特征和输出标签之间的关系,建立一个模型,用于预测新的未标记数据的标签。监督学习适用于分类和回归等任务。(有数据有标签)

  • 无监督学习

无监督学习算法的训练数据只包含输入特征,没有输出标签。算法通过发现数据中的模式、结构和关联性来进行聚类、降维和异常检测等任务。无监督学习适用于数据探索和发现隐藏模式的任务。(有数据无标签)

  • 强化学习

强化学习算法通过与环境进行交互来学习和优化决策策略。智能体观察环境的状态,采取行动并接收奖励或惩罚,以最大化累积奖励。强化学习适用于需要通过与环境互动来学习和改进决策的任务。(有延迟和稀疏的反馈标签)

几种常见算法

KNN

KNN可以说是最简单的分类算法之一,KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别

image.png

KNN算法优点

  • 简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。
  • 模型训练时间快,上面说到KNN算法是惰性的,这里也就不再过多讲述。
  • 预测效果好。
  • 对异常值不敏感。

KNN算法缺点

  • 对内存要求较高,因为该算法存储了所有训练数据
  • 预测阶段可能很慢
  • 对不相关的功能和数据规模敏感

朴素贝叶斯

朴素贝叶斯分类是一种十分简单的分类算法,说它十分简单是因为它的解决思路非常简单。即对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

优点

  • 朴素贝叶斯模型发源于古典数学理论,计算效率高、易于实现。
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
  • 分类准确度高,速度快。

缺点

所谓「朴素」,是假定所有输入事件之间是相互独立(特征之间没有关系),属性之间的。但在实际问题中,特征之间往往存在一定的相关性,这可能导致朴素贝叶斯算法的分类效果下降。

决策树

决策树思想的来源于程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

image.png

假如有一批银行的贷款申请的数据,让你决定贷给谁,你会怎么做决定呢?

可以用决策树模型来预测,首先会将对结果影响更大的特征放在最前面,树中的内部节点表示的是特征,每一个叶子节点表示一个分类。

优点

  • 算法简单、易于理解和解释,树木可视化。
  • 需要很少的数据准备,其他技术通常需要数据归一化。

缺点

  • 决策树学习者可以创建不能很好地推广数据的过于复杂的树, 这被称为过拟合。
  • 决策树可能不稳定,因为数据的小变化可能会导致完全不同的树被生成。

线性回归

线性回归算法用于对连续型数值的预测,线性回归算法是一种常用的机器学习回归算法,用于建立输入特征和输出标签之间的线性关系模型。它假设输入特征与输出标签之间存在线性关系,并通过最小化预测值与实际标签之间的误差来拟合线性模型。

优点

  • 算法简单且易于实现。
  • 对于线性关系较强的数据,线性回归模型能够提供较好的拟合效果。
  • 可以通过参数的解释性来分析特征对输出的影响。

缺点

  • 假设输入特征与输出标签之间存在线性关系,对于非线性关系的数据拟合效果较差。
  • 对异常值和噪声敏感,可能会影响模型的准确性。
  • 无法处理特征之间的复杂交互关系。

K-means

聚类算法是一种无监督学习算法,用于将数据集中的样本划分为不同的组或簇,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。聚类算法的目标是发现数据中的内在结构和模式,以便进行数据分析和理解。“物以类聚,人以群分”就可以描述这种算法的思想。

k-means是最为经典的基于划分的聚类算法,主要用于将相似的样本自动归到一个类别中。它的基本思想是:初始随机选取 K 个聚类中心,按照最近邻原则将待分类的样本划分到各个聚类中心中,然后重新计算各个聚类中心,如果聚类中心不再发生变化,或者达到收敛要求便停止,并输出聚类结果。

image.png

  • 图1上有一群散落的点,我们设定簇数k=2

  • 图2为随机找2个点作为中心初始化后,第一次分类的结果。可以看到,红蓝分界线在这群点的中央穿过。这显然有问题,不过没关系,算法继续往下走。对红蓝两类分别计算它们的中心(离散型和连续型数据的处理方式不同,离散型一般取众数,连续型取均值)。

  • 图3中,找到新的中心点后,以新的中心点进行第二次分类。

  • 图4的分界线就基本是已经可以把两团分开了。

  • 后续重复「中心点-分类数据点」的计算过程,直到数据点分配基本不动了,聚类完成。

优点

  • 原理十分简单,容易实现;
  • 可解释性较强;
  • 当数据呈现高斯分布时,效果好。

缺点

  • K值需要事先给定;
  • 对初始质心敏感,不同的初始质心得到的结果完全不同,对结果影响较大;
  • 对异常值比较敏感,可以用于离群点的检测;
  • 仅适用于类圆形数据。因为经常使用的是欧式聚类来计算,因此适用于类圆形的数据。

神经网络

从1956年夏季首次提出“人工智能”这一术语开始,科学家们尝试了各种方法来实现它。这些方法包括专家系统,决策树、归纳逻辑、聚类等等,但这些都是假智能。直到人工神经网络技术的出现,才让机器拥有了“真智能”。

为什么说之前的方法都是假智能呢?因为我们人类能清清楚楚地知道它们内部的分析过程,它们只是一个大型的复杂的程序而已;而人工神经网络则不同,它的内部是一个黑盒子,就像我们人类的大脑一样,我们不知道它内部的分析过程,我们不知道它是如何识别出人脸的,也不知道它是如何打败围棋世界冠军的。我们只是为它构造了一个躯壳而已,就像人类一样,我们只是生出了一个小孩而已,他脑子里是如何想的我们并不知道。

人类大脑神经元细胞的树突接收来自外部的多个强度不同的刺激,并在神经元细胞体内进行处理,然后将其转化为一个输出结果。人工神经元也有着类似的工作原理,上面的x是神经元的输入,相当于树突接收的多个外部刺激。w是每个输入对应的权重,它影响着每个输入x的刺激强度。

神经元组成的神经网络越复杂,越能处理复杂的问题。人工神经网络也是一样的,网络越复杂它就越强大,所以我们需要深度神经网络。这里的深度是指层数多,层数越多那么构造的神经网络就越复杂。训练深度神经网络的过程就叫做深度学习。

人工神经网络构建好了后,我们只需要不停地将训练数据输入到神经网络中,它内部就会自己不停地发生变化不停地学习。例如,我们想要训练一个深度神经网络来识别猫,我们只需要不停地将猫的图片输入到神经网络中去。训练成功后,我们任意拿来一张新的图片,它都能判断出里面是否有猫。

案例实践

KNN 问题的经典案例:鸢尾花分类问题,通过鸢尾花的花萼、花瓣的长和宽进行分类。(相当于学编程入门的hellworld)

鸢尾花分类问题,是 KNN 算法的一个非常经典的案例,scikit-learn 库中已经自带了标记好的鸢尾花数据,共 150 条,包含:萼片和花瓣的长、宽。

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

# iris数据
iris_dataset = datasets.load_iris()
# 划分训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
# 使用KNN算法构建分类器
knn = KNeighborsClassifier(n_neighbors=3)
# 使用训练集训练数据
knn.fit(X_train, y_train)
# 用训练好的模型对测试集数据X_test进行预测
y_pred = knn.predict(X_test)
print("Test set predictions:\n {}".format(y_pred))
print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))

########################################################
测试集预测结果:
 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
测试集预测分数: 0.97

这里的分数值得是最常使用的准确率,即预测结果正确的百分比。

参考资料: www.showmeai.tech/article-sea… www.captainai.net/

天池:tianchi.aliyun.com/course?spm=…