improve zh-cn translation (#318)

* Update README.zh-cn.md

* Update README.zh-cn.md

* Update README.zh-cn.md

* upd

* remove :
pull/328/head
Flex Zhong 3 years ago committed by GitHub
parent 2f69359deb
commit 3996754751
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -8,20 +8,20 @@
### 介绍
欢迎来到这个经典机器学习的初学者课程无论你是这个主题的新手还是一个有经验的ML从业者我们都很高兴你能加入我们我们希望为你的ML研究创建一个好的开始并很乐意评估、回应和接受你的[反馈](https://github.com/microsoft/ML-For-Beginners/discussions)。
欢迎来到这个经典机器学习的初学者课程!无论你是这个主题的新手,还是一个有经验的 ML 从业者,我们都很高兴你能加入我们!我们希望为你的 ML 研究创建一个好的开始,并很乐意评估、回应和接受你的[反馈](https://github.com/microsoft/ML-For-Beginners/discussions)。
[![机器学习简介](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction to ML")
> 🎥 单击上图观看视频:麻省理工学院的 John Guttag 介绍机器学习
### 机器学习入门
在开始本课程之前你需要设置计算机能在本地运行Jupyter Notebooks。
在开始本课程之前,你需要设置计算机能在本地运行 Jupyter Notebooks。
- **按照这些视频里的讲解配置你的计算机**。了解有关如何在此[视频集](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6)中设置计算机的更多信息。
- **学习Python**. 还建议你对[Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-15963-cxa)我们在本课程中使用的一种对数据科学家有用的编程语言,有一个基本的了解
- **学习Node.js和JavaScript**。在本课程中我们在构建web应用程序时也使用过几次JavaScript因此你需要有[node](https://nodejs.org)和[npm](https://www.npmjs.com/) 以及[Visual Studio Code](https://code.visualstudio.com/)用于Python和JavaScript开发。
- **创建GitHub帐户**。既然你在[GitHub](https://github.com)上找到我们你可能已经有了一个帐户但如果没有请创建一个帐户然后fork此课程自己使用(也给我们一颗星星吧😊)
- **探索Scikit-learn**. 熟悉[Scikit-learn]([https://scikit-learn.org/stable/user_guide.html)我们在这些课程中引用的一组ML库。
- **学习 Python**。 还建议你对 [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-15963-cxa) 有一个基本的了解。这是我们在本课程中使用的一种对数据科学家有用的编程语言。
- **学习 Node.js 和 JavaScript**。在本课程中,我们在构建 web 应用程序时也使用过几次 JavaScript因此你需要有 [Node.js](https://nodejs.org) 和 [npm](https://www.npmjs.com/) 以及 [Visual Studio Code](https://code.visualstudio.com/) 用于 Python 和 JavaScript 开发。
- **创建 GitHub 帐户**。既然你在 [GitHub](https://github.com) 上找到我们,你可能已经有了一个帐户,但如果没有,请创建一个帐户,然后 fork 此课程自己使用(也给我们一颗星星吧😊)
- **探索 Scikit-learn**. 熟悉 [Scikit-learn]([https://scikit-learn.org/stable/user_guide.html),我们在这些课程中引用的一组 ML 库。
### 什么是机器学习?
@ -41,11 +41,11 @@
![人工智能、机器学习、深度学习、数据科学](../images/ai-ml-ds.png)
> 显示AI、ML、深度学习和数据科学之间关系的图表。图片作者[Jen Looper](https://twitter.com/jenlooper),灵感来自[这张图](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining)
> 显示 AI、ML、深度学习和数据科学之间关系的图表。图片作者 [Jen Looper](https://twitter.com/jenlooper),灵感来自[这张图](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining)
## 你将在本课程中学到什么
在本课程中,我们将仅涵盖初学者必须了解的机器学习的核心概念。 我们主要使用Scikit-learn来介绍我们所谓的“经典机器学习”这是一个许多学生用来学习基础知识的优秀库。要理解更广泛的人工智能或深度学习的概念机器学习的基础知识是必不可少的所以我们想在这里提供它。
在本课程中,我们将仅涵盖初学者必须了解的机器学习的核心概念。 我们主要使用 Scikit-learn 来介绍我们所谓的“经典机器学习”,这是一个许多学生用来学习基础知识的优秀库。要理解更广泛的人工智能或深度学习的概念,机器学习的基础知识是必不可少的,所以我们想在这里提供它。
在本课程中,你将学习:
@ -94,13 +94,13 @@
---
## 🚀 挑战
在纸上或使用[Excalidraw](https://excalidraw.com/)等在线应用程序绘制草图了解你对AI、ML、深度学习和数据科学之间差异的理解。添加一些关于这些技术擅长解决的问题的想法。
在纸上或使用 [Excalidraw](https://excalidraw.com/) 等在线应用程序绘制草图,了解你对 AI、ML、深度学习和数据科学之间差异的理解。添加一些关于这些技术擅长解决的问题的想法。
## [阅读后测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/2/)
## 复习与自学
要了解有关如何在云中使用ML算法的更多信息请遵循以下[学习路径](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-15963-cxa)。
要了解有关如何在云中使用 ML 算法的更多信息,请遵循以下[学习路径](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-15963-cxa)。
## 任务

@ -1,100 +1,100 @@
# 机器学习的历史
![机器学习历史概述](../../../sketchnotes/ml-history.png)
> 作者[Tomomi Imura](https://www.twitter.com/girlie_mac)
> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [课前测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/3/)
在本课中,我们将走过机器学习和人工智能历史上的主要里程碑。
人工智能AI作为一个领域的历史与机器学习的历史交织在一起因为支持机器学习的算法和计算能力的进步推动了AI的发展。记住虽然这些领域作为不同研究领域在20世纪50年代才开始具体化但重要的[算法、统计、数学、计算和技术发现](https://wikipedia.org/wiki/Timeline_of_machine_learning) 要早于和重叠了这个时代。 事实上,[数百年来](https://wikipedia.org/wiki/History_of_artificial_intelligence)人们一直在思考这些问题:本文讨论了“思维机器”这一概念的历史知识基础。
人工智能AI作为一个领域的历史与机器学习的历史交织在一起因为支持机器学习的算法和计算能力的进步推动了AI的发展。记住虽然这些领域作为不同研究领域在 20 世纪 50 年代才开始具体化,但重要的[算法、统计、数学、计算和技术发现](https://wikipedia.org/wiki/Timeline_of_machine_learning) 要早于和重叠了这个时代。 事实上,[数百年来](https://wikipedia.org/wiki/History_of_artificial_intelligence)人们一直在思考这些问题:本文讨论了“思维机器”这一概念的历史知识基础。
## 主要发现
- 1763, 1812 [贝叶斯定理](https://wikipedia.org/wiki/Bayes%27_theorem) 及其前身。该定理及其应用是推理的基础,描述了基于先验知识的事件发生的概率。
- 1805 [最小二乘理论](https://wikipedia.org/wiki/Least_squares)由法国数学家Adrien-Marie Legendre提出。 你将在我们的回归单元中了解这一理论,它有助于数据拟合。
- 1913 [马尔可夫链](https://wikipedia.org/wiki/Markov_chain)以俄罗斯数学家Andrey Markov的名字命名用于描述基于先前状态的一系列可能事件。
- 1957 [感知器](https://wikipedia.org/wiki/Perceptron)是美国心理学家Frank Rosenblatt发明的一种线性分类器是深度学习发展的基础。
- 1967 [最近邻](https://wikipedia.org/wiki/Nearest_neighbor)是一种最初设计用于映射路线的算法。 在ML中它用于检测模式。
- 1805 [最小二乘理论](https://wikipedia.org/wiki/Least_squares)由法国数学家 Adrien-Marie Legendre 提出。 你将在我们的回归单元中了解这一理论,它有助于数据拟合。
- 1913 [马尔可夫链](https://wikipedia.org/wiki/Markov_chain)以俄罗斯数学家 Andrey Markov 的名字命名,用于描述基于先前状态的一系列可能事件。
- 1957 [感知器](https://wikipedia.org/wiki/Perceptron)是美国心理学家 Frank Rosenblatt 发明的一种线性分类器,是深度学习发展的基础。
- 1967 [最近邻](https://wikipedia.org/wiki/Nearest_neighbor)是一种最初设计用于映射路线的算法。 在 ML 中,它用于检测模式。
- 1970 [反向传播](https://wikipedia.org/wiki/Backpropagation)用于训练[前馈神经网络](https://wikipedia.org/wiki/Feedforward_neural_network)。
- 1982 [循环神经网络](https://wikipedia.org/wiki/Recurrent_neural_network) 是源自产生时间图的前馈神经网络的人工神经网络。
✅ 做点调查。在ML和AI的历史上还有哪些日期是重要的
✅ 做点调查。在 ML AI 的历史上,还有哪些日期是重要的?
## 1950: 会思考的机器
Alan Turing一个真正杰出的人[在2019年被公众投票选出](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 作为20世纪最伟大的科学家他认为有助于为“会思考的机器”的概念打下基础。他通过创建 [图灵测试](https://www.bbc.com/news/technology-18475646)来解决反对者和他自己对这一概念的经验证据的需求,你将在我们的 NLP 课程中进行探索。
Alan Turing一个真正杰出的人[在 2019 年被公众投票选出](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 作为 20 世纪最伟大的科学家,他认为有助于为“会思考的机器”的概念打下基础。他通过创建 [图灵测试](https://www.bbc.com/news/technology-18475646)来解决反对者和他自己对这一概念的经验证据的需求,你将在我们的 NLP 课程中进行探索。
## 1956: 达特茅斯夏季研究项目
“达特茅斯夏季人工智能研究项目是人工智能领域的一个开创性事件,”正是在这里,人们创造了“人工智能”一词([来源](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth))
“达特茅斯夏季人工智能研究项目是人工智能领域的一个开创性事件,”正是在这里,人们创造了“人工智能”一词([来源](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)
> 原则上,学习的每个方面或智能的任何其他特征都可以被精确地描述,以至于可以用机器来模拟它。
首席研究员、数学教授John McCarthy希望“基于这样一种猜想即学习的每个方面或智能的任何其他特征原则上都可以如此精确地描述以至于可以制造出一台机器来模拟它。” 参与者包括该领域的另一位杰出人物Marvin Minsky。
首席研究员、数学教授 John McCarthy 希望“基于这样一种猜想,即学习的每个方面或智能的任何其他特征原则上都可以如此精确地描述,以至于可以制造出一台机器来模拟它。” 参与者包括该领域的另一位杰出人物 Marvin Minsky。
研讨会被认为发起并鼓励了一些讨论,包括“符号方法的兴起、专注于有限领域的系统(早期专家系统),以及演绎系统与归纳系统的对比。”([来源](https://wikipedia.org/wiki/Dartmouth_workshop))
研讨会被认为发起并鼓励了一些讨论,包括“符号方法的兴起、专注于有限领域的系统(早期专家系统),以及演绎系统与归纳系统的对比。”[来源](https://wikipedia.org/wiki/Dartmouth_workshop)
## 1956 - 1974: “黄金岁月”
从20世纪50年代到70年代中期乐观情绪高涨希望人工智能能够解决许多问题。1967Marvin Minsky自信地说“一代人之内。。。创造人工智能的问题将得到实质性的解决。”MinskyMarvin1967《计算有限和无限机器》新泽西州恩格伍德克利夫斯Prentice Hall
20 世纪 50 年代到 70 年代中期乐观情绪高涨希望人工智能能够解决许多问题。1967Marvin Minsky 自信地说,“一代人之内...创造人工智能的问题将得到实质性的解决。”MinskyMarvin1967《计算有限和无限机器》新泽西州恩格伍德克利夫斯Prentice Hall
自然语言处理研究蓬勃发展,搜索被提炼并变得更加强大,创造了“微观世界”的概念,在这个概念中,简单的任务是用简单的语言指令完成的。
这项研究得到了政府机构的充分资助,在计算和算法方面取得了进展,并建造了智能机器的原型。其中一些机器包括:
* [机器人Shakey](https://wikipedia.org/wiki/Shakey_the_robot),他们可以“聪明地”操纵和决定如何执行任务。
* [机器人 Shakey](https://wikipedia.org/wiki/Shakey_the_robot),他们可以“聪明地”操纵和决定如何执行任务。
![Shakey, 智能机器人](../images/shakey.jpg)
> 1972 年的Shakey
> 1972 年的 Shakey
* Eliza一个早期的“聊天机器人”可以与人交谈并充当原始的“治疗师”。 你将在NLP课程中了解有关Eliza的更多信息。
* Eliza一个早期的“聊天机器人”可以与人交谈并充当原始的“治疗师”。 你将在 NLP 课程中了解有关 Eliza 的更多信息。
![Eliza, 机器人](../images/eliza.png)
> Eliza的一个版本一个聊天机器人
> Eliza 的一个版本,一个聊天机器人
* “积木世界”是一个微观世界的例子,在那里积木可以堆叠和分类,并且可以测试教机器做出决策的实验。 使用[SHRDLU](https://wikipedia.org/wiki/SHRDLU)等库构建的高级功能有助于推动语言处理向前发展。
* “积木世界”是一个微观世界的例子,在那里积木可以堆叠和分类,并且可以测试教机器做出决策的实验。 使用 [SHRDLU](https://wikipedia.org/wiki/SHRDLU) 等库构建的高级功能有助于推动语言处理向前发展。
[![积木世界与SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "积木世界与SHRDLU")
[![积木世界与 SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "积木世界与SHRDLU")
> 🎥 点击上图观看视频: 积木世界与SHRDLU
> 🎥 点击上图观看视频: 积木世界与 SHRDLU
## 1974 - 1980: AI的寒冬
## 1974 - 1980: AI 的寒冬
到了20世纪70年代中期很明显制造“智能机器”的复杂性被低估了而且考虑到可用的计算能力它的前景被夸大了。资金枯竭市场信心放缓。影响信心的一些问题包括
到了 20 世纪 70 年代中期,很明显制造“智能机器”的复杂性被低估了,而且考虑到可用的计算能力,它的前景被夸大了。资金枯竭,市场信心放缓。影响信心的一些问题包括:
- **限制**。计算能力太有限了
- **组合爆炸**。随着对计算机的要求越来越高,需要训练的参数数量呈指数级增长,而计算能力却没有平行发展。
- **缺乏数据**。 缺乏数据阻碍了测试、开发和改进算法的过程。
- **我们是否在问正确的问题?**。 被问到的问题也开始受到质疑。 研究人员开始对他们的方法提出批评:
- 图灵测试受到质疑的方法之一是“中国房间理论”,该理论认为,“对数字计算机进行编程可能使其看起来能理解语言,但不能产生真正的理解。” ([来源](https://plato.stanford.edu/entries/chinese-room/))
- 将“治疗师”ELIZA这样的人工智能引入社会的伦理受到了挑战。
- 将“治疗师”ELIZA 这样的人工智能引入社会的伦理受到了挑战。
与此同时,各种人工智能学派开始形成。 在[“scruffy”与“neat AI”](https://wikipedia.org/wiki/Neats_and_scruffies)之间建立了二分法。 _Scruffy_ 实验室对程序进行了数小时的调整,直到获得所需的结果。 _Neat_ 实验室“专注于逻辑和形式问题的解决”。 ELIZA 和 SHRDLU 是众所周知的 _scruffy_ 系统。 在 1980 年代,随着使 ML 系统可重现的需求出现_neat_ 方法逐渐走上前沿,因为其结果更易于解释。
与此同时,各种人工智能学派开始形成。 在 [“scruffy” “neat AI”](https://wikipedia.org/wiki/Neats_and_scruffies) 之间建立了二分法。 _Scruffy_ 实验室对程序进行了数小时的调整,直到获得所需的结果。 _Neat_ 实验室“专注于逻辑和形式问题的解决”。 ELIZA 和 SHRDLU 是众所周知的 _scruffy_ 系统。 在 1980 年代,随着使 ML 系统可重现的需求出现_neat_ 方法逐渐走上前沿,因为其结果更易于解释。
## 1980s 专家系统
随着这个领域的发展它对商业的好处变得越来越明显在20世纪80年代专家系统的泛滥也是如此。“专家系统是首批真正成功的人工智能 (AI) 软件形式之一。” ([来源](https://wikipedia.org/wiki/Expert_system))
随着这个领域的发展,它对商业的好处变得越来越明显,在 20 世纪 80 年代,‘专家系统’的泛滥也是如此。“专家系统是首批真正成功的人工智能 (AI) 软件形式之一。” [来源](https://wikipedia.org/wiki/Expert_system)
这种类型的系统实际上是混合系统,部分由定义业务需求的规则引擎和利用规则系统推断新事实的推理引擎组成。
在这个时代,神经网络也越来越受到重视。
## 1987 - 1993: AI的冷静期
## 1987 - 1993: AI 的冷静期
专业的专家系统硬件的激增造成了过于专业化的不幸后果。个人电脑的兴起也与这些大型、专业化、集中化系统展开了竞争。计算机的平民化已经开始,它最终为大数据的现代爆炸铺平了道路。
## 1993 - 2011
这个时代见证了一个新的时代ML和AI能够解决早期由于缺乏数据和计算能力而导致的一些问题。数据量开始迅速增加变得越来越广泛无论好坏尤其是2007年左右智能手机的出现计算能力呈指数级增长算法也随之发展。这个领域开始变得成熟因为过去那些随心所欲的日子开始具体化为一种真正的纪律。
这个时代见证了一个新的时代ML AI 能够解决早期由于缺乏数据和计算能力而导致的一些问题。数据量开始迅速增加,变得越来越广泛,无论好坏,尤其是 2007 年左右智能手机的出现,计算能力呈指数级增长,算法也随之发展。这个领域开始变得成熟,因为过去那些随心所欲的日子开始具体化为一种真正的纪律。
## 现在
今天机器学习和人工智能几乎触及我们生活的每一个部分。这个时代要求仔细了解这些算法对人类生活的风险和潜在影响。正如微软的Brad Smith所言“信息技术引发的问题触及隐私和言论自由等基本人权保护的核心。这些问题加重了制造这些产品的科技公司的责任。在我们看来它们还呼吁政府进行深思熟虑的监管并围绕可接受的用途制定规范”([来源](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/))
今天,机器学习和人工智能几乎触及我们生活的每一个部分。这个时代要求仔细了解这些算法对人类生活的风险和潜在影响。正如微软的 Brad Smith 所言,“信息技术引发的问题触及隐私和言论自由等基本人权保护的核心。这些问题加重了制造这些产品的科技公司的责任。在我们看来,它们还呼吁政府进行深思熟虑的监管,并围绕可接受的用途制定规范”[来源](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)
未来的情况还有待观察,但了解这些计算机系统以及它们运行的软件和算法是很重要的。我们希望这门课程能帮助你更好的理解,以便你自己决定。
[![深度学习的历史](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "深度学习的历史")
> 🎥 点击上图观看视频Yann LeCun在本次讲座中讨论深度学习的历史
> 🎥 点击上图观看视频Yann LeCun 在本次讲座中讨论深度学习的历史
---
## 🚀挑战
@ -107,7 +107,7 @@ Alan Turing一个真正杰出的人[在2019年被公众投票选出](https
以下是要观看和收听的节目:
[这是Amy Boyd讨论人工智能进化的播客](http://runasradio.com/Shows/Show/739)
[这是 Amy Boyd 讨论人工智能进化的播客](http://runasradio.com/Shows/Show/739)
[![Amy Boyd的《人工智能史》](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy Boyd的《人工智能史》")

@ -1,7 +1,7 @@
# 机器学习中的公平性
![机器学习中的公平性概述](../../../sketchnotes/ml-fairness.png)
> 作者[Tomomi Imura](https://www.twitter.com/girlie_mac)
> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [课前测验](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/)
@ -76,14 +76,14 @@
一种图像标记技术,臭名昭著地将深色皮肤的人的图像错误地标记为大猩猩。错误的标签是有害的,不仅仅是因为这个系统犯了一个错误,而且它还特别使用了一个长期以来被故意用来诋毁黑人的标签。
[![AI: 我不是女人吗?](https://img.youtube.com/vi/QxuyfWoVV98/0.jpg)](https://www.youtube.com/watch?v=QxuyfWoVV98 "AI, 我不是女人吗?")
> 🎥 点击上图观看视频AI我不是女人吗 - 一场展示AI种族主义诋毁造成的伤害的表演
> 🎥 点击上图观看视频AI我不是女人吗 - 一场展示 AI 种族主义诋毁造成的伤害的表演
### 代表性过高或过低
有倾向性的图像搜索结果就是一个很好的例子。在搜索男性比例等于或高于女性的职业的图片时,比如工程或首席执行官,要注意那些更倾向于特定性别的结果。
![必应CEO搜索](../images/ceos.png)
> 在Bing上搜索“CEO”会得到非常全面的结果
> 在 Bing 上搜索“CEO”会得到非常全面的结果
这五种主要类型的危害不是相互排斥的,一个单一的系统可以表现出一种以上的危害。此外,每个案例的严重程度各不相同。例如,不公平地给某人贴上罪犯的标签比给形象贴上错误的标签要严重得多。然而,重要的是要记住,即使是相对不严重的伤害也会让人感到疏远或被孤立,累积的影响可能会非常压抑。
@ -98,7 +98,7 @@
## 检测不公平
给定系统行为不公平的原因有很多。例如社会偏见可能会反映在用于训练它们的数据集中。例如过度依赖历史数据可能会加剧招聘不公平。通过使用过去10年提交给公司的简历中的模式该模型确定男性更合格因为大多数简历来自男性这反映了过去男性在整个科技行业的主导地位。
给定系统行为不公平的原因有很多。例如,社会偏见可能会反映在用于训练它们的数据集中。例如,过度依赖历史数据可能会加剧招聘不公平。通过使用过去 10 年提交给公司的简历中的模式,该模型确定男性更合格,因为大多数简历来自男性,这反映了过去男性在整个科技行业的主导地位。
关于特定人群的数据不足可能是不公平的原因。例如,图像分类器对于深肤色人的图像具有较高的错误率,因为数据中没有充分代表较深的肤色。
@ -124,9 +124,9 @@
与贷款相关的危害和好处是什么?想想假阴性和假阳性的情况:
**假阴性**拒绝但Y=1-在这种情况下,将拒绝有能力偿还贷款的申请人。这是一个不利的事件,因为贷款的资源是从合格的申请人扣留。
**假阴性**(拒绝,但 Y=1-在这种情况下,将拒绝有能力偿还贷款的申请人。这是一个不利的事件,因为贷款的资源是从合格的申请人扣留。
**假阳性**接受但Y=0-在这种情况下,申请人确实获得了贷款,但最终违约。因此,申请人的案件将被送往一个债务催收机构,这可能会影响他们未来的贷款申请。
**假阳性**(接受,但 Y=0-在这种情况下,申请人确实获得了贷款,但最终违约。因此,申请人的案件将被送往一个债务催收机构,这可能会影响他们未来的贷款申请。
### 确定受影响的群体
@ -147,7 +147,7 @@
这个表格告诉我们几件事。首先,我们注意到数据中的未列出性别的人相对较少。数据是有偏差的,所以你需要小心解释这些数字。
在本例中我们有3个组和2个度量。当我们考虑我们的系统如何影响贷款申请人的客户群时这可能就足够了但是当你想要定义更多的组时你可能需要将其提取到更小的摘要集。为此你可以添加更多的度量例如每个假阴性和假阳性的最大差异或最小比率。
在本例中,我们有 3 个组和 2 个度量。当我们考虑我们的系统如何影响贷款申请人的客户群时,这可能就足够了,但是当你想要定义更多的组时,你可能需要将其提取到更小的摘要集。为此,你可以添加更多的度量,例如每个假阴性和假阳性的最大差异或最小比率。
✅ 停下来想一想:还有哪些群体可能会受到贷款申请的影响?
@ -159,19 +159,19 @@
### Fairlearn
[Fairlearn](https://fairlearn.github.io/) 是一个开源Python包可让你评估系统的公平性并减轻不公平性。
[Fairlearn](https://fairlearn.github.io/) 是一个开源 Python 包,可让你评估系统的公平性并减轻不公平性。
该工具可帮助你评估模型的预测如何影响不同的组,使你能够通过使用公平性和性能指标来比较多个模型,并提供一组算法来减轻二元分类和回归中的不公平性。
- 通过查看Fairlearn的[GitHub](https://github.com/fairlearn/fairlearn/)了解如何使用不同的组件
- 通过查看 Fairlearn [GitHub](https://github.com/fairlearn/fairlearn/) 了解如何使用不同的组件
- 浏览[用户指南](https://fairlearn.github.io/main/user_guide/index.html), [示例](https://fairlearn.github.io/main/auto_examples/index.html)
- 尝试一些 [示例Notebook](https://github.com/fairlearn/fairlearn/tree/master/notebooks).
- 尝试一些 [示例 Notebook](https://github.com/fairlearn/fairlearn/tree/master/notebooks).
- 了解Azure机器学习中机器学习模型[如何启用公平性评估](https://docs.microsoft.com/azure/machine-learning/how-to-machine-learning-fairness-aml?WT.mc_id=academic-15963-cxa)。
- 看看这些[示例Notebook](https://github.com/Azure/MachineLearningNotebooks/tree/master/contrib/fairness)了解Azure机器学习中的更多公平性评估场景。
- 看看这些[示例 Notebook](https://github.com/Azure/MachineLearningNotebooks/tree/master/contrib/fairness)了解 Azure 机器学习中的更多公平性评估场景。
---
## 🚀 挑战
@ -193,22 +193,22 @@
观看本次研讨会,深入探讨以下主题:
- YouTube:人工智能系统中与公平相关的危害示例、评估和缓解Hanna Wallach和Miro Dudik[人工智能系统中与公平相关的危害:示例、评估和缓解-YouTube](https://www.youtube.com/watch?v=1RptHwfkx_k)
- YouTube:人工智能系统中与公平相关的危害:示例、评估和缓解 Hanna Wallach Miro Dudik[人工智能系统中与公平相关的危害:示例、评估和缓解-YouTube](https://www.youtube.com/watch?v=1RptHwfkx_k)
另外,请阅读:
- 微软RAI资源中心[负责人工智能资源-微软人工智能](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
- 微软FATE研究小组[FATEAI 中的公平、问责、透明和道德-微软研究院](https://www.microsoft.com/research/theme/fate/)
- 微软 FATE 研究小组:[FATEAI 中的公平、问责、透明和道德-微软研究院](https://www.microsoft.com/research/theme/fate/)
探索Fairlearn工具箱
探索 Fairlearn 工具箱
[Fairlearn](https://fairlearn.org/)
了解Azure机器学习的工具以确保公平性
了解 Azure 机器学习的工具以确保公平性
- [Azure机器学习](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-15963-cxa)
- [Azure 机器学习](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-15963-cxa)
## 任务
[探索Fairlearn](assignment.zh-cn.md)
[探索 Fairlearn](assignment.zh-cn.md)

@ -83,7 +83,7 @@
🎓 **欠拟合**和**过拟合**是降低模型质量的常见问题,因为模型拟合得不够好或太好。这会导致模型做出与其训练数据过于紧密对齐或过于松散对齐的预测。 过拟合模型对训练数据的预测太好,因为它已经很好地了解了数据的细节和噪声。欠拟合模型并不准确,因为它既不能准确分析其训练数据,也不能准确分析尚未“看到”的数据。
![过拟合模型 ](../images/overfitting.png)
> 作者[Jen Looper](https://twitter.com/jenlooper)
> 作者 [Jen Looper](https://twitter.com/jenlooper)
## 参数调优

@ -1,6 +1,6 @@
# 机器学习入门
课程的本章节将为您介绍机器学习领域背后的基本概念、什么是机器学习,并学习它的历史以及曾为此做出贡献的技术研究者。让我们一起开始探索机器学习的全新世界吧!
课程的本章节将为您介绍机器学习领域背后的基本概念、什么是机器学习,并学习它的历史以及曾为此做出贡献的技术研究者。让我们一起开始探索机器学习的全新世界吧!
![globe](../images/globe.jpg)
> 图片由 <a href="https://unsplash.com/@bill_oxford?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Bill Oxford</a>提供,来自 <a href="https://unsplash.com/s/photos/globe?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>

@ -1,8 +1,8 @@
# 开始使用Python和Scikit学习回归模型
# 开始使用 Python Scikit 学习回归模型
![回归](../../../sketchnotes/ml-regression.png)
> 作者[Tomomi Imura](https://www.twitter.com/girlie_mac)
> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac)
## [课前测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/9/)
## 介绍
@ -12,45 +12,45 @@
在本课中,你将学习如何:
- 为本地机器学习任务配置你的计算机。
- 使用Jupyter notebooks。
- 使用Scikit-learn包括安装。
- 使用 Jupyter notebooks。
- 使用 Scikit-learn包括安装。
- 通过动手练习探索线性回归。
## 安装和配置
[![在 Visual Studio Code中使用 Python](https://img.youtube.com/vi/7EXd4_ttIuw/0.jpg)](https://youtu.be/7EXd4_ttIuw "在 Visual Studio Code中使用 Python")
[![在 Visual Studio Code 中使用 Python](https://img.youtube.com/vi/7EXd4_ttIuw/0.jpg)](https://youtu.be/7EXd4_ttIuw "在 Visual Studio Code 中使用 Python")
> 🎥 单击上图观看视频在VS Code中使用Python。
> 🎥 单击上图观看视频:在 VS Code 中使用 Python。
1. **安装 Python**。确保你的计算机上安装了[Python](https://www.python.org/downloads/)。你将在许多数据科学和机器学习任务中使用 Python。大多数计算机系统已经安装了Python。也有一些有用的[Python编码包](https://code.visualstudio.com/learn/educations/installers?WT.mc_id=academic-15963-cxa)可用于简化某些用户的设置。
1. **安装 Python**。确保你的计算机上安装了 [Python](https://www.python.org/downloads/)。你将在许多数据科学和机器学习任务中使用 Python。大多数计算机系统已经安装了 Python。也有一些有用的 [Python 编码包](https://code.visualstudio.com/learn/educations/installers?WT.mc_id=academic-15963-cxa) 可用于简化某些用户的设置。
然而Python的某些用法需要一个版本的软件而其他用法则需要另一个不同的版本。 因此,在[虚拟环境](https://docs.python.org/3/library/venv.html)中工作很有用。
然而Python 的某些用法需要一个版本的软件,而其他用法则需要另一个不同的版本。 因此,在 [虚拟环境](https://docs.python.org/3/library/venv.html) 中工作很有用。
2. **安装 Visual Studio Code**。确保你的计算机上安装了Visual Studio Code。按照这些说明[安装 Visual Studio Code](https://code.visualstudio.com/)进行基本安装。在本课程中你将在Visual Studio Code中使用Python因此你可能想复习如何[配置 Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-15963-cxa)用于Python开发。
2. **安装 Visual Studio Code**。确保你的计算机上安装了 Visual Studio Code。按照这些说明 [安装 Visual Studio Code](https://code.visualstudio.com/) 进行基本安装。在本课程中,你将在 Visual Studio Code 中使用 Python因此你可能想复习如何 [配置 Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-15963-cxa) 用于 Python 开发。
> 通过学习这一系列的 [学习模块](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-15963-cxa)熟悉Python
> 通过学习这一系列的 [学习模块](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-15963-cxa) 熟悉 Python
3. **按照[这些说明]安装Scikit learn**(https://scikit-learn.org/stable/install.html )。由于你需要确保使用Python3因此建议你使用虚拟环境。注意如果你是在M1 Mac上安装这个库在上面链接的页面上有特别的说明。
3. **按照 [这些说明] 安装 Scikit learn**(https://scikit-learn.org/stable/install.html)。由于你需要确保使用 Python3因此建议你使用虚拟环境。注意如果你是在 M1 Mac 上安装这个库,在上面链接的页面上有特别的说明。
4. **安装Jupyter Notebook**。你需要[安装Jupyter包](https://pypi.org/project/jupyter/)。
4. **安装 Jupyter Notebook**。你需要 [安装 Jupyter ](https://pypi.org/project/jupyter/)。
## 你的ML工作环境
## 你的 ML 工作环境
你将使用**notebooks**开发Python代码并创建机器学习模型。这种类型的文件是数据科学家的常用工具可以通过后缀或扩展名`.ipynb`来识别它们。
你将使用 **notebooks** 开发 Python 代码并创建机器学习模型。这种类型的文件是数据科学家的常用工具,可以通过后缀或扩展名 `.ipynb` 来识别它们。
Notebooks是一个交互式环境允许开发人员编写代码并添加注释并围绕代码编写文档这对于实验或面向研究的项目非常有帮助。
Notebooks 是一个交互式环境,允许开发人员编写代码并添加注释并围绕代码编写文档,这对于实验或面向研究的项目非常有帮助。
### 练习 - 使用notebook
### 练习 - 使用 notebook
1. 在Visual Studio Code中打开_notebook.ipynb_。
1. 在 Visual Studio Code 中打开 _notebook.ipynb_
Jupyter服务器将以python3+启动。你会发现notebook可以“运行”的区域、代码块。你可以通过选择看起来像播放按钮的图标来运行代码块。
Jupyter 服务器将以 python3+启动。你会发现 notebook 可以“运行”的区域、代码块。你可以通过选择看起来像播放按钮的图标来运行代码块。
2. 选择`md`图标并添加一点markdown输入文字 **# Welcome to your notebook**。
2. 选择 `md` 图标并添加一点 markdown输入文字 **# Welcome to your notebook**。
接下来添加一些Python代码。
接下来,添加一些 Python 代码。
1. 在代码块中输入**print("hello notebook")**。
1. 在代码块中输入 **print("hello notebook")**
2. 选择箭头运行代码。
@ -60,43 +60,43 @@ Notebooks是一个交互式环境允许开发人员编写代码并添加注
hello notebook
```
![打开notebook的VS Code](../images/notebook.png)
![打开 notebook VS Code](../images/notebook.png)
你可以为你的代码添加注释以便notebook可以自描述。
你可以为你的代码添加注释,以便 notebook 可以自描述。
✅ 想一想web开发人员的工作环境与数据科学家的工作环境有多大的不同。
✅ 想一想 web 开发人员的工作环境与数据科学家的工作环境有多大的不同。
## 启动并运行Scikit-learn
## 启动并运行 Scikit-learn
现在Python已在你的本地环境中设置好并且你对Jupyter notebook感到满意让我们同样熟悉Scikit-learn在“science”中发音为“sci”。 Scikit-learn提供了[大量的API](https://scikit-learn.org/stable/modules/classes.html#api-ref)来帮助你执行ML任务。
现在 Python 已在你的本地环境中设置好,并且你对 Jupyter notebook 感到满意,让我们同样熟悉 Scikit-learn在“science”中发音为“sci”。 Scikit-learn 提供了 [大量的 API](https://scikit-learn.org/stable/modules/classes.html#api-ref) 来帮助你执行 ML 任务。
根据他们的[网站](https://scikit-learn.org/stable/getting_started.html)“Scikit-learn是一个开源机器学习库支持有监督和无监督学习。它还提供了各种模型拟合工具、数据预处理、模型选择和评估以及许多其他实用程序。”
根据他们的 [网站](https://scikit-learn.org/stable/getting_started.html)“Scikit-learn 是一个开源机器学习库,支持有监督和无监督学习。它还提供了各种模型拟合工具、数据预处理、模型选择和评估以及许多其他实用程序。”
在本课程中你将使用Scikit-learn和其他工具来构建机器学习模型以执行我们所谓的“传统机器学习”任务。我们特意避免了神经网络和深度学习因为它们在我们即将推出的“面向初学者的人工智能”课程中得到了更好的介绍。
在本课程中,你将使用 Scikit-learn 和其他工具来构建机器学习模型,以执行我们所谓的“传统机器学习”任务。我们特意避免了神经网络和深度学习,因为它们在我们即将推出的“面向初学者的人工智能”课程中得到了更好的介绍。
Scikit-learn使构建模型和评估它们的使用变得简单。它主要侧重于使用数字数据并包含几个现成的数据集用作学习工具。它还包括供学生尝试的预建模型。让我们探索加载预先打包的数据和使用内置的estimator first ML模型和Scikit-learn以及一些基本数据的过程。
Scikit-learn 使构建模型和评估它们的使用变得简单。它主要侧重于使用数字数据,并包含几个现成的数据集用作学习工具。它还包括供学生尝试的预建模型。让我们探索加载预先打包的数据和使用内置的 estimator first ML 模型和 Scikit-learn 以及一些基本数据的过程。
## 练习 - 你的第一个Scikit-learn notebook
## 练习 - 你的第一个 Scikit-learn notebook
> 本教程的灵感来自Scikit-learn网站上的[线性回归示例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)。
> 本教程的灵感来自 Scikit-learn 网站上的 [线性回归示例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)。
在与本课程相关的 _notebook.ipynb_ 文件中,通过点击“垃圾桶”图标清除所有单元格。
在本节中你将使用一个关于糖尿病的小数据集该数据集内置于Scikit-learn中以用于学习目的。想象一下你想为糖尿病患者测试一种治疗方法。机器学习模型可能会帮助你根据变量组合确定哪些患者对治疗反应更好。即使是非常基本的回归模型在可视化时也可能会显示有助于组织理论临床试验的变量信息。
在本节中,你将使用一个关于糖尿病的小数据集,该数据集内置于 Scikit-learn 中以用于学习目的。想象一下,你想为糖尿病患者测试一种治疗方法。机器学习模型可能会帮助你根据变量组合确定哪些患者对治疗反应更好。即使是非常基本的回归模型,在可视化时,也可能会显示有助于组织理论临床试验的变量信息。
✅ 回归方法有很多种,你选择哪一种取决于你正在寻找的答案。如果你想预测给定年龄的人的可能身高,你可以使用线性回归,因为你正在寻找**数值**。如果你有兴趣了解某种菜肴是否应被视为素食主义者,那么你正在寻找**类别分配**,以便使用逻辑回归。稍后你将了解有关逻辑回归的更多信息。想一想你可以对数据提出的一些问题,以及这些方法中的哪一个更合适。
✅ 回归方法有很多种,你选择哪一种取决于你正在寻找的答案。如果你想预测给定年龄的人的可能身高,你可以使用线性回归,因为你正在寻找**数值**。如果你有兴趣了解某种菜肴是否应被视为素食主义者,那么你正在寻找**类别分配**,以便使用逻辑回归。稍后你将了解有关逻辑回归的更多信息。想一想你可以对数据提出的一些问题,以及这些方法中的哪一个更合适。
让我们开始这项任务。
让我们开始这项任务。
### 导入库
对于此任务,我们将导入一些库:
- **matplotlib**。这是一个有用的[绘图工具](https://matplotlib.org/),我们将使用它来创建线图。
- **numpy**。 [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)是一个有用的库用于在Python中处理数字数据。
- **sklearn**。这是Scikit-learn库。
- **matplotlib**。这是一个有用的 [绘图工具](https://matplotlib.org/),我们将使用它来创建线图。
- **numpy**。 [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是一个有用的库,用于在 Python 中处理数字数据。
- **sklearn**。这是 Scikit-learn 库。
导入一些库来帮助你完成任务。
导入一些库来帮助你完成任务。
1. 通过输入以下代码添加导入:
@ -106,24 +106,24 @@ Scikit-learn使构建模型和评估它们的使用变得简单。它主要侧
from sklearn import datasets, linear_model, model_selection
```
在上面的代码中,你正在导入`matplottlib`、`numpy`,你正在从`sklearn`导入`datasets`、`linear_model`和`model_selection`。 `model_selection`用于将数据拆分为训练集和测试集。
在上面的代码中,你正在导入 `matplottlib`、`numpy`,你正在从 `sklearn` 导入 `datasets`、`linear_model` `model_selection``model_selection` 用于将数据拆分为训练集和测试集。
### 糖尿病数据集
### 糖尿病数据集
内置的[糖尿病数据集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)包含442个围绕糖尿病的数据样本具有10个特征变量其中包括
内置的 [糖尿病数据集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 包含 442 个围绕糖尿病的数据样本,具有 10 个特征变量,其中包括:
age岁数
bmi体重指数
bp平均血压
s1 tcT细胞一种白细胞
s1 tcT 细胞(一种白细胞)
✅ 该数据集包括“性别”的概念,作为对糖尿病研究很重要的特征变量。许多医学数据集包括这种类型的二元分类。想一想诸如此类的分类如何将人群的某些部分排除在治疗之外。
✅ 该数据集包括“性别”的概念,作为对糖尿病研究很重要的特征变量。许多医学数据集包括这种类型的二元分类。想一想诸如此类的分类如何将人群的某些部分排除在治疗之外。
现在加载X和y数据。
现在,加载 X y 数据。
> 🎓 请记住这是监督学习我们需要一个命名为“y”的目标。
> 🎓 请记住这是监督学习我们需要一个命名为“y”的目标。
在新的代码单元中,通过调用`load_diabetes()`加载糖尿病数据集。输入`return_X_y=True`表示`X`将是一个数据矩阵,而`y`将是回归目标。
在新的代码单元中,通过调用 `load_diabetes()` 加载糖尿病数据集。输入 `return_X_y=True` 表示 `X` 将是一个数据矩阵,而`y`将是回归目标。
1. 添加一些打印命令来显示数据矩阵的形状及其第一个元素:
@ -133,9 +133,9 @@ s1 tcT细胞一种白细胞
print(X[0])
```
作为响应返回的是一个元组。你正在做的是将元组的前两个值分别分配给`X`和`y`。了解更多 [关于元组](https://wikipedia.org/wiki/Tuple)。
作为响应返回的是一个元组。你正在做的是将元组的前两个值分别分配给 `X` `y`。了解更多 [关于元组](https://wikipedia.org/wiki/Tuple)。
你可以看到这个数据有442个项目组成了10个元素的数组
你可以看到这个数据有 442 个项目,组成了 10 个元素的数组:
```text
(442, 10)
@ -143,38 +143,38 @@ s1 tcT细胞一种白细胞
-0.04340085 -0.00259226 0.01990842 -0.01764613]
```
✅ 稍微思考一下数据和回归目标之间的关系。线性回归预测特征X和目标变量y之间的关系。你能在文档中找到糖尿病数据集的[目标](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)吗?鉴于该目标,该数据集展示了什么?
✅ 稍微思考一下数据和回归目标之间的关系。线性回归预测特征 X 和目标变量 y 之间的关系。你能在文档中找到糖尿病数据集的 [目标](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 吗?鉴于该目标,该数据集展示了什么?
2. 接下来通过使用numpy的`newaxis`函数将其排列到一个新数组中来选择要绘制的该数据集的一部分。我们将使用线性回归根据它确定的模式在此数据中的值之间生成一条线。
2. 接下来,通过使用 numpy `newaxis` 函数将其排列到一个新数组中来选择要绘制的该数据集的一部分。我们将使用线性回归根据它确定的模式在此数据中的值之间生成一条线。
```python
X = X[:, np.newaxis, 2]
```
✅ 随时打印数据以检查其形状。
✅ 随时打印数据以检查其形状。
3. 现在你已准备好绘制数据,你可以查看机器是否可以帮助确定此数据集中数字之间的逻辑分割。为此你需要将数据(X)和目标(y)拆分为测试集和训练集。Scikit-learn有一个简单的方法来做到这一点你可以在给定点拆分测试数据。
3. 现在你已准备好绘制数据,你可以查看机器是否可以帮助确定此数据集中数字之间的逻辑分割。为此你需要将数据 (X) 和目标 (y) 拆分为测试集和训练集。Scikit-learn 有一个简单的方法来做到这一点;你可以在给定点拆分测试数据。
```python
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
```
4. 现在你已准备好训练你的模型!加载线性回归模型并使用`model.fit()`使用X和y训练集对其进行训练
4. 现在你已准备好训练你的模型!加载线性回归模型并使用 `model.fit()` 使用 X y 训练集对其进行训练:
```python
model = linear_model.LinearRegression()
model.fit(X_train, y_train)
```
`model.fit()`是一个你会在许多机器学习库(例如 TensorFlow中看到的函数
`model.fit()` 是一个你会在许多机器学习库(例如 TensorFlow中看到的函数
5. 然后,使用函数`predict()`,使用测试数据创建预测。这将用于绘制数据组之间的线
5. 然后,使用函数 `predict()`,使用测试数据创建预测。这将用于绘制数据组之间的线
```python
y_pred = model.predict(X_test)
```
6. 现在是时候在图中显示数据了。Matplotlib是完成此任务的非常有用的工具。创建所有X和y测试数据的散点图并使用预测在模型的数据分组之间最合适的位置画一条线。
6. 现在是时候在图中显示数据了。Matplotlib 是完成此任务的非常有用的工具。创建所有 X y 测试数据的散点图,并使用预测在模型的数据分组之间最合适的位置画一条线。
```python
plt.scatter(X_test, y_test, color='black')
@ -184,21 +184,23 @@ s1 tcT细胞一种白细胞
![显示糖尿病周围数据点的散点图](../images/scatterplot.png)
✅ 想一想这里发生了什么。一条直线穿过许多小数据点但它到底在做什么你能看到你应该如何使用这条线来预测一个新的、未见过的数据点对应的y轴值吗尝试用语言描述该模型的实际用途。
✅ 想一想这里发生了什么。一条直线穿过许多小数据点,但它到底在做什么?你能看到你应该如何使用这条线来预测一个新的、未见过的数据点对应的 y 轴值吗?尝试用语言描述该模型的实际用途。
恭喜,你构建了第一个线性回归模型,使用它创建了预测,并将其显示在绘图中!
恭喜,你构建了第一个线性回归模型,使用它创建了预测,并将其显示在绘图中!
---
## 🚀挑战
从这个数据集中绘制一个不同的变量。提示:编辑这一行:`X = X[:, np.newaxis, 2]`。鉴于此数据集的目标,你能够发现糖尿病作为一种疾病的进展情况吗?
## [课后测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/10/)
## 复习与自学
在本教程中,你使用了简单线性回归,而不是单变量或多元线性回归。阅读一些关于这些方法之间差异的信息,或查看[此视频](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
在本教程中,你使用了简单线性回归,而不是单变量或多元线性回归。阅读一些关于这些方法之间差异的信息,或查看 [此视频](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)
阅读有关回归概念的更多信息,并思考这种技术可以回答哪些类型的问题。用这个[教程](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-15963-cxa)加深你的理解。
阅读有关回归概念的更多信息,并思考这种技术可以回答哪些类型的问题。用这个 [教程](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-15963-cxa) 加深你的理解。
## 任务

@ -1,55 +1,56 @@
# 使用Scikit-learn构建回归模型准备和可视化数据
# 使用 Scikit-learn 构建回归模型:准备和可视化数据
> ![数据可视化信息图](../images/data-visualization.png)
> 作者[Dasani Madipalli](https://twitter.com/dasani_decoded)
> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [课前测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/11/)
## 介绍
既然你已经设置了开始使用Scikit-learn处理机器学习模型构建所需的工具你就可以开始对数据提出问题了。当你处理数据并应用ML解决方案时了解如何提出正确的问题以正确释放数据集的潜力非常重要。
既然你已经设置了开始使用 Scikit-learn 处理机器学习模型构建所需的工具你就可以开始对数据提出问题了。当你处理数据并应用ML解决方案时了解如何提出正确的问题以正确释放数据集的潜力非常重要。
在本课中,你将学习:
- 如何为模型构建准备数据。
- 如何使用Matplotlib进行数据可视化。
- 如何使用 Matplotlib 进行数据可视化。
## 对你的数据提出正确的问题
## 对你的数据提出正确的问题
你需要回答的问题将决定你将使用哪种类型的ML算法。你得到的答案的质量将在很大程度上取决于你的数据的性质。
你需要回答的问题将决定你将使用哪种类型的 ML 算法。你得到的答案的质量将在很大程度上取决于你的数据的性质。
查看为本课程提供的[数据](../data/US-pumpkins.csv)。你可以在VS Code中打开这个.csv文件。快速浏览一下就会发现有空格还有字符串和数字数据的混合。还有一个奇怪的列叫做“Package”其中的数据是“sacks”、“bins”和其他值的混合。事实上数据有点乱。
查看为本课程提供的[数据](../data/US-pumpkins.csv)。你可以在 VS Code 中打开这个 .csv 文件。快速浏览一下就会发现有空格还有字符串和数字数据的混合。还有一个奇怪的列叫做“Package”其中的数据是“sacks”、“bins”和其他值的混合。事实上数据有点乱。
事实上获得一个完全准备好用于创建开箱即用的ML模型的数据集并不是很常见。在本课中你将学习如何使用标准Python库准备原始数据集。你还将学习各种技术来可视化数据。
事实上获得一个完全准备好用于创建开箱即用的ML模型的数据集并不是很常见。在本课中你将学习如何使用标准 Python 库准备原始数据集。你还将学习各种技术来可视化数据。
## 案例研究:“南瓜市场”
你将在`data`文件夹中找到一个名为[US-pumpkins.csv](../data/US-pumpkins.csv)的.csv 文件其中包含有关南瓜市场的1757行数据 按城市排序分组。这是从美国农业部分发的[特种作物终端市场标准报告](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)中提取的原始数据。
你将在 `data` 文件夹中找到一个名为 [US-pumpkins.csv](../data/US-pumpkins.csv) .csv 文件,其中包含有关南瓜市场的 1757 行数据,已按城市排序分组。这是从美国农业部分发的[特种作物终端市场标准报告](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)中提取的原始数据。
### 准备数据
这些数据属于公共领域。它可以从美国农业部网站下载,每个城市有许多不同的文件。为了避免太多单独的文件,我们将所有城市数据合并到一个电子表格中,因此我们已经准备了一些数据。接下来,让我们仔细看看数据。
### 南瓜数据 - 早期结论
### 南瓜数据 - 早期结论
你对这些数据有什么看法?你已经看到了无法理解的字符串、数字、空格和奇怪值的混合体。
你可以使用回归技术对这些数据提出什么问题?“预测给定月份内待售南瓜的价格”怎么样?再次查看数据,你需要进行一些更改才能创建任务所需的数据结构。
## 练习 - 分析南瓜数据
你可以使用回归技术对这些数据提出什么问题?“预测给定月份内待售南瓜的价格”怎么样?再次查看数据,你需要进行一些更改才能创建任务所需的数据结构。
让我们使用[Pandas](https://pandas.pydata.org/)“Python 数据分析”的意思)一个非常有用的工具,用于分析和准备南瓜数据。
## 练习 - 分析南瓜数据
让我们使用 [Pandas](https://pandas.pydata.org/)“Python 数据分析”的意思)一个非常有用的工具,用于分析和准备南瓜数据。
### 首先,检查遗漏的日期
你首先需要采取以下步骤来检查缺少的日期:
1. 将日期转换为月份格式(这些是美国日期,因此格式为`MM/DD/YYYY`)。
1. 将日期转换为月份格式(这些是美国日期,因此格式为 `MM/DD/YYYY`)。
2. 将月份提取到新列。
在 Visual Studio Code 中打开notebook.ipynb文件并将电子表格导入到新的Pandas dataframe中。
在 Visual Studio Code 中打开 notebook.ipynb 文件,并将电子表格导入到新的 Pandas dataframe 中。
1. 使用 `head()`函数查看前五行。
1. 使用 `head()` 函数查看前五行。
```python
import pandas as pd
@ -57,9 +58,9 @@
pumpkins.head()
```
✅ 使用什么函数来查看最后五行?
✅ 使用什么函数来查看最后五行?
2. 检查当前dataframe中是否缺少数据
2. 检查当前 dataframe 中是否缺少数据:
```python
pumpkins.isnull().sum()
@ -67,20 +68,20 @@
有数据丢失,但可能对手头的任务来说无关紧要。
3. 为了让你的dataframe更容易使用使用`drop()`删除它的几个列,只保留你需要的列:
3. 为了让你的 dataframe 更容易使用,使用 `drop()` 删除它的几个列,只保留你需要的列:
```python
new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date']
pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)
```
### 然后,确定南瓜的平均价格
### 然后,确定南瓜的平均价格
考虑如何确定给定月份南瓜的平均价格。你会为此任务选择哪些列提示你需要3列。
考虑如何确定给定月份南瓜的平均价格。你会为此任务选择哪些列?提示:你需要 3 列。
解决方案:取`Low Price`和`High Price`列的平均值来填充新的Price列将Date列转换成只显示月份。幸运的是根据上面的检查没有丢失日期或价格的数据。
解决方案:取 `Low Price` `High Price` 列的平均值来填充新的 Price 列,将 Date 列转换成只显示月份。幸运的是,根据上面的检查,没有丢失日期或价格的数据。
1. 要计算平均值,请添加以下代码:
1. 要计算平均值,请添加以下代码:
```python
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
@ -89,37 +90,37 @@
```
✅ 请随意使用`print(month)`打印你想检查的任何数据。
✅ 请随意使用 `print(month)` 打印你想检查的任何数据。
2. 现在将转换后的数据复制到新的Pandas dataframe中
2. 现在,将转换后的数据复制到新的 Pandas dataframe 中:
```python
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
```
打印出的dataframe将向你展示一个干净整洁的数据集你可以在此数据集上构建新的回归模型。
打印出的 dataframe 将向你展示一个干净整洁的数据集,你可以在此数据集上构建新的回归模型。
### 但是等等!这里有点奇怪
如果你看看`Package`(包装)一栏南瓜有很多不同的配置。有的以1 1/9蒲式耳的尺寸出售有的以1/2蒲式耳的尺寸出售有的以每只南瓜出售有的以每磅出售有的以不同宽度的大盒子出售。
如果你看看 `Package`(包装)一栏,南瓜有很多不同的配置。有的以 1 1/9 蒲式耳的尺寸出售,有的以 1/2 蒲式耳的尺寸出售,有的以每只南瓜出售,有的以每磅出售,有的以不同宽度的大盒子出售。
> 南瓜似乎很难统一称重方式
深入研究原始数据,有趣的是,任何`Unit of Sale`等于“EACH”或“PER BIN”的东西也具有每英寸、每箱或“每个”的`Package`类型。南瓜似乎很难采用统一称重方式,因此让我们通过仅选择`Package`列中带有字符串“蒲式耳”的南瓜来过滤它们。
深入研究原始数据,有趣的是,任何 `Unit of Sale` 等于“EACH”或“PER BIN”的东西也具有每英寸、每箱或“每个”的 `Package` 类型。南瓜似乎很难采用统一称重方式,因此让我们通过仅选择 `Package` 列中带有字符串“蒲式耳”的南瓜来过滤它们。
1. 在初始.csv导入下添加过滤器
1. 在初始 .csv 导入下添加过滤器:
```python
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
```
如果你现在打印数据,你可以看到你只获得了 415 行左右包含按蒲式耳计算的南瓜的数据。
如果你现在打印数据,你可以看到你只获得了 415 行左右包含按蒲式耳计算的南瓜的数据。
### 可是等等! 还有一件事要做
### 可是等等! 还有一件事要做
你是否注意到每行的蒲式耳数量不同?你需要对定价进行标准化,以便显示每蒲式耳的定价,因此请进行一些数学计算以对其进行标准化。
你是否注意到每行的蒲式耳数量不同?你需要对定价进行标准化,以便显示每蒲式耳的定价,因此请进行一些数学计算以对其进行标准化。
1. 在创建 new_pumpkins dataframe的代码块之后添加这些行
1. 在创建 new_pumpkins dataframe 的代码块之后添加这些行:
```python
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
@ -129,33 +130,33 @@
✅ 根据 [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)蒲式耳的重量取决于产品的类型因为它是一种体积测量。“例如一蒲式耳西红柿应该重56 磅……叶子和蔬菜占据更多空间重量更轻所以一蒲式耳菠菜只有20磅。” 这一切都相当复杂!让我们不要费心进行蒲式耳到磅的转换,而是按蒲式耳定价。然而,所有这些对蒲式耳南瓜的研究表明,了解数据的性质是多么重要!
现在,你可以根据蒲式耳测量来分析每单位的定价。如果你再打印一次数据,你可以看到它是如何标准化的。
现在,你可以根据蒲式耳测量来分析每单位的定价。如果你再打印一次数据,你可以看到它是如何标准化的。
✅ 你有没有注意到半蒲式耳卖的南瓜很贵?你能弄清楚为什么吗?提示:小南瓜比大南瓜贵得多,这可能是因为考虑到一个大的空心馅饼南瓜占用的未使用空间,每蒲式耳的南瓜要多得多。
✅ 你有没有注意到半蒲式耳卖的南瓜很贵?你能弄清楚为什么吗?提示:小南瓜比大南瓜贵得多,这可能是因为考虑到一个大的空心馅饼南瓜占用的未使用空间,每蒲式耳的南瓜要多得多。
## 可视化策略
## 可视化策略
数据科学家的部分职责是展示他们使用的数据的质量和性质。为此,他们通常会创建有趣的可视化或绘图、图形和图表,以显示数据的不同方面。通过这种方式,他们能够直观地展示难以发现的关系和差距。
数据科学家的部分职责是展示他们使用的数据的质量和性质。为此,他们通常会创建有趣的可视化或绘图、图形和图表,以显示数据的不同方面。通过这种方式,他们能够直观地展示难以发现的关系和差距。
可视化还可以帮助确定最适合数据的机器学习技术。例如,似乎沿着一条线的散点图表明该数据是线性回归练习的良好候选者。
一个在Jupyter notebooks中运行良好的数据可视化库是[Matplotlib](https://matplotlib.org/)(你在上一课中也看到过)。
一个在 Jupyter notebooks 中运行良好的数据可视化库是 [Matplotlib](https://matplotlib.org/)(你在上一课中也看到过)。
> 在[这些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-15963-cxa)中获得更多数据可视化经验。
> 在[这些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-15963-cxa)中获得更多数据可视化经验。
## 练习 - 使用 Matplotlib 进行实验
## 练习 - 使用 Matplotlib 进行实验
尝试创建一些基本图形来显示你刚刚创建的新dataframe。基本线图会显示什么
尝试创建一些基本图形来显示你刚刚创建的新 dataframe。基本线图会显示什么
1. 在文件顶部导入Matplotlib
1. 在文件顶部导入 Matplotlib
```python
import matplotlib.pyplot as plt
```
2. 重新刷新以运行整个notebook。
2. 重新刷新以运行整个 notebook。
3. 在notebook底部添加一个单元格以绘制数据
3. 在 notebook 底部,添加一个单元格以绘制数据:
```python
price = new_pumpkins.Price
@ -170,9 +171,9 @@
它并不是特别有用,因为它所做的只是在你的数据中显示为给定月份的点数分布。
### 让它有用
### 让它有用
为了让图表显示有用的数据你通常需要以某种方式对数据进行分组。让我们尝试创建一个图其中y轴显示月份数据显示数据的分布。
为了让图表显示有用的数据,你通常需要以某种方式对数据进行分组。让我们尝试创建一个图,其中 y 轴显示月份,数据显示数据的分布。
1. 添加单元格以创建分组柱状图:
@ -183,19 +184,19 @@
![显示价格与月份关系的柱状图](../images/barchart.png)
这是一个更有用的数据可视化似乎表明南瓜的最高价格出现在9月和10月。这符合你的期望吗为什么为什么不
这是一个更有用的数据可视化!似乎表明南瓜的最高价格出现在 9 月和 10 月。这符合你的期望吗?为什么?为什么不?
---
## 🚀挑战
探索Matplotlib提供的不同类型的可视化。哪种类型最适合回归问题
探索 Matplotlib 提供的不同类型的可视化。哪种类型最适合回归问题?
## [课后测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/12/)
## 复习与自学
请看一下可视化数据的多种方法。列出各种可用的库并注意哪些库最适合给定类型的任务例如2D可视化与3D可视化。你发现了什么
请看一下可视化数据的多种方法。列出各种可用的库,并注意哪些库最适合给定类型的任务,例如 2D 可视化与 3D 可视化。你发现了什么?
## 任务

@ -1,19 +1,21 @@
# 使用Scikit-learn构建回归模型两种方式的回归
# 使用 Scikit-learn 构建回归模型:两种方式的回归
![线性与多项式回归信息图](../images/linear-polynomial.png)
> 作者[Dasani Madipalli](https://twitter.com/dasani_decoded)
> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [课前测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/13/)
### 介绍
到目前为止你已经通过从我们将在本课程中使用的南瓜定价数据集收集的样本数据探索了什么是回归。你还使用Matplotlib对其进行了可视化。
### 介绍
到目前为止,你已经通过从我们将在本课程中使用的南瓜定价数据集收集的样本数据探索了什么是回归。你还使用 Matplotlib 对其进行了可视化。
现在你已准备好深入研究ML的回归。 在本课中你将详细了解两种类型的回归_基本线性回归_和_多项式回归_以及这些技术背后的一些数学知识。
现在你已准备好深入研究 ML 的回归。 在本课中你将详细了解两种类型的回归_基本线性回归_和_多项式回归_以及这些技术背后的一些数学知识。
> 在整个课程中,我们假设数学知识最少,并试图让来自其他领域的学生也能接触到它,因此请使用笔记、🧮标注、图表和其他学习工具以帮助理解。
### 前提
你现在应该熟悉我们正在检查的南瓜数据的结构。你可以在本课的_notebook.ipynb_文件中找到它。 在这个文件中南瓜的价格显示在一个新的dataframe 中。确保可以在Visual Studio Code代码的内核中运行这些notebooks。
你现在应该熟悉我们正在检查的南瓜数据的结构。你可以在本课的 _notebook.ipynb_ 文件中找到它。 在这个文件中,南瓜的价格显示在一个新的 dataframe 中。确保可以在 Visual Studio Code 代码的内核中运行这些 notebooks。
### 准备
@ -21,33 +23,33 @@
- 什么时候买南瓜最好?
- 一箱微型南瓜的价格是多少?
- 我应该买半蒲式耳还是1 1/9蒲式耳
- 我应该买半蒲式耳还是 1 1/9 蒲式耳?
让我们继续深入研究这些数据。
在上一课中你创建了一个Pandas dataframe并用原始数据集的一部分填充它按蒲式耳标准化定价。但是通过这样做你只能收集大约400个数据点而且只能收集秋季月份的数据。
在上一课中,你创建了一个 Pandas dataframe 并用原始数据集的一部分填充它,按蒲式耳标准化定价。但是,通过这样做,你只能收集大约 400 个数据点,而且只能收集秋季月份的数据。
看看我们在本课随附的notebook中预加载的数据。数据已预加载并绘制了初始散点图以显示月份数据。也许我们可以通过更多地清理数据来获得更多关于数据性质的细节。
看看我们在本课随附的 notebook 中预加载的数据。数据已预加载,并绘制了初始散点图以显示月份数据。也许我们可以通过更多地清理数据来获得更多关于数据性质的细节。
## 线性回归线
正如你在第1课中学到的线性回归练习的目标是能够绘制一条线以便
正如你在第 1 课中学到的,线性回归练习的目标是能够绘制一条线以便:
- **显示变量关系**。 显示变量之间的关系
- **作出预测**。 准确预测新数据点与该线的关系。
绘制这种类型的线是**最小二乘回归**的典型做法。术语“最小二乘法”意味着将回归线周围的所有数据点平方,然后相加。理想情况下,最终和尽可能小,因为我们希望错误数量较少,或“最小二乘法”。
我们这样做是因为我们想要对一条与所有数据点的累积距离最小的线进行建模。我们还在添加它们之前对这些项进行平方,因为我们关心的是它的大小而不是它的方向。
> **🧮 数学知识**
>
> **🧮 数学知识**
>
> 这条线称为_最佳拟合线_可以用[一个等式](https://en.wikipedia.org/wiki/Simple_linear_regression)表示:
>
>
> ```
> Y = a + bX
> ```
>
> `X`是“解释变量”。`Y`是“因变量”。直线的斜率是`b``a`是y轴截距指的是`X = 0`时`Y`的值。
> `X` 是“解释变量”。`Y` 是“因变量”。直线的斜率是`b``a`是y轴截距指的是`X = 0`时`Y`的值。
>
>![计算斜率](../images/slope.png)
>
@ -103,7 +105,7 @@ print(new_pumpkins['Package'].corr(new_pumpkins['Price']))
对这些数据提出的一个很好的问题是:“我可以期望给定的南瓜包装的价格是多少?”
让我们建立这个回归模型
让我们建立这个回归模型
## 建立线性模型
@ -139,13 +141,14 @@ lin_pumpkins
415 rows × 2 columns
```
1. 现在你可以分配X和y坐标数据
1. 现在你可以分配 X y 坐标数据:
```python
X = lin_pumpkins.values[:, :1]
y = lin_pumpkins.values[:, 1:2]
```
✅ 这里发生了什么?你正在使用[Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295)来创建数组来填充`X`和`y`。
✅ 这里发生了什么?你正在使用 [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) 来创建数组来填充`X`和`y`。
2. 接下来,开始回归模型构建例程:
@ -181,6 +184,7 @@ lin_pumpkins
plt.show()
```
![散点图显示包装与价格的关系](../images/linear.png)
4. 针对假设的品种测试模型:
@ -188,7 +192,7 @@ lin_pumpkins
```python
lin_reg.predict( np.array([ [2.75] ]) )
```
这个神话般的品种的价格是:
```output
@ -212,6 +216,7 @@ lin_pumpkins
多项式回归创建一条曲线以更好地拟合非线性数据。
1. 让我们重新创建一个填充了原始南瓜数据片段的dataframe
```python
new_columns = ['Variety', 'Package', 'City', 'Month', 'Price']
poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns')
@ -221,29 +226,30 @@ lin_pumpkins
可视化dataframe中数据之间相关性的一种好方法是将其显示在“coolwarm”图表中
2. 使用`Background_gradient()`方法和`coolwarm`作为其参数值:
2. 使用 `Background_gradient()` 方法和 `coolwarm` 作为其参数值:
```python
corr = poly_pumpkins.corr()
corr.style.background_gradient(cmap='coolwarm')
```
这段代码创建了一个热图:
![显示数据相关性的热图](../images/heatmap.png)
查看此图表你可以直观地看到Package和Price之间的良好相关性。所以你应该能够创建一个比上一个更好的模型。
查看此图表,你可以直观地看到 Package Price 之间的良好相关性。所以你应该能够创建一个比上一个更好的模型。
### 创建管道
Scikit-learn包含一个用于构建多项式回归模型的有用API - `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)。 创建了一个“管道”,它是一个估计器链。 在这种情况下,管道包括多项式特征或形成非线性路径的预测。
Scikit-learn 包含一个用于构建多项式回归模型的有用 API - `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)。 创建了一个“管道”,它是一个估计器链。 在这种情况下,管道包括多项式特征或形成非线性路径的预测。
1. 构建X和y列
1. 构建 X y 列:
```python
X=poly_pumpkins.iloc[:,3:4].values
y=poly_pumpkins.iloc[:,4:5].values
```
2. 通过调用`make_pipeline()`方法创建管道:
2. 通过调用 `make_pipeline()` 方法创建管道:
```python
from sklearn.preprocessing import PolynomialFeatures
@ -260,7 +266,7 @@ Scikit-learn包含一个用于构建多项式回归模型的有用API - `make_pi
### 创建序列
此时你需要使用_排序好的_数据创建一个新的dataframe ,以便管道可以创建序列。
此时你需要使用_排序好的_数据创建一个新的 dataframe ,以便管道可以创建序列。
添加以下代码:
@ -276,7 +282,7 @@ Scikit-learn包含一个用于构建多项式回归模型的有用API - `make_pi
plt.show()
```
你通过调用`pd.DataFrame`创建了一个新的dataframe。然后通过调用`sort_values()`对值进行排序。最后你创建了一个多项式图:
你通过调用 `pd.DataFrame` 创建了一个新的 dataframe。然后通过调用 `sort_values()` 对值进行排序。最后你创建了一个多项式图:
![显示包装与价格关系的多项式图](../images/polynomial.png)
@ -301,11 +307,12 @@ Scikit-learn包含一个用于构建多项式回归模型的有用API - `make_pi
我们可以输入一个新值并得到一个预测吗?
调用`predict()`进行预测:
调用 `predict()` 进行预测:
```python
pipeline.predict( np.array([ [2.75] ]) )
```
你会得到这样的预测:
```output
@ -314,19 +321,20 @@ Scikit-learn包含一个用于构建多项式回归模型的有用API - `make_pi
参照图像,这确实有道理!而且,如果这是一个比前一个更好的模型,看同样的数据,你需要为这些更昂贵的南瓜做好预算!
🏆 干得不错!你在一节课中创建了两个回归模型。在回归的最后一节中,你将了解逻辑回归以确定类别。
🏆 干得不错!你在一节课中创建了两个回归模型。在回归的最后一节中,你将了解逻辑回归以确定类别。
---
## 🚀挑战
在此notebook中测试几个不同的变量以查看相关性与模型准确性的对应关系。
在此 notebook 中测试几个不同的变量,以查看相关性与模型准确性的对应关系。
## [课后测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/)
## 复习与自学
在本课中我们学习了线性回归。还有其他重要的回归类型。了解Stepwise、Ridge、Lasso和Elasticnet技术。学习更多信息的好课程是[斯坦福统计学习课程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
在本课中,我们学习了线性回归。还有其他重要的回归类型。了解 Stepwise、Ridge、Lasso Elasticnet 技术。学习更多信息的好课程是 [斯坦福统计学习课程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
## 任务
## 任务
[构建模型](../assignment.md)
[构建模型](../assignment.md)

@ -1,7 +1,8 @@
# 逻辑回归预测分类
![逻辑与线性回归信息图](../images/logistic-linear.png)
> 作者[Dasani Madipalli](https://twitter.com/dasani_decoded)
> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded)
## [课前测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/15/)
## 介绍
@ -38,7 +39,8 @@
逻辑回归不提供与线性回归相同的功能。前者提供关于二元类别“橙色或非橙色”的预测而后者能够预测连续值例如给定南瓜的起源和收获时间_其价格将上涨多少_。
![南瓜分类模型](../images/pumpkin-classifier.png)
> 作者[Dasani Madipalli](https://twitter.com/dasani_decoded)
> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded)
### 其他分类
还有其他类型的逻辑回归,包括多项和有序:
@ -47,7 +49,7 @@
- **有序**涉及有序类别如果我们想对我们的结果进行逻辑排序非常有用例如我们的南瓜按有限数量的大小mini、sm、med、lg、xl、xxl排序。
![多项式与有序回归](../images/multinomial-ordinal.png)
> 作者[Dasani Madipalli](https://twitter.com/dasani_decoded)
> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded)
### 仍然是线性的
@ -89,11 +91,11 @@
### 可视化 - 并列网格
到现在为止,你已经再次使用南瓜数据加载了[starter notebook](./notebook.ipynb)并对其进行了清理,以保留包含一些变量(包括`Color`的数据集。让我们使用不同的库来可视化notebook中的数据帧[Seaborn](https://seaborn.pydata.org/index.html)它是基于我们之前使用的Matplotlib构建的。
到现在为止,你已经再次使用南瓜数据加载了 [starter notebook](./notebook.ipynb) 并对其进行了清理,以保留包含一些变量(包括 `Color`)的数据集。让我们使用不同的库来可视化 notebook 中的数据帧:[Seaborn](https://seaborn.pydata.org/index.html),它是基于我们之前使用的 Matplotlib 构建的。
Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可以比较并列网格中每个点的数据分布。
Seaborn 提供了一些巧妙的方法来可视化你的数据。例如,你可以比较并列网格中每个点的数据分布。
1. 通过实例化一个`PairGrid`,使用我们的南瓜数据`new_pumpkins`,然后调用`map()`来创建这样一个网格:
1. 通过实例化一个 `PairGrid`,使用我们的南瓜数据 `new_pumpkins`,然后调用 `map()` 来创建这样一个网格:
```python
import seaborn as sns
@ -112,7 +114,7 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
由于颜色是一个二元类别(橙色或非橙色),它被称为“分类数据”,需要一种更[专业的方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)来可视化。还有其他方法可以可视化此类别与其他变量的关系。
你可以使用Seaborn图并列可视化变量。
你可以使用 Seaborn 图并列可视化变量。
1. 尝试使用“分类散点”图来显示值的分布:
@ -126,7 +128,7 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
“小提琴”类型的图很有用,因为你可以轻松地可视化两个类别中数据的分布方式。小提琴图不适用于较小的数据集,因为分布显示得更“平滑”。
1. 作为参数`x=Color`、`kind="violin"`并调用`catplot()`
1. 作为参数 `x=Color`、`kind="violin"` 并调用 `catplot()`
```python
sns.catplot(x="Color", y="Item Size",
@ -135,7 +137,7 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
![小提琴图](../images/violin.png)
✅ 尝试使用其他变量创建此图和其他Seaborn图。
✅ 尝试使用其他变量创建此图和其他 Seaborn 图。
现在我们已经了解了颜色的二元类别与更大的尺寸组之间的关系,让我们探索逻辑回归来确定给定南瓜的可能颜色。
@ -145,13 +147,13 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
>
> ![逻辑函数](../images/sigmoid.png)
>
> 其中sigmoid的中点位于x的0点L是曲线的最大值k是曲线的陡度。如果函数的结果大于0.5则所讨论的标签将被赋予二进制选择的类“1”。否则它将被分类为“0”。
> 其中 sigmoid 的中点位于 x 0 L 是曲线的最大值k 是曲线的陡度。如果函数的结果大于 0.5则所讨论的标签将被赋予二进制选择的类“1”。否则它将被分类为“0”。
## 建立你的模型
在Scikit-learn中构建模型来查找这些二元分类非常简单。
Scikit-learn 中构建模型来查找这些二元分类非常简单。
1. 选择要在分类模型中使用的变量,并调用`train_test_split()`拆分训练集和测试集:
1. 选择要在分类模型中使用的变量,并调用 `train_test_split()` 拆分训练集和测试集:
```python
from sklearn.model_selection import train_test_split
@ -165,7 +167,7 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
```
2. 现在你可以训练你的模型,用你的训练数据调用`fit()`,并打印出它的结果:
2. 现在你可以训练你的模型,用你的训练数据调用 `fit()`,并打印出它的结果:
```python
from sklearn.model_selection import train_test_split
@ -181,7 +183,7 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
print('Accuracy: ', accuracy_score(y_test, predictions))
```
看看你的模型的记分板。考虑到你只有大约1000行数据这还不错
看看你的模型的记分板。考虑到你只有大约 1000 行数据,这还不错:
```output
precision recall f1-score support
@ -249,9 +251,10 @@ Seaborn提供了一些巧妙的方法来可视化你的数据。例如你可
🎓 加权平均值:计算每个标签的平均指标,通过按支持度(每个标签的真实实例数)加权来考虑标签不平衡。
✅ 如果你想让你的模型减少假阴性的数量,你能想出应该关注哪个指标吗?
## 可视化该模型的ROC曲线
这不是一个糟糕的模型它的准确率在80%范围内,因此理想情况下,你可以使用它来预测给定一组变量的南瓜颜色。
## 可视化该模型的 ROC 曲线
这不是一个糟糕的模型;它的准确率在 80% 范围内,因此理想情况下,你可以使用它来预测给定一组变量的南瓜颜色。
让我们再做一个可视化来查看所谓的“ROC”分数
@ -264,23 +267,27 @@ fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])
sns.lineplot([0, 1], [0, 1])
sns.lineplot(fpr, tpr)
```
再次使用Seaborn绘制模型的[接收操作特性](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)或ROC。 ROC曲线通常用于根据分类器的真假阳性来了解分类器的输出。“ROC曲线通常具有Y轴上的真阳性率和X轴上的假阳性率。” 因此,曲线的陡度以及中点线与曲线之间的空间很重要:你需要一条快速向上并越过直线的曲线。在我们的例子中,一开始就有误报,然后这条线正确地向上和重复:
再次使用 Seaborn绘制模型的[接收操作特性](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)或 ROC。 ROC 曲线通常用于根据分类器的真假阳性来了解分类器的输出。“ROC 曲线通常具有 Y 轴上的真阳性率和 X 轴上的假阳性率。” 因此,曲线的陡度以及中点线与曲线之间的空间很重要:你需要一条快速向上并越过直线的曲线。在我们的例子中,一开始就有误报,然后这条线正确地向上和重复:
![ROC](../images/ROC.png)
最后使用Scikit-learn的[`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score)来计算实际“曲线下面积”AUC
最后,使用 Scikit-learn 的[`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) 来计算实际“曲线下面积”AUC
```python
auc = roc_auc_score(y_test,y_scores[:,1])
print(auc)
```
结果是`0.6976998904709748`。 鉴于AUC的范围从0到1你需要一个高分因为预测100%正确的模型的AUC为1在这种情况下模型_相当不错_。
结果是 `0.6976998904709748`。 鉴于 AUC 的范围从 0 到 1你需要一个高分因为预测 100% 正确的模型的 AUC 为 1在这种情况下模型_相当不错_。
在以后的分类课程中,你将学习如何迭代以提高模型的分数。但是现在,恭喜!你已经完成了这些回归课程!
---
## 🚀挑战
关于逻辑回归,还有很多东西需要解开!但最好的学习方法是实验。找到适合此类分析的数据集并用它构建模型。你学到了什么?小贴士:尝试[Kaggle](https://kaggle.com)获取有趣的数据集。
关于逻辑回归,还有很多东西需要解开!但最好的学习方法是实验。找到适合此类分析的数据集并用它构建模型。你学到了什么?小贴士:尝试 [Kaggle](https://kaggle.com) 获取有趣的数据集。
## [课后测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/16/)
@ -288,6 +295,6 @@ print(auc)
阅读[斯坦福大学的这篇论文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)的前几页关于逻辑回归的一些实际应用。想想那些更适合于我们目前所研究的一种或另一种类型的回归任务的任务。什么最有效?
## 任务
## 任务
[重试此回归](../assignment.md)

@ -330,7 +330,7 @@ In a professional setting, you can see how good communication is necessary betwe
---
## 🚀 Challenge:
## 🚀 Challenge
Instead of working in a notebook and importing the model to the Flask app, you could train the model right within the Flask app! Try converting your Python code in the notebook, perhaps after your data is cleaned, to train the model from within the app on a route called `train`. What are the pros and cons of pursuing this method?

@ -330,7 +330,7 @@ Flask와 pickled 모델과 같이, 모델을 사용하는 이 방식은, 비교
---
## 🚀 도전:
## 🚀 도전
노트북에서 작성하고 Flask 앱에서 모델을 가져오는 대신, Flask 앱에서 바로 모델을 훈련할 수 있습니다! 어쩌면 데이터를 정리하고, 노트북에서 Python 코드로 변환해서, `train`이라고 불리는 라우터로 앱에서 모델을 훈련합니다. 이러한 방식을 추구했을 때 장점과 단점은 무엇인가요?

@ -1,58 +1,58 @@
# 构建使用ML模型的Web应用程序
# 构建使用 ML 模型的 Web 应用程序
在本课中你将在一个数据集上训练一个ML模型这个数据集来自世界各地过去一个世纪的UFO目击事件来源于[NUFORC的数据库](https://www.nuforc.org)。
在本课中,你将在一个数据集上训练一个 ML 模型,这个数据集来自世界各地:过去一个世纪的 UFO 目击事件,来源于 [NUFORC 的数据库](https://www.nuforc.org)。
你将学会:
- 如何“pickle”一个训练有素的模型
- 如何在Flask应用程序中使用该模型
- 如何在 Flask 应用程序中使用该模型
我们将继续使用notebook来清理数据和训练我们的模型但你可以进一步探索在web应用程序中使用模型。
我们将继续使用 notebook 来清理数据和训练我们的模型,但你可以进一步探索在 web 应用程序中使用模型。
为此你需要使用Flask构建一个web应用程序。
为此,你需要使用 Flask 构建一个 web 应用程序。
## [课前测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/17/)
## 构建应用程序
有多种方法可以构建Web应用程序以使用机器学习模型。你的web架构可能会影响你的模型训练方式。想象一下你在一家企业工作其中数据科学小组已经训练了他们希望你在应用程序中使用的模型。
有多种方法可以构建 Web 应用程序以使用机器学习模型。你的 web 架构可能会影响你的模型训练方式。想象一下,你在一家企业工作,其中数据科学小组已经训练了他们希望你在应用程序中使用的模型。
### 注意事项
### 注意事项
你需要问很多问题:
你需要问很多问题:
- **它是web应用程序还是移动应用程序**如果你正在构建移动应用程序或需要在物联网环境中使用模型,你可以使用[TensorFlow Lite](https://www.tensorflow.org/lite/)并在Android或iOS应用程序中使用该模型。
- **模型放在哪里?**在云端还是本地?
- **离线支持**。该应用程序是否必须离线工作?
- **使用什么技术来训练模型?**所选的技术可能会影响你需要使用的工具。
- **使用Tensor flow**。例如如果你正在使用TensorFlow训练模型则该生态系统提供了使用[TensorFlow.js](https://www.tensorflow.org/js/)转换TensorFlow模型以便在Web应用程序中使用的能力。
- **使用 PyTorch**。如果你使用[PyTorch](https://pytorch.org/)等库构建模型,则可以选择将其导出到[ONNX](https://onnx.ai/)(开放神经网络交换)格式,用于可以使用 [Onnx Runtime](https://www.onnxruntime.ai/)的JavaScript Web 应用程序。此选项将在Scikit-learn-trained模型的未来课程中进行探讨。
- **使用Lobe.ai或Azure自定义视觉**。如果你使用ML SaaS软件即服务系统例如[Lobe.ai](https://lobe.ai/)或[Azure Custom Vision](https://azure.microsoft.com/services/ cognitive-services/custom-vision-service/?WT.mc_id=academic-15963-cxa)来训练模型这种类型的软件提供了为许多平台导出模型的方法包括构建一个定制API供在线应用程序在云中查询。
- **它是 web 应用程序还是移动应用程序?** 如果你正在构建移动应用程序或需要在物联网环境中使用模型,你可以使用 [TensorFlow Lite](https://www.tensorflow.org/lite/) 并在 Android iOS 应用程序中使用该模型。
- **模型放在哪里?** 在云端还是本地?
- **离线支持**。该应用程序是否必须离线工作?
- **使用什么技术来训练模型?** 所选的技术可能会影响你需要使用的工具。
- **使用 TensorFlow**。例如,如果你正在使用 TensorFlow 训练模型,则该生态系统提供了使用 [TensorFlow.js](https://www.tensorflow.org/js/) 转换 TensorFlow 模型以便在Web应用程序中使用的能力。
- **使用 PyTorch**。如果你使用 [PyTorch](https://pytorch.org/) 等库构建模型,则可以选择将其导出到 [ONNX](https://onnx.ai/)(开放神经网络交换)格式,用于可以使用 [Onnx Runtime](https://www.onnxruntime.ai/)的JavaScript Web 应用程序。此选项将在 Scikit-learn-trained 模型的未来课程中进行探讨。
- **使用 Lobe.ai Azure 自定义视觉**。如果你使用 ML SaaS软件即服务系统例如 [Lobe.ai](https://lobe.ai/) [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-15963-cxa) 来训练模型这种类型的软件提供了为许多平台导出模型的方法包括构建一个定制A PI供在线应用程序在云中查询。
你还有机会构建一个完整的Flask Web应用程序该应用程序能够在 Web浏览器中训练模型本身。这也可以在JavaScript上下文中使用 TensorFlow.js来完成。
你还有机会构建一个完整的 Flask Web 应用程序,该应用程序能够在 Web浏览器中训练模型本身。这也可以在 JavaScript 上下文中使用 TensorFlow.js 来完成。
出于我们的目的既然我们一直在使用基于Python的notebook那么就让我们探讨一下将经过训练的模型从notebook导出为Python构建的web应用程序可读的格式所需要采取的步骤。
出于我们的目的,既然我们一直在使用基于 Python notebook那么就让我们探讨一下将经过训练的模型从 notebook 导出为 Python 构建的 web 应用程序可读的格式所需要采取的步骤。
## 工具
对于此任务你需要两个工具Flask和Pickle它们都在Python上运行。
对于此任务你需要两个工具Flask Pickle它们都在 Python 上运行。
✅ 什么是 [Flask](https://palletsprojects.com/p/flask/) Flask被其创建者定义为“微框架”它提供了使用Python和模板引擎构建网页的Web框架的基本功能。看看[本学习单元](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-15963-cxa)练习使用Flask构建应用程序。
✅ 什么是 [Flask](https://palletsprojects.com/p/flask/) Flask 被其创建者定义为“微框架”,它提供了使用 Python 和模板引擎构建网页的 Web 框架的基本功能。看看[本学习单元](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-15963-cxa)练习使用 Flask 构建应用程序。
✅ 什么是[Pickle](https://docs.python.org/3/library/pickle.html) Pickle🥒是一 Python模块用于序列化和反序列化 Python对象结构。当你“pickle”一个模型时你将其结构序列化或展平以在 Web上使用。小心pickle本质上不是安全的所以如果提示“un-pickle”文件请小心。生产的文件具有后缀`.pkl`。
✅ 什么是 [Pickle](https://docs.python.org/3/library/pickle.html) Pickle🥒是一 Python 模块,用于序列化和反序列化 Python 对象结构。当你“pickle”一个模型时你将其结构序列化或展平以在 Web 上使用。小心pickle 本质上不是安全的所以如果提示“un-pickle”文件请小心。生产的文件具有后缀 `.pkl`
## 练习 - 清理你的数据
在本课中,你将使用由 [NUFORC](https://nuforc.org)(国家 UFO 报告中心收集的80,000次UFO目击数据。这些数据对UFO目击事件有一些有趣的描述例如
在本课中,你将使用由 [NUFORC](https://nuforc.org)(国家 UFO 报告中心)收集的 80,000 UFO 目击数据。这些数据对 UFO 目击事件有一些有趣的描述,例如:
- **详细描述**。"一名男子从夜间照射在草地上的光束中出现,他朝德克萨斯仪器公司的停车场跑去"。
- **简短描述**。 “灯光追着我们”。
- **简短描述**。 “灯光追着我们”。
[ufos.csv](./data/ufos.csv)电子表格包括有关目击事件发生的`city`、`state`和`country`、对象的`shape`及其`latitude`和`longitude`的列。
[ufos.csv](./data/ufos.csv) 电子表格包括有关目击事件发生的 `city`、`state` `country`、对象的 `shape` 及其 `latitude` `longitude` 的列。
在包含在本课中的空白[notebook](notebook.ipynb)中:
在包含在本课中的空白 [notebook](notebook.ipynb) 中:
1. 像在之前的课程中一样导入`pandas`、`matplotlib`和`numpy`然后导入ufos电子表格。你可以查看一个示例数据集
1. 像在之前的课程中一样导入 `pandas`、`matplotlib` `numpy`,然后导入 ufos 电子表格。你可以查看一个示例数据集:
```python
import pandas as pd
@ -62,7 +62,7 @@
ufos.head()
```
2. 将ufos数据转换为带有新标题的小dataframe。检查`country`字段中的唯一值。
2. 将 ufos 数据转换为带有新标题的小 dataframe。检查 `country` 字段中的唯一值。
```python
ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
@ -70,7 +70,7 @@
ufos.Country.unique()
```
3. 现在你可以通过删除任何空值并仅导入1-60秒之间的目击数据来减少我们需要处理的数据量
3. 现在,你可以通过删除任何空值并仅导入 1-60 秒之间的目击数据来减少我们需要处理的数据量:
```python
ufos.dropna(inplace=True)
@ -80,9 +80,9 @@
ufos.info()
```
4. 导入Scikit-learn的`LabelEncoder`库,将国家的文本值转换为数字:
4. 导入 Scikit-learn `LabelEncoder` 库,将国家的文本值转换为数字:
✅ LabelEncoder按字母顺序编码数据
✅ LabelEncoder 按字母顺序编码数据
```python
from sklearn.preprocessing import LabelEncoder
@ -103,11 +103,11 @@
24 3.0 3 51.783333 -0.783333
```
## 练习 - 建立你的模型
## 练习 - 建立你的模型
现在,你可以通过将数据划分为训练和测试组来准备训练模型。
现在,你可以通过将数据划分为训练和测试组来准备训练模型。
1. 选择要训练的三个特征作为X向量y向量将是`Country` 你希望能够输入`Seconds`、`Latitude`和`Longitude`并获得要返回的国家/地区ID。
1. 选择要训练的三个特征作为 X 向量y 向量将是 `Country` 你希望能够输入 `Seconds`、`Latitude` `Longitude` 并获得要返回的国家/地区 ID。
```python
from sklearn.model_selection import train_test_split
@ -120,7 +120,7 @@
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
2. 使用逻辑回归训练模型:
2. 使用逻辑回归训练模型:
```python
from sklearn.metrics import accuracy_score, classification_report
@ -134,13 +134,13 @@
print('Accuracy: ', accuracy_score(y_test, predictions))
```
准确率还不错**(大约 95%**,不出所料,因为`Country`和`Latitude/Longitude`相关。
准确率还不错 **(大约 95%**,不出所料,因为 `Country` `Latitude/Longitude` 相关。
你创建的模型并不是非常具有革命性,因为你应该能够从其`Latitude`和`Longitude`推断出`Country`但是尝试从清理、导出的原始数据进行训练然后在web应用程序中使用此模型是一个很好的练习。
你创建的模型并不是非常具有革命性,因为你应该能够从其 `Latitude` `Longitude` 推断出 `Country`,但是,尝试从清理、导出的原始数据进行训练,然后在 web 应用程序中使用此模型是一个很好的练习。
## 练习 - “pickle”你的模型
现在是时候_pickle_你的模型了你可以在几行代码中做到这一点。一旦它是 _pickled_加载你的pickled模型并针对包含秒、纬度和经度值的示例数据数组对其进行测试
现在,是时候 _pickle_ 你的模型了!你可以在几行代码中做到这一点。一旦它是 _pickled_,加载你的 pickled 模型并针对包含秒、纬度和经度值的示例数据数组对其进行测试,
```python
import pickle
@ -151,15 +151,15 @@ model = pickle.load(open('ufo-model.pkl','rb'))
print(model.predict([[50,44,-12]]))
```
该模型返回**'3'**,这是英国的国家代码。👽
该模型返回 **'3'**,这是英国的国家代码。👽
## 练习 - 构建Flask应用程序
现在你可以构建一个Flask应用程序来调用你的模型并返回类似的结果但以一种更美观的方式。
1. 首先在你的 _ufo-model.pkl_ 文件所在的_notebook.ipynb_文件旁边创建一个名为**web-app**的文件夹。
1. 首先在你的 _ufo-model.pkl_ 文件所在的 _notebook.ipynb_ 文件旁边创建一个名为 **web-app** 的文件夹。
2. 在该文件夹中创建另外三个文件夹:**static**,其中有文件夹**css**和**templates`**。 你现在应该拥有以下文件和目录
2. 在该文件夹中创建另外三个文件夹:**static**,其中有文件夹 **css** **templates**。 你现在应该拥有以下文件和目录
```output
web-app/
@ -170,9 +170,9 @@ print(model.predict([[50,44,-12]]))
ufo-model.pkl
```
✅ 请参阅解决方案文件夹以查看已完成的应用程序
✅ 请参阅解决方案文件夹以查看已完成的应用程序
3. 在_web-app_文件夹中创建的第一个文件是**requirements.txt**文件。与JavaScript应用程序中的_package.json_一样此文件列出了应用程序所需的依赖项。在**requirements.txt**中添加以下几行:
3. 在 _web-app_ 文件夹中创建的第一个文件是 **requirements.txt** 文件。与 JavaScript 应用程序中的 _package.json_ 一样,此文件列出了应用程序所需的依赖项。在 **requirements.txt** 中添加以下几行:
```text
scikit-learn
@ -181,25 +181,25 @@ print(model.predict([[50,44,-12]]))
flask
```
4. 现在进入web-app文件夹
4. 现在,进入 web-app 文件夹:
```bash
cd web-app
```
5. 在你的终端中输入`pip install`以安装_reuirements.txt_中列出的库
5. 在你的终端中输入 `pip install`,以安装 _reuirements.txt_ 中列出的库:
```bash
pip install -r requirements.txt
```
6. 现在,你已准备好创建另外三个文件来完成应用程序:
6. 现在,你已准备好创建另外三个文件来完成应用程序:
1. 在根目录中创建**app.py**
2. 在_templates_目录中创建**index.html**。
3. 在_static/css_目录中创建**styles.css**。
1. 在根目录中创建 **app.py**
2. 在 _templates_ 目录中创建**index.html**。
3. 在 _static/css_ 目录中创建**styles.css**。
7. 使用一些样式构建_styles.css_文件
7. 使用一些样式构建 _styles.css_ 文件:
```css
body {
@ -233,7 +233,7 @@ print(model.predict([[50,44,-12]]))
}
```
8. 接下来构建_index.html_文件
8. 接下来,构建 _index.html_ 文件:
```html
<!DOCTYPE html>
@ -268,9 +268,9 @@ print(model.predict([[50,44,-12]]))
</html>
```
看看这个文件中的模板。请注意应用程序将提供的变量周围的“mustache”语法例如预测文本`{{}}`。还有一个表单可以将预测发布到`/predict`路由。
看看这个文件中的模板。请注意应用程序将提供的变量周围的“mustache”语法例如预测文本`{{}}`。还有一个表单可以将预测发布到 `/predict` 路由。
最后你已准备好构建使用模型和显示预测的python 文件:
最后,你已准备好构建使用模型和显示预测的 python 文件:
9. 在`app.py`中添加:
@ -309,38 +309,38 @@ print(model.predict([[50,44,-12]]))
app.run(debug=True)
```
> 💡 提示当你在使用Flask运行Web应用程序时添加 [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode)时你对应用程序所做的任何更改将立即反映,无需重新启动服务器。注意!不要在生产应用程序中启用此模式
> 💡 提示:当你在使用 Flask 运行 Web 应用程序时添加 [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode)时你对应用程序所做的任何更改将立即反映,无需重新启动服务器。注意!不要在生产应用程序中启用此模式
如果你运行`python app.py`或`python3 app.py` - 你的网络服务器在本地启动你可以填写一个简短的表格来回答你关于在哪里看到UFO的问题
如果你运行 `python app.py` `python3 app.py` - 你的网络服务器在本地启动,你可以填写一个简短的表格来回答你关于在哪里看到 UFO 的问题!
在此之前,先看一下`app.py`的实现:
在此之前,先看一下 `app.py` 的实现:
1. 首先,加载依赖项并启动应用程序。
2. 然后,导入模型。
3. 然后在home路由上渲染index.html。
3. 然后,在 home 路由上渲染 index.html。
在`/predict`路由上,当表单被发布时会发生几件事情:
`/predict` 路由上,当表单被发布时会发生几件事情:
1. 收集表单变量并转换为numpy数组。然后将它们发送到模型并返回预测。
2. 我们希望显示的国家/地区根据其预测的国家/地区代码重新呈现为可读文本并将该值发送回index.html以在模板中呈现。
1. 收集表单变量并转换为 numpy 数组。然后将它们发送到模型并返回预测。
2. 我们希望显示的国家/地区根据其预测的国家/地区代码重新呈现为可读文本,并将该值发送回 index.html 以在模板中呈现。
以这种方式使用模型包括Flask和pickled模型是相对简单的。最困难的是要理解数据是什么形状的这些数据必须发送到模型中才能得到预测。这完全取决于模型是如何训练的。有三个数据要输入以便得到一个预测。
以这种方式使用模型,包括 Flask pickled 模型,是相对简单的。最困难的是要理解数据是什么形状的,这些数据必须发送到模型中才能得到预测。这完全取决于模型是如何训练的。有三个数据要输入,以便得到一个预测。
在一个专业的环境中你可以看到训练模型的人和在Web或移动应用程序中使用模型的人之间的良好沟通是多么的必要。在我们的情况下只有一个人
在一个专业的环境中,你可以看到训练模型的人和在 Web 或移动应用程序中使用模型的人之间的良好沟通是多么的必要。在我们的情况下,只有一个人,你!
---
## 🚀 挑战:
## 🚀 挑战
你可以在Flask应用程序中训练模型而不是在notebook上工作并将模型导入Flask应用程序尝试在notebook中转换Python代码可能是在清除数据之后从应用程序中的一个名为`train`的路径训练模型。采用这种方法的利弊是什么?
你可以在 Flask 应用程序中训练模型,而不是在 notebook 上工作并将模型导入 Flask 应用程序!尝试在 notebook 中转换 Python 代码,可能是在清除数据之后,从应用程序中的一个名为 `train` 的路径训练模型。采用这种方法的利弊是什么?
## [课后测](https://white-water-09ec41f0f.azurestaticapps.net/quiz/18/)
## 复习与自学
## 复习与自学
有很多方法可以构建一个Web应用程序来使用ML模型。列出可以使用JavaScript或Python构建Web应用程序以利用机器学习的方法。考虑架构模型应该留在应用程序中还是存在于云中如果是后者你将如何访问它为应用的ML Web解决方案绘制架构模型。
有很多方法可以构建一个Web应用程序来使用ML模型。列出可以使用JavaScript或Python构建Web应用程序以利用机器学习的方法。考虑架构模型应该留在应用程序中还是存在于云中如果是后者你将如何访问它为应用的ML Web解决方案绘制架构模型。
## 任务
## 任务
[尝试不同的模型](../assignment.md)

Loading…
Cancel
Save