当前位置:   article > 正文

机器学习初学者教程

机器学习初学者教程

本机器学习教程提供机器学习的中级和基础内容。它专为完全初学者的学生和在职专业人士设计。在本教程结束时,您将能够创建机器学习模型,这些模型可以执行复杂的任务,例如预测房价或根据花瓣和萼片长度的尺寸识别鸢尾花的种类。如果您不是完全的初学者,并且对机器学习有点熟悉,我建议从子主题八开始,即机器学习的类型。

1. 什么是机器学习?

1959 年,亚瑟·塞缪尔 (Arthur Samuel) 创造了“机器学习”一词。他是人工智能和电脑游戏领域的先驱,他将机器学习定义为“使计算机无需明确编程即可学习的研究领域”。

简单来说,机器学习是人工智能 (AI) 的一种应用,它使程序(软件)能够从经验中学习,并在无需明确编程的情况下提高自身完成任务的能力。例如,如何编写一个程序,根据水果的各种属性(如颜色、形状、大小或任何其他属性)来识别水果?

一种方法是对所有内容进行硬编码,制定一些规则并使用它们来识别成果。这似乎是唯一的方法和工作,但永远无法制定适用于所有情况的完美规则。这个问题可以轻松使用机器学习来解决,无需任何规则,这使得它更加健壮和实用。您将在接下来的部分中看到我们将如何使用机器学习来完成这项任务。

因此,我们可以说,机器学习是研究如何让机器在行为和决策上更像人类,让它们能够在最少的人为干预(即无需明确编程)的情况下进行学习。现在出现了一个问题,程序如何获得经验,从哪里学习?答案是数据。数据也被称为机器学习的燃料,我们可以肯定地说,没有数据就没有机器学习。

你可能想知道,机器学习这个术语早在 1959 年就被引入了,那为什么直到最近几年才被提及呢?你可能要注意到,机器学习需要巨大的计算能力、大量的数据和能够存储如此海量数据的设备。我们最近才达到现在拥有所有这些要求并可以实践机器学习的地步。

2. 它和传统编程有何不同?

您是否想知道机器学习与传统编程有何不同?在传统编程中,我们会将输入数据和经过精心编写和测试的程序输入到机器中以生成输出。在机器学习中,输入数据以及与数据相关的输出在学习阶段被输入到机器中,然后机器会自行制定程序。

3. 为什么我们需要机器学习?

如今,机器学习已受到人们的广泛关注。机器学习可以自动执行许多任务,尤其是那些只有人类才能凭借其天生的智慧完成的任务。只有借助机器学习,才能将这种智慧复制到机器上。 

借助机器学习,企业可以自动执行日常任务。它还有助于自动化和快速创建数据分析模型。各行各业都依赖大量数据来优化运营并做出明智的决策。机器学习有助于创建可以处理和分析大量复杂数据以提供准确结果的模型。这些模型精确且可扩展,并且周转时间更短。通过构建这种精确的机器学习模型,企业可以利用有利可图的机会并避免未知风险。

图像识别、文本生成和许多其他用例正在现实世界中得到应用。这增加了机器学习专家作为受追捧的专业人士所展现才华的空间。 

4. 机器学习如何工作?

机器学习模型从输入的历史数据中学习,然后构建预测算法来预测作为系统输入的新数据集的输出。这些模型的准确性取决于输入数据的质量和数量。大量数据将有助于构建更好的模型,从而更准确地预测输出。

假设我们手头有一个复杂的问题,需要进行一些预测。现在,我们不用编写代码,只需将给定的数据输入通用机器学习算法即可解决这个问题。在这些算法的帮助下,机器将开发逻辑并预测输出。机器学习改变了我们处理商业和社会问题的方式。下面的图表简要解释了机器学习模型/算法的工作原理。我们思考问题的方式。

5. 机器学习的历史

如今,我们可以看到机器学习的一些令人惊叹的应用,例如自动驾驶汽车、自然语言处理等等。但机器学习已经存在了 70 多年。一切始于 1943 年,当时神经生理学家 Warren McCulloch 和数学家 Walter Pitts 撰写了一篇关于神经元及其工作原理的论文。他们决定使用电路创建一个模型,因此,神经网络诞生了。

1950 年,艾伦·图灵 (Alan Turing) 发明了“图灵测试”,用来确定计算机是否具有真正的智能。要通过测试,计算机必须能够欺骗人类,使其相信自己也是人类。1952 年,亚瑟·塞缪尔 (Arthur Samuel) 编写了第一个计算机学习程序。该程序是跳棋游戏,IBM 计算机玩得越多,游戏水平就越高,它研究哪些动作构成了获胜策略,并将这些动作纳入其程序中。

几年后,1957 年,弗兰克·罗森布拉特 (Frank Rosenblatt) 设计了第一个计算机神经网络 (感知器),它模拟了人脑的思维过程。后来,在 1967 年,“最近邻”算法问世,使计算机开始使用非常基本的模式识别。这可以用来为旅行推销员绘制路线,从随机城市出发,但确保他们在短途旅行中访问所有城市。

但我们可以说,在 20 世纪 90 年代,我们看到了巨大的变化。现在,机器学习的工作从知识驱动的方法转向了数据驱动的方法。科学家开始为计算机编写程序,以分析大量数据并得出结论或从结果中“学习”。

1997 年,IBM 的“深蓝”成为首个击败国际象棋世界冠军的计算机国际象棋系统。“深蓝”利用 20 世纪 90 年代的计算能力,大规模搜索潜在走法,并选出最佳走法。就在十年前的 2006 年,杰弗里·辛顿 (Geoffrey Hinton) 创造了“深度学习”一词,用来解释帮助计算机区分图像和视频中的物体和文本的新算法。

6. 机器学习现状

2012 年,Alex Krizhevsky、Geoffrey Hinton 和 Ilya Sutskever 发表了一篇颇具影响力的研究论文,描述了一种可以大幅降低图像识别系统错误率的模型。与此同时,谷歌的 X Lab 开发了一种机器学习算法,能够自动浏览 YouTube 视频以识别包含猫的视频。2016 年,AlphaGo(由谷歌 DeepMind 的研究人员创建,用于玩古老的中国围棋游戏)在与李世石的五场比赛中赢了四场,李世石十多年来一直是世界顶级围棋选手。

如今,到了 2020 年,OpenAI 发布了 GPT-3,这是有史以来最强大的语言模型。它可以创作创意小说、生成功能代码、撰写深思熟虑的商业备忘录等等。它的可能用例仅受我们的想象力的限制。

7. 机器学习的特点

7.1 自动化

如今,您的 Gmail 帐户中有一个垃圾邮件文件夹,其中包含所有垃圾邮件。您可能想知道 Gmail 如何知道所有这些电子邮件都是垃圾邮件?这是机器学习的工作。它可以识别垃圾邮件,因此很容易实现此过程的自动化。自动执行重复任务的能力是机器学习的最大特征之一。大量组织已经在使用机器学习驱动的文书工作和电子邮件自动化。例如,在金融领域,需要执行大量重复、数据密集且可预测的任务。因此,该行业在很大程度上使用不同类型的机器学习解决方案。

7.2 改善客户体验

对于任何企业来说,推动参与度、提升品牌忠诚度和建立长期客户关系的最重要方法之一是提供定制体验和提供更好的服务。机器学习帮助我们实现这两个目标。你是否注意到,每当你打开任何购物网站或在互联网上看到任何广告时,它们大多是关于你最近搜索的内容?这是因为机器学习使我们能够制作出令人惊叹的精准推荐系统。它们帮助我们定制用户体验。现在谈到服务,现在大多数公司都有一个 24×7 全天候可用的聊天机器人。亚洲航空的 Eva 就是一个例子。这些机器人提供智能答案,有时你甚至可能没有注意到你正在与机器人交谈。这些机器人使用机器学习,这有助于它们提供良好的用户体验。

7.3 自动化数据可视化

过去,我们看到公司和个人生成了大量数据。以谷歌、Twitter、Facebook 等公司为例。他们每天生成多少数据?我们可以利用这些数据并可视化显著的关系,从而使企业能够做出更好的决策,这实际上可以使公司和客户都受益。借助 AutoViz 等用户友好的自动化数据可视化平台,企业可以获得大量新见解,从而提高其流程的生产力。

7.4 商业智能

机器学习特性与大数据分析相结合,可以帮助公司找到问题的解决方案,从而帮助企业发展并创造更多利润。从零售到金融服务再到医疗保健等,机器学习已经成为促进业务运营的最有效技术之一。

Python 提供了在面向对象编程或脚本之间进行选择的灵活性。也无需重新编译代码;开发人员可以实施任何更改并立即看到结果。您可以将 Python 与其他语言一起使用来实现所需的功能和结果。

Python 是一种多功能编程语言,可以在任何平台上运行,包括 Windows、MacOS、Linux、Unix 等。在从一个平台迁移到另一个平台时,代码需要进行一些细微的调整和更改,然后就可以在新平台上使用了。为了打下坚实的基础并涵盖基本概念,您可以参加Python 机器学习课程,这将有助于您推动职业生涯的发展。

以下是使用 Python 解决机器学习问题的好处总结:

机器学习教程

8. 机器学习的类型

机器学习大致分为三类

  1. 监督学习
  2. 无监督学习
  3. 强化学习

8.1 什么是监督学习?

让我们从一个简单的例子开始,假设你正在教一个孩子区分狗和猫。你会怎么做? 

你可能会向他/她展示一只狗并说“这是一只狗”,当你遇到一只猫时,你会指出它是一只猫。当你向孩子展示足够多的狗和猫时,他可能会学会区分它们。如果他训练得当,他可能能够识别他甚至没有见过的不同品种的狗。 

类似地,在监督学习中,我们有两组变量。一组称为目标变量或标签(我们想要预测的变量),另一组称为特征(帮助我们预测目标变量的变量)。我们向程序(模型)展示特征以及与这些特征相关的标签,然后程序就能在数据中找到潜在的模式。以这个数据集为例,我们想根据房屋的大小来预测房屋的价格。价格是目标变量,取决于房屋大小,也就是特征。

客房数量价格
1100美元
3300美元
5500美元

在真实的数据集中,我们将有更多的行和多个特征,如大小、位置、楼层数等等。

因此,我们可以说监督学习模型有一组输入变量(x)和一个输出变量(y)。算法确定输入和输出变量之间的映射函数。关系是 y = f(x)。

学习是受监控或监督的,因为我们已经知道输出,并且每次都会对算法进行修正以优化其结果。算法在数据集上进行训练并不断修正,直到达到可接受的性能水平。

我们可以将监督学习问题分为以下几类:

回归问题——用于预测未来价值,并使用历史数据训练模型。例如,预测房屋的未来价格。

分类问题——各种标签训练算法识别特定类别中的项目。例如,狗或猫(如上例所示)、苹果或橙子、啤酒或葡萄酒或水。

8.2 什么是无监督学习?

这种方法中,我们没有目标变量,只有输入变量(特征)。算法可以自行学习,并在数据中发现令人印象深刻的结构。 

目标是破译数据中的底层分布以获得有关数据的更多知识。 

我们可以将无监督学习问题分为以下几类:

聚类:这意味着将具有相同特征的输入变量捆绑在一起。例如,根据搜索历史对用户进行分组

关联:在这里,我们发现了控制数据集之间有意义关联的规则。例如,观看“X”的人也会观看“Y”。

8.3 什么是强化学习?

在这种方法中,机器学习模型经过训练,根据它们的行为所获得的奖励和反馈做出一系列决策。机器学习在复杂且不确定的情况下实现目标,并在学习期间每次实现目标时都会获得奖励。 

强化学习与监督学习的不同之处在于,强化学习没有可用的答案,因此强化代理决定执行任务的步骤。当没有训练数据集时,机器会根据自己的经验进行学习。

在本教程中,我们将主要关注监督学习和无监督学习,因为它们很容易理解和实现。

9. 机器学习算法

这可能是机器学习之旅中最耗时、最困难的过程。机器学习中有很多算法,你不需要全部了解就可以开始。但我建议,一旦你开始实践机器学习,就开始学习最流行的算法,例如:

在这里,我将简要介绍机器学习中最简单的算法之一,即K-最近邻算法(这是一种监督学习算法),并展示如何将其用于回归和分类。我强烈建议检查线性回归和逻辑回归,因为我们将实现它们并在实现部分将结果与 KNN(K-最近邻)算法进行比较。

你可能要注意到,回归问题和分类问题通常有单独的算法。但通过修改算法,我们可以将其用于分类和回归,如下所示

9.1 K最近邻算法

KNN 属于一组懒惰学习者。与逻辑回归、SVM、神经网络等积极学习者相反,懒惰学习者只是将训练数据存储在内存中。在训练阶段,KNN 会排列数据(一种索引过程),以便在推理阶段有效地找到最近的邻居。否则,它必须在推理过程中将每个新案例与整个数据集进行比较,这会使其效率低下。

因此,如果您想知道什么是训练阶段、热切学习者和懒惰学习者,现在只需记住训练阶段是算法从提供给它的数据中学习的时候。例如,如果您已经经历过上面链接的线性回归算法,在训练阶段,算法会尝试找到最佳拟合线,这是一个包含大量计算的过程,因此需要大量时间,这种类型的算法称为热切学习者。另一方面,懒惰学习者就像 KNN,它不涉及大量计算,因此训练速度更快。

9.2 分类问题的 K-NN

现在让我们看看如何使用 K-NN 进行分类。这里有一个假设的数据集,它试图根据身高和体重(特征)预测一个人是男性还是女性(标签)。

身高(cm) -特征重量(kg)-特征。性别(标签)
18780男性
16550女性
19999男性
14570女性
18087男性
17865女性
18760男性

现在让我们绘制这些点:

K-NN算法

现在我们有了一个新的点需要分类,假设它的身高是 190 厘米,体重是 100 公斤。以下是 K-NN 对此点进行分类的方式:

  1. 选择K的值,用户在分析数据后选择他认为最佳的值。
  2. 测量新点与其最近的 K 个点之间的距离。有多种方法可以计算此距离,其中最常见的方法是欧几里得距离、曼哈顿距离(用于连续数据点,即回归问题)和汉明距离(用于分类问题,即分类问题)。
  3. 确定更接近新点的点的类别,并相应地标记新点。因此,如果大多数接近新点的点属于某个“a”类,那么我们的新点就被预测为属于“a”类。

现在让我们将该算法应用到我们自己的数据集中。首先让我们绘制新的数据点。

K-NN算法

现在让我们取 k=3,即我们将看到距离新点最近的三个点:

K-NN算法

因此,它被归类为男性:

K-NN算法

现在让我们取 k=5 的值并看看会发生什么:

K-NN算法

我们可以看到,最接近新数据点的四个点是男性,只有一个点是女性,所以我们采用多数原则,再次将其归类为男性。进行分类时,必须始终将 K 的值选择为奇数。

9.3 回归问题的 K-NN

我们已经了解了如何使用 K-NN 进行分类。现在,让我们看看将其用于回归时需要做哪些更改。算法几乎相同,只有一个区别。在分类中,我们检查了所有最近点的大多数。在这里,我们将取所有最近点的平均值并将其作为预测值。让我们再次采用相同的例子,但在这里我们必须根据一个人的身高(特征)预测他的体重(标签)。

身高(cm) -特征重量(kg)-标签
18780
16550
19999
14570
18087
17865
18760

现在我们有了一个身高为160厘米的新数据点,我们将通过将K的值取为1、2和4来预测它的体重。

当 K=1 时:我们数据中距离 160cm 最近的点是 165cm,其权重为 50,因此我们得出结论,预测权重本身就是 50。

当 K=2 时:两个最近的点是 165 和 145,它们的权重分别等于 50 和 70。取平均值,我们说预测权重是 (50+70)/2=60。

当 K=4 时:重复相同的过程,现在我们取 4 个最接近的点,因此得到 70.6 作为预测体重。

你可能会认为这真的很简单,机器学习也没什么特别的,只是基础数学。但请记住,这是最简单的算法,一旦你继续前进,你会看到更复杂的算法。

在这个阶段,你一定对机器学习的工作原理有一个模糊的概念,如果你仍然感到困惑,请不要担心。此外,如果你现在想深入了解一下,这里有一篇很棒的文章——机器学习中的梯度下降,它讨论了我们如何使用一种称为梯度下降的优化技术来找到线性回归中的最佳拟合线。

9.4 如何选择机器学习算法?

机器学习算法有很多,决定为特定应用选择哪种算法可能是一项艰巨的任务。算法的选择取决于您要解决的问题的目标。

让我们举一个预测三种水果(即苹果、香蕉和橙子)类型的任务的例子。预测基于水果的颜色。图片展示了十种不同算法的结果。左上角的图片是数据集。数据分为三类:红色、浅蓝色和深蓝色。有一些分组。例如,从第二张图像来看,左上角的所有内容都属于红色类别,中间部分是混合的不确定性和浅蓝色,而底部对应于深色类别。其他图像展示了不同的算法以及它们如何尝试对数据进行分类。

10. 机器学习的步骤

我希望机器学习只是将算法应用于数据并获取预测值,但事实并非如此简单。机器学习中有几个步骤对于每个项目都是必需的。

  1. 收集数据:这可能是最重要和最耗时的过程。在此步骤中,我们需要收集可以帮助我们解决问题的数据。例如,如果您想预测房屋的价格,我们需要一个适当的数据集,其中包含有关过去房屋销售的所有信息,然后形成表格结构。我们将在实施部分解决类似的问题。
  2. 准备数据:一旦我们有了数据,我们就需要将其转换为适当的格式并进行预处理。预处理涉及多个步骤,例如数据清理,例如,如果您的数据集有一些空值或异常值(例如,字符串而不是数字),您将如何处理它?我们可以使用多种方法,但一种简单的方法是删除具有空值的行。有时在数据集中,我们可能会有一些对结果没有影响的列,例如 id,我们也会删除这些列。我们通常使用数据可视化通过图形和图表可视化我们的数据,在分析图形后,我们决定哪些特征是重要的。数据预处理是一个广泛的主题,我建议查看这篇文章以了解更多信息。
  3. 选择模型:现在我们的数据已准备好输入机器学习算法。如果你想知道什么是模型?“机器学习算法”通常与“机器学习模型”互换使用。模型是机器学习算法在数据上运行的输出。简单来说,当我们在所有数据上实现算法时,我们会得到一个输出,其中包含进行预测所需的所有规则、数字和任何其他特定于算法的数据结构。例如,在对我们的数据实现线性回归后,我们得到了最佳拟合线的方程,这个方程称为模型。下一步通常是训练模型,以防我们不想调整超参数并选择默认参数。
  4. 超参数调整:超参数至关重要,因为它们控制着机器学习模型的整体行为。最终目标是找到一个能给我们带来最佳结果的超参数最佳组合。但这些超参数是什么?记住我们的 K-NN 算法中的变量 K。当我们设置不同的 K 值时,我们会得到不同的结果。K 的最佳值不是预定义的,并且对于不同的数据集是不同的。没有方法可以知道 K 的最佳值,但你可以尝试不同的值并检查哪个值可以获得最佳结果。这里 K 是一个超参数,每个算法都有自己的超参数,我们需要调整它们的值以获得最佳结果。要获取有关它的更多信息,请查看本文 -超参数调整说明
  5. 评估:您可能想知道,如何知道模型的表现是好是坏。有什么比用一些数据测试模型更好的方法呢?这些数据称为测试数据,它不能是我们训练算法的数据(训练数据)的子集。训练模型的目的不是让它学习训练数据集中的所有值,而是识别数据中的潜在模式,并在此基础上对从未见过的数据进行预测。有各种评估方法,例如 K 折交叉验证等等。我们将在下一节中详细讨论这一步。
  6. 预测:现在我们的模型在测试集上也表现良好,我们可以在现实世界中使用它,并希望它能在现实世界的数据上表现良好。

机器学习教程

11. 机器学习模型的评估

为了评估模型,我们保留一部分数据(称为测试数据),但不使用这些数据来训练模型。之后,我们使用测试数据来评估各种指标。

预测模型的结果可以以多种形式查看,例如使用混淆矩阵、均方根误差(RMSE)、AUC-ROC等。

TP(真阳性)是算法预测为正值但数据集中实际为正值的值的数量。TN 表示预计不属于正类且实际上不属于正类的值的数量。FP 表示被错误分类为属于正类因此实际上属于负类的实例数量。FN 表示被分类为负类但应该属于正类的实例数量。 

现在在回归问题中,我们通常使用 RMSE 作为评估指标。在这种评估技术中,我们使用误差项。

假设你给模型输入一些输入 X,模型预测值为 10,但实际值为 5。你的预测值 (10) 与实际观察值 (5) 之间的差异就是误差项:(f_prediction – i_actual)。计算 RMSE 的公式如下:

机器学习教程

其中 N 是我们要计算 RMSE 的样本总数。

在一个好的模型中,RMSE 应该尽可能低,并且在训练数据上计算的 RMSE 和在测试集上计算的 RMSE 之间应该没有太大差异。 

12. Python 机器学习

虽然有很多语言可以用于机器学习,但在我看来,Python 无疑是机器学习应用程序的最佳编程语言。这是由于下面部分提到的各种好处。其他可用于机器学习应用程序的编程语言包括 R、C++、JavaScript、Java、C#、Julia、Shell、TypeScript 和 Scala。R 也是一种非常适合机器学习入门的语言。

与其他编程语言相比,Python 以其可读性和相对较低的复杂性而闻名。机器学习应用程序涉及微积分和线性代数等复杂概念,需要花费大量精力和时间来实现。Python 通过快速实施帮助机器学习工程师验证想法,从而减轻了这一负担。您可以查看Python 教程以对该语言有一个基本的了解。在机器学习中使用 Python 的另一个好处是预构建的库。不同类型的应用程序有不同的软件包,如下所述:

  1. 处理图像时使用 Numpy、OpenCV 和 Scikit
  2. 处理文本时,NLTK 再次与 Numpy 和 Scikit 一起使用
  3. Librosa 用于音频应用
  4. Matplotlib、Seaborn 和 Scikit 用于数据表示
  5. 用于深度学习应用的 TensorFlow 和 Pytorch
  6. Scipy 用于科学计算
  7. Django 用于集成 Web 应用程序
  8. Pandas 用于高级数据结构和分析

11. 使用 Python 实现机器学习中的算法

在继续使用Python 实现机器学习之前,您需要下载一些重要的软件和库。Anaconda 是一个开源发行版,它可以轻松地在一台机器上执行 Python/R 数据科学和机器学习。它包含了我们所需的几乎所有库。在本教程中,我们主要使用 scikit -learn库,这是一个用于 Python 编程语言的免费软件机器学习库。

现在,我们将运用迄今为止学到的所有知识。我们将使用上面提到的七个步骤解决回归问题,然后解决分类问题。

回归问题的实现

我们面临的问题是,根据房屋大小、房间数量等特征来预测房屋价格。那么让我们开始吧:

  1. 收集数据:我们不需要手动收集过去房屋销售的数据。幸运的是,有一些好心人为我们做这件事,并将这些数据集提供给我们使用。另外,我要说的是,并非所有数据集都是免费的,但为了便于练习,你会发现互联网上大多数数据集都是免费使用的。

我们使用的数据集称为波士顿住房数据集。数据库中的每条记录都描述了波士顿的一个郊区或城镇。数据取自 1970 年的波士顿标准大都市统计区 (SMSA)。属性定义如下(取自 UCI 机器学习存储库)。

  1. CRIM:城镇人均犯罪率
  2. ZN:面积超过 25,000 平方英尺的住宅用地比例。
  3. INDUS:每个城镇非零售商业用地面积比例
  4. CHAS:查尔斯河虚拟变量(如果区域与河流接壤则为 1;否则为 0)
  5. NOX:一氧化氮浓度(千万分之一)
  6. RM:每套住房的平均房间数
  7. AGE:1940 年之前建造的自住房屋比例
  8. DIS:到波士顿五大就业中心的加权距离
  9. RAD:径向公路可达性指数
  10. 税:每 10,000 美元全值房产税率
  11. PTRATIO: 各城镇师生比例 
  12. B:1000(Bk−0.63)2,其中Bk是城镇黑人的比例 
  13. LSTAT: 人口地位较低百分比
  14. MEDV:自住房屋的中位价值(以千美元计)

这是下载该数据集的链接。

现在打开文件后,您可以看到有关房屋销售的数据。此数据集不是适当的表格形式,实际上,没有列名,每个值都用空格分隔。我们将使用 Pandas 将其置于适当的表格形式。我们将为其提供一个包含列名的列表,并使用分隔符“s+”,这意味着在遇到一个或多个空格后,它可以区分每个条目。

我们将导入所有必要的库,例如 Pandas 和 NumPy。接下来,我们将把 CSV 格式的数据文件导入 pandas DataFrame。

  1. import numpy as np
  2. import pandas as pd
  3. column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX','PTRATIO', 'B', 'LSTAT', 'MEDV']
  4. bos1 = pd.read_csv('housing.csv', delimiter=r"s+", names=column_names)

2.预处理数据:下一步是预处理数据。现在对于这个数据集,我们可以看到没有 NaN(缺失)值,而且所有数据都是数字而不是字符串,因此在训练模型时我们不会遇到任何错误。因此,让我们将数据分为训练数据和测试数据,这样 70% 的数据是训练数据,其余的是测试数据。我们也可以缩放数据以使预测更加准确,但现在,让我们保持简单。

bos1.isna().sum()

  1. from sklearn.model_selection import train_test_split
  2. X=np.array(bos1.iloc[:,0:13])
  3. Y=np.array(bos1["MEDV"])
  4. #testing data size is of 30% of entire data
  5. x_train, x_test, y_train, y_test =train_test_split(X,Y, test_size = 0.30, random_state =5)

3.选择模型:对于这个特定问题,我们将使用两种可以解决回归问题的监督学习算法,然后比较它们的结果。一种算法是上面解释过的 K-NN(K 最近邻),另一种是线性回归。如果您还没有看过,我强烈建议您查看一下。

  1. from sklearn.linear_model import LinearRegression
  2. from sklearn.neighbors import KNeighborsRegressor
  3. #load our first model
  4. lr = LinearRegression()
  5. #train the model on training data
  6. lr.fit(x_train,y_train)
  7. #predict the testing data so that we can later evaluate the model
  8. pred_lr = lr.predict(x_test)
  9. #load the second model
  10. Nn=KNeighborsRegressor(3)
  11. Nn.fit(x_train,y_train)
  12. pred_Nn = Nn.predict(x_test)

4.超参数调整:由于这是一个初学者教程,因此在这里,我只会将 K-NN 模型中的值调整为 ok K。我将只使用 for 循环并检查 k 的结果,范围从 1 到 50。K-NN 在像我们这样的小数据集上非常快,因此不会花费任何时间。有更多更高级的方法可以做到这一点,您可以在上面的机器学习部分的步骤中找到链接。

  1. import sklearn
  2. for i in range(1,50):
  3. model=KNeighborsRegressor(i)
  4. model.fit(x_train,y_train)
  5. pred_y = model.predict(x_test)
  6. mse = sklearn.metrics.mean_squared_error(y_test, pred_y,squared=False)
  7. print("{} error for k = {}".format(mse,i))

输出:

从输出中我们可以看到,当 k=3 时,错误最小,所以这应该可以解释为什么我在训练模型时将值设置为 K=3

5.评估模型:为了评估模型,我们将使用 scikit-learn 库中的 mean_squared_error() 方法。请记住将参数“squared”设置为 False,以获取 RMSE 误差。

  1. #error for linear regression
  2. mse_lr= sklearn.metrics.mean_squared_error(y_test, pred_lr,squared=False)
  3. print("error for Linear Regression = {}".format(mse_lr))
  4. #error for linear regression
  5. mse_Nn= sklearn.metrics.mean_squared_error(y_test, pred_Nn,squared=False)
  6. print("error for K-NN = {}".format(mse_Nn))

现在从结果中,我们可以得出结论,对于这个特定的数据集,线性回归比 K-NN 表现更好。但线性回归并不一定总是比 K-NN 表现更好,因为它完全取决于我们正在处理的数据。

6.预测:现在我们可以使用模型来预测房价,就像我们上面所做的那样,使用预测函数。在预测价格时,请确保我们获得了训练模型时存在的所有特征。

以下是整个脚本:

  1. import numpy as np
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.linear_model import LinearRegression
  5. from sklearn.neighbors import KNeighborsRegressor
  6. column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
  7. bos1 = pd.read_csv('housing.csv', delimiter=r"s+", names=column_names)
  8. X=np.array(bos1.iloc[:,0:13])
  9. Y=np.array(bos1["MEDV"])
  10. #testing data size is of 30% of entire data
  11. x_train, x_test, y_train, y_test =train_test_split(X,Y, test_size = 0.30, random_state =54)
  12. #load our first model
  13. lr = LinearRegression()
  14. #train the model on training data
  15. lr.fit(x_train,y_train)
  16. #predict the testing data so that we can later evaluate the model
  17. pred_lr = lr.predict(x_test)
  18. #load the second model
  19. Nn=KNeighborsRegressor(12)
  20. Nn.fit(x_train,y_train)
  21. pred_Nn = Nn.predict(x_test)
  22. #error for linear regression
  23. mse_lr= sklearn.metrics.mean_squared_error(y_test, pred_lr,squared=False)
  24. print("error for Linear Regression = {}".format(mse_lr))
  25. #error for linear regression
  26. mse_Nn= sklearn.metrics.mean_squared_error(y_test, pred_Nn,squared=False)
  27. print("error for K-NN = {}".format(mse_Nn))

11.1 分类问题的实现

在本节中,我们将解决被称为鸢尾花分类问题的种群分类问题。鸢尾花数据集曾用于 RA Fisher 1936 年的经典论文《在分类问题中使用多重测量》,也可在 UCI 机器学习存储库中找到。

它包括三种鸢尾花,每种有 50 个样本,以及每种花的一些属性。一种花与另外两种花线性可分,但另外两种花彼此之间不能线性可分。此数据集中的列为:

鸢尾花种类

不同种类的鸢尾花

  • 萼片长厘米
  • 萼片宽
  • 花瓣长度厘米
  • 花瓣寬闊厘米
  • 物种

我们不需要下载这个数据集,因为 scikit-learn 库已经包含这个数据集,我们可以直接从那里导入它。所以让我们开始编写代码:

  1. from sklearn.datasets import load_iris
  2. iris = load_iris()
  3. X=iris.data
  4. Y=iris.target
  5. print(X)
  6. print(Y)

我们可以看到,这些特征位于一个包含四个项目的列表中,这些项目是特征,在底部,我们得到了一个包含已转换为数字的标签的列表,因为模型无法理解字符串名称,因此我们将每个名称编码为数字。scikit learn 开发人员已经完成了这项工作。

  1. from sklearn.model_selection import train_test_split
  2. #testing data size is of 30% of entire data
  3. x_train, x_test, y_train, y_test =train_test_split(X,Y, test_size = 0.3, random_state =5)
  4. from sklearn.linear_model import LogisticRegression
  5. from sklearn.neighbors import KNeighborsClassifier
  6. #fitting our model to train and test
  7. Nn = KNeighborsClassifier(8)
  8. Nn.fit(x_train,y_train)
  9. #the score() method calculates the accuracy of model.
  10. print("Accuracy for K-NN is ",Nn.score(x_test,y_test))
  11. Lr = LogisticRegression()
  12. Lr.fit(x_train,y_train)
  13. print("Accuracy for Logistic Regression is ",Lr.score(x_test,y_test))

12. 机器学习的优势

12.1 轻松识别趋势和模式

机器学习可以审查大量数据并发现人类无法察觉的特定趋势和模式。例如,对于亚马逊和 Flipkart 等电子商务网站,它可以了解用户的浏览行为和购买历史,以帮助提供适合他们的正确产品、交易和提醒。它使用结果向他们展示相关广告。

12.2 持续改进

我们不断生成新数据,当我们将这些数据提供给机器学习模型时,它可以帮助它随着时间的推移而升级,提高其性能和准确性。我们可以说,这就像积累经验一样,因为它们的准确性和效率不断提高。这让他们做出更好的决策。

12.3 处理多维、多种数据

机器学习算法擅长处理多维、多种类的数据,并且能够在动态或不确定的环境中做到这一点。

12.4 应用广泛

您可能是电子零售商或医疗保健提供商,让机器学习为您服务。在实际应用中,它能够帮助为客户提供更加个性化的体验,同时还能瞄准合适的客户。

13. 机器学习的缺点

13.1 数据采集

机器学习需要大量的数据集进行训练,这些数据集应该是包容性的/无偏见的,并且质量良好。有时我们必须等待新数据的生成。

13.2 时间和资源

机器学习需要足够的时间让算法学习和发展,以便以相当高的准确性和相关性实现其目的。它还需要大量资源才能发挥作用。这可能意味着您需要额外的计算机能力。

13.3 结果解释

另一个重大挑战是准确解释算法生成的结果的能力。您还必须仔细选择适合您目的的算法。有时,根据一些分析,您可能会选择一种算法,但该模型不一定最适合该问题。

13.4 易出错

机器学习是自主的,但极易出错。假设你用小到不具包容性的数据集来训练算法。你最终会得到来自有偏差的训练集的有偏差的预测。这会导致向客户展示不相关的广告。在机器学习的情况下,这样的失误可能会引发一系列错误,而这些错误可能在很长一段时间内都无法被发现。当它们被注意到时,需要相当长的时间才能识别出问题的根源,甚至需要更长的时间来纠正它。

14. 机器学习的未来

机器学习可以成为任何公司的竞争优势,无论是顶级跨国公司还是初创公司。因为目前手动完成的工作明天将由机器完成。随着自动驾驶汽车、索菲亚(由香港公司 Hanson Robotics 开发的人形机器人)等项目的推出,我们已经开始瞥见未来会是什么样子。机器学习革命将伴随我们很长时间,机器学习的未来也将如此。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/1018745
推荐阅读
相关标签
  

闽ICP备14008679号