From 99b0466340214b2032d7bd9cf8ce1a3beb9105a3 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Fri, 3 Jun 2022 14:56:25 +0800 Subject: [PATCH 01/13] Add Traditional Chinese translation --- 1-Introduction/translations/README.zh-tw.md | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 1-Introduction/translations/README.zh-tw.md diff --git a/1-Introduction/translations/README.zh-tw.md b/1-Introduction/translations/README.zh-tw.md new file mode 100644 index 00000000..36359d0d --- /dev/null +++ b/1-Introduction/translations/README.zh-tw.md @@ -0,0 +1,22 @@ +# 機器學習入門 + +課程的本章節將為您介紹機器學習領域背後的基本概念、什麽是機器學習,並學習它的歷史以及曾為此做出貢獻的技術研究者們。讓我們一起開始探索機器學習的全新世界吧! + +![globe](../images/globe.jpg) +> 圖片由 Bill Oxford提供,來自 Unsplash + +### 課程安排 + +1. [機器學習簡介](../1-intro-to-ML/translations/README.zh-tw.md) +1. [機器學習的歷史](../2-history-of-ML/translations/README.zh-tw.md) +1. [機器學習中的公平性](../3-fairness/translations/README.zh-tw.md) +1. [機器學習技術](../4-techniques-of-ML/translations/README.zh-tw.md) +### 致謝 + +"機器學習簡介"由 [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) 及 [Jen Looper](https://twitter.com/jenlooper),共同傾 ♥️ 而作 + +"機器學習及人工智能歷史" 由 [Jen Looper](https://twitter.com/jenlooper) 及 [Amy Boyd](https://twitter.com/AmyKateNicho)傾 ♥️ 而作 + +"公平性與機器學習" 由 [Tomomi Imura](https://twitter.com/girliemac) 傾 ♥️ 而作 + +"機器學習的技術" 由 [Jen Looper](https://twitter.com/jenlooper) 及 [Chris Noring](https://twitter.com/softchris) 傾 ♥️ 而作 From 3f88c3d2db95ca897874f35e97b3b8c65010b71c Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:01:22 +0800 Subject: [PATCH 02/13] Add Traditional Chinese translation --- .../translations/README.zh-tw.md | 103 ++++++++++++++++++ .../translations/assignment.zh-tw.md | 9 ++ 2 files changed, 112 insertions(+) create mode 100644 1-Introduction/1-intro-to-ML/translations/README.zh-tw.md create mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md diff --git a/1-Introduction/1-intro-to-ML/translations/README.zh-tw.md b/1-Introduction/1-intro-to-ML/translations/README.zh-tw.md new file mode 100644 index 00000000..0d08153f --- /dev/null +++ b/1-Introduction/1-intro-to-ML/translations/README.zh-tw.md @@ -0,0 +1,103 @@ +# 機器學習介紹 + +[![機器學習,人工智能,深度學習-有什麽區別?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "機器學習,人工智能,深度學習-有什麽區別?") + +> 🎥 點擊上面的圖片觀看討論機器學習、人工智能和深度學習之間區別的視頻。 +## [課前測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/1/) + +### 介紹 + +歡迎來到這個經典機器學習的初學者課程!無論你是這個主題的新手,還是一個有經驗的 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。 + +- **按照這些視頻裏的講解配置你的計算機**。了解有關如何在此[視頻集](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.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 庫。 + +### 什麽是機器學習? + +術語「機器學習」是當今最流行和最常用的術語之一。 如果你對科技有某種程度的熟悉,那麽很可能你至少聽說過這個術語一次,無論你在哪個領域工作。然而,機器學習的機製對大多數人來說是一個謎。 對於機器學習初學者來說,這個主題有時會讓人感到不知所措。 因此,了解機器學習的實質是什麽,並通過實例一步一步地了解機器學習是很重要的。 + +![機器學習趨勢曲線](../images/hype.png) + +> 谷歌趨勢顯示了「機器學習」一詞最近的「趨勢曲線」 +我們生活在一個充滿迷人奧秘的宇宙中。像史蒂芬·霍金、阿爾伯特·愛因斯坦等偉大的科學家,以及更多的人,都致力於尋找有意義的信息,揭示我們周圍世界的奧秘。這就是人類學習的條件:一個人類的孩子在長大成人的過程中,一年又一年地學習新事物並揭示世界的結構。 + +孩子的大腦和感官感知到周圍的事實,並逐漸學習隱藏的生活模式,這有助於孩子製定邏輯規則來識別學習模式。人類大腦的學習過程使人類成為世界上最復雜的生物。不斷地學習,通過發現隱藏的模式,然後對這些模式進行創新,使我們能夠使自己在一生中變得越來越好。這種學習能力和進化能力與一個叫做[大腦可塑性](https://www.simplypsychology.org/brain-plasticity.html)的概念有關。從表面上看,我們可以在人腦的學習過程和機器學習的概念之間找到一些動機上的相似之處。 + +[人腦](https://www.livescience.com/29365-human-brain.html) 從現實世界中感知事物,處理感知到的信息,做出理性的決定,並根據環境執行某些行動。這就是我們所說的智能行為。當我們將智能行為過程的復製品編程到計算機上時,它被稱為人工智能 (AI)。 + +盡管這些術語可能會混淆,但機器學習 (ML) 是人工智能的一個重要子集。 **機器學習關註使用專門的算法來發現有意義的信息,並從感知數據中找到隱藏的模式,以證實理性的決策過程**。 + +![人工智能、機器學習、深度學習、數據科學](../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) +## 你將在本課程中學到什麽 + +在本課程中,我們將僅涵蓋初學者必須了解的機器學習的核心概念。 我們主要使用 Scikit-learn 來介紹我們所謂的「經典機器學習」,這是一個許多學生用來學習基礎知識的優秀庫。要理解更廣泛的人工智能或深度學習的概念,機器學習的基礎知識是必不可少的,所以我們想在這裏提供它。 + +在本課程中,你將學習: + +- 機器學習的核心概念 +- 機器學習的歷史 +- 機器學習和公平性 +- 回歸 +- 分類 +- 聚類 +- 自然語言處理 +- 時序預測 +- 強化學習 +- 機器學習的實際應用 +## 我們不會涵蓋的內容 + +- 深度學習 +- 神經網絡 +- AI + +為了獲得更好的學習體驗,我們將避免神經網絡、「深度學習」(使用神經網絡的多層模型構建)和人工智能的復雜性,我們將在不同的課程中討論這些問題。 我們還將提供即將推出的數據科學課程,以專註於這個更大領域的這一方面。 +## 為什麽要學習機器學習? + +從系統的角度來看,機器學習被定義為創建可以從數據中學習隱藏模式以幫助做出智能決策的自動化系統。 + +這種動機大致是受人腦如何根據它從外部世界感知到的數據來學習某些東西的啟發。 + +✅ 想一想為什麽企業想要嘗試使用機器學習策略而不是創建基於硬編碼的規則引擎。 + +### 機器學習的應用 + +機器學習的應用現在幾乎無處不在,就像我們的智能手機、互聯設備和其他系統產生的數據一樣無處不在。考慮到最先進的機器學習算法的巨大潛力,研究人員一直在探索其解決多維多學科現實問題的能力,並取得了巨大的積極成果。 + +**你可以在很多方面使用機器學習**: + +- 根據病人的病史或報告來預測患病的可能性。 +- 利用天氣數據預測天氣。 +- 理解文本的情感。 +- 檢測假新聞以阻止其傳播。 + +金融、經濟學、地球科學、太空探索、生物醫學工程、認知科學,甚至人文學科領域都采用機器學習來解決其領域中艱巨的、數據處理繁重的問題。 + +機器學習通過從真實世界或生成的數據中發現有意義的見解,自動化了模式發現的過程。事實證明,它在商業、健康和金融應用等方面具有很高的價值。 + +在不久的將來,由於機器學習的廣泛應用,了解機器學習的基礎知識將成為任何領域的人們的必修課。 + +--- +## 🚀 挑戰 + +在紙上或使用 [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)。 + +## 任務 + +[啟動並運行](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md b/1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md new file mode 100644 index 00000000..867eeacf --- /dev/null +++ b/1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md @@ -0,0 +1,9 @@ +# 啟動和運行 + +## 說明 + +在這個不評分的作業中,你應該溫習一下 Python,將 Python 環境能夠運行起來,並且可以運行 notebooks。 + +學習這個 [Python 學習路徑](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-15963-cxa),然後通過這些介紹性的視頻將你的系統環境設置好: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 From 8c6d9d435c2774abedb59acfd1fbb3a752220eb0 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:04:59 +0800 Subject: [PATCH 03/13] Add files via upload --- .../translations/README.zh-tw.md | 110 ++++++++++++++++++ .../translations/assignment.zh-tw.md | 12 ++ 2 files changed, 122 insertions(+) create mode 100644 1-Introduction/2-history-of-ML/translations/README.zh-tw.md create mode 100644 1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md diff --git a/1-Introduction/2-history-of-ML/translations/README.zh-tw.md b/1-Introduction/2-history-of-ML/translations/README.zh-tw.md new file mode 100644 index 00000000..58915f85 --- /dev/null +++ b/1-Introduction/2-history-of-ML/translations/README.zh-tw.md @@ -0,0 +1,110 @@ +# 機器學習的歷史 + +![機器學習歷史概述](../../../sketchnotes/ml-history.png) +> 作者 [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)人們一直在思考這些問題:本文討論了「思維機器」這一概念的歷史知識基礎。 + +## 主要發現 + +- 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 中,它用於檢測模式。 +- 1970 [反向傳播](https://wikipedia.org/wiki/Backpropagation)用於訓練[前饋神經網絡](https://wikipedia.org/wiki/Feedforward_neural_network)。 +- 1982 [循環神經網絡](https://wikipedia.org/wiki/Recurrent_neural_network) 是源自產生時間圖的前饋神經網絡的人工神經網絡。 + +✅ 做點調查。在 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 課程中進行探索。 + +## 1956: 達特茅斯夏季研究項目 + +「達特茅斯夏季人工智能研究項目是人工智能領域的一個開創性事件,」正是在這裏,人們創造了「人工智能」一詞([來源](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth))。 + +> 原則上,學習的每個方面或智能的任何其他特征都可以被精確地描述,以至於可以用機器來模擬它。 +首席研究員、數學教授 John McCarthy 希望「基於這樣一種猜想,即學習的每個方面或智能的任何其他特征原則上都可以如此精確地描述,以至於可以製造出一臺機器來模擬它。」 參與者包括該領域的另一位傑出人物 Marvin Minsky。 + +研討會被認為發起並鼓勵了一些討論,包括「符號方法的興起、專註於有限領域的系統(早期專家系統),以及演繹系統與歸納系統的對比。」([來源](https://wikipedia.org/wiki/Dartmouth_workshop))。 + +## 1956 - 1974: 「黃金歲月」 + +從 20 世紀 50 年代到 70 年代中期,樂觀情緒高漲,希望人工智能能夠解決許多問題。1967 年,Marvin Minsky 自信地說,「一代人之內...創造『人工智能』的問題將得到實質性的解決。」(Minsky,Marvin(1967),《計算:有限和無限機器》,新澤西州恩格伍德克利夫斯:Prentice Hall) + +自然語言處理研究蓬勃發展,搜索被提煉並變得更加強大,創造了「微觀世界」的概念,在這個概念中,簡單的任務是用簡單的語言指令完成的。 + +這項研究得到了政府機構的充分資助,在計算和算法方面取得了進展,並建造了智能機器的原型。其中一些機器包括: + +* [機器人 Shakey](https://wikipedia.org/wiki/Shakey_the_robot),他們可以「聰明地」操縱和決定如何執行任務。 + + ![Shakey, 智能機器人](../images/shakey.jpg) + > 1972 年的 Shakey +* Eliza,一個早期的「聊天機器人」,可以與人交談並充當原始的「治療師」。 你將在 NLP 課程中了解有關 Eliza 的更多信息。 + + ![Eliza, 機器人](../images/eliza.png) + > Eliza 的一個版本,一個聊天機器人 +* 「積木世界」是一個微觀世界的例子,在那裏積木可以堆疊和分類,並且可以測試教機器做出決策的實驗。 使用 [SHRDLU](https://wikipedia.org/wiki/SHRDLU) 等庫構建的高級功能有助於推動語言處理向前發展。 + + [![積木世界與 SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "積木世界與SHRDLU") + + > 🎥 點擊上圖觀看視頻: 積木世界與 SHRDLU +## 1974 - 1980: AI 的寒冬 + +到了 20 世紀 70 年代中期,很明顯製造「智能機器」的復雜性被低估了,而且考慮到可用的計算能力,它的前景被誇大了。資金枯竭,市場信心放緩。影響信心的一些問題包括: + +- **限製**。計算能力太有限了 +- **組合爆炸**。隨著對計算機的要求越來越高,需要訓練的參數數量呈指數級增長,而計算能力卻沒有平行發展。 +- **缺乏數據**。 缺乏數據阻礙了測試、開發和改進算法的過程。 +- **我們是否在問正確的問題?**。 被問到的問題也開始受到質疑。 研究人員開始對他們的方法提出批評: + - 圖靈測試受到質疑的方法之一是「中國房間理論」,該理論認為,「對數字計算機進行編程可能使其看起來能理解語言,但不能產生真正的理解。」 ([來源](https://plato.stanford.edu/entries/chinese-room/)) + - 將「治療師」ELIZA 這樣的人工智能引入社會的倫理受到了挑戰。 + +與此同時,各種人工智能學派開始形成。 在 [「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))。 + +這種類型的系統實際上是混合系統,部分由定義業務需求的規則引擎和利用規則系統推斷新事實的推理引擎組成。 + +在這個時代,神經網絡也越來越受到重視。 + +## 1987 - 1993: AI 的冷靜期 + +專業的專家系統硬件的激增造成了過於專業化的不幸後果。個人電腦的興起也與這些大型、專業化、集中化系統展開了競爭。計算機的平民化已經開始,它最終為大數據的現代爆炸鋪平了道路。 + +## 1993 - 2011 + +這個時代見證了一個新的時代,ML 和 AI 能夠解決早期由於缺乏數據和計算能力而導致的一些問題。數據量開始迅速增加,變得越來越廣泛,無論好壞,尤其是 2007 年左右智能手機的出現,計算能力呈指數級增長,算法也隨之發展。這個領域開始變得成熟,因為過去那些隨心所欲的日子開始具體化為一種真正的紀律。 + +## 現在 + +今天,機器學習和人工智能幾乎觸及我們生活的每一個部分。這個時代要求仔細了解這些算法對人類生活的風險和潛在影響。正如微軟的 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 在本次講座中討論深度學習的歷史 +--- +## 🚀挑戰 + +深入了解這些歷史時刻之一,並更多地了解它們背後的人。這裏有許多引人入勝的人物,沒有一項科學發現是在文化真空中創造出來的。你發現了什麽? + +## [課後測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/4/) + +## 復習與自學 + +以下是要觀看和收聽的節目: + +[這是 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的《人工智能史》") + +## 任務 + +[創建時間線](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md b/1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md new file mode 100644 index 00000000..f372e6ae --- /dev/null +++ b/1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md @@ -0,0 +1,12 @@ + +# 建立一個時間軸 + +## 說明 + +使用這個 [倉庫](https://github.com/Digital-Humanities-Toolkit/timeline-builder),創建一個關於算法、數學、統計學、人工智能、機器學習的某個方面或者可以綜合多個以上學科來講。你可以著重介紹某個人,某個想法,或者一個經久不衰的思想。請確保添加了多媒體元素在你的時間線中。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| ------------ | ---------------------------------- | ---------------------- | ------------------------------------------ | +| | 有一個用 GitHub page 展示的 timeline | 代碼還不完整並且沒有部署 | 時間線不完整,沒有經過充分的研究,並且沒有部署 | \ No newline at end of file From bc40939517dad29d0a16ea6fa8307c359e3409cb Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:09:45 +0800 Subject: [PATCH 04/13] Add Traditional Chinese translation --- .../3-fairness/translations/README.zh-tw.md | 209 ++++++++++++++++++ .../translations/assignment.zh-tw.md | 11 + 2 files changed, 220 insertions(+) create mode 100644 1-Introduction/3-fairness/translations/README.zh-tw.md create mode 100644 1-Introduction/3-fairness/translations/assignment.zh-tw.md diff --git a/1-Introduction/3-fairness/translations/README.zh-tw.md b/1-Introduction/3-fairness/translations/README.zh-tw.md new file mode 100644 index 00000000..56df3122 --- /dev/null +++ b/1-Introduction/3-fairness/translations/README.zh-tw.md @@ -0,0 +1,209 @@ +# 機器學習中的公平性 + +![機器學習中的公平性概述](../../../sketchnotes/ml-fairness.png) +> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) +## [課前測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/5/) + +## 介紹 + +在本課程中,你將開始了解機器學習如何影響我們的日常生活。截至目前,系統和模型已經參與到日常決策任務中,例如醫療診斷或發現欺詐。因此,這些模型運行良好,並為每個人提供公平的結果非常重要。 + +想象一下,當你用於構建這些模型的數據缺少某些人口統計信息時會發生什麽情況,例如種族、性別、政治觀點、宗教,或者不成比例地代表了這些人口統計信息。當模型的輸出被解釋為有利於某些人口統計學的時候呢?申請結果如何? + +在本課中,你將: + +- 提高你對機器學習中公平的重要性的認識。 +- 了解公平相關的危害。 +- 了解不公平評估和緩解措施。 + +## 先決條件 + +作為先決條件,請選擇「負責任的人工智能原則」學習路徑並觀看以下主題視頻: + +按照此[學習路徑](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-15963-cxa)了解有關負責任 AI 的更多信息 + +[![微軟對負責任人工智能的做法](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "微軟對負責任人工智能的做法") + +> 🎥 點擊上圖觀看視頻:微軟對負責任人工智能的做法 +## 數據和算法的不公平性 + +> 「如果你折磨數據足夠長的時間,它會坦白一切」 - Ronald Coase +這種說法聽起來很極端,但數據確實可以被操縱以支持任何結論。這種操縱有時可能是無意中發生的。作為人類,我們都有偏見,當你在數據中引入偏見時,往往很難有意識地知道。 + +保證人工智能和機器學習的公平性仍然是一項復雜的社會技術挑戰。這意味著它不能從純粹的社會或技術角度來解決。 + +### 與公平相關的危害 + +你說的不公平是什麽意思?「不公平」包括對一群人的負面影響或「傷害」,例如根據種族、性別、年齡或殘疾狀況定義的那些人。 + +與公平相關的主要危害可分為: + +- **分配**,如果一個性別或種族比另一個更受青睞。 +- **服務質量**。 如果你針對一種特定場景訓練數據,但實際情況要復雜得多,則會導致服務性能不佳。 +- **刻板印象**。 將給定的組與預先分配的屬性相關聯。 +- **詆毀**。 不公平地批評和標記某事或某人。 +- **代表性過高或過低**。這種想法是,某個群體在某個行業中不被看到,而這個行業一直在提升,這是造成傷害的原因。 + +讓我們來看看這些例子。 + +### 分配 + +考慮一個用於篩選貸款申請的假設系統。該系統傾向於選擇白人男性作為比其他群體更好的候選人。因此,某些申請人的貸款被拒。 + +另一個例子是一家大型公司開發的一種實驗性招聘工具,用於篩選應聘者。通過使用這些模型,該工具系統地歧視了一種性別,並被訓練為更喜歡與另一種性別相關的詞。這導致了對簡歷中含有「女子橄欖球隊」等字樣的候選人的不公正地對待。 + +✅ 做一點研究,找出一個真實的例子 + +### 服務質量 + +研究人員發現,與膚色較淺的男性相比,一些商業性的性別分類工具在膚色較深的女性圖像上的錯誤率更高。[參考](https://www.media.mit.edu/publications/gender-shades-intersectional-accuracy-disparities-in-commercial-gender-classification/) + +另一個臭名昭著的例子是洗手液分配器,它似乎無法感知皮膚黝黑的人。[參考](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) + +### 刻板印象 + +機器翻譯中存在著刻板的性別觀。在將「他是護士,她是醫生」翻譯成土耳其語時,遇到了一些問題。土耳其語是一種無性別的語言,它有一個代詞「o」來表示單數第三人稱,但把這個句子從土耳其語翻譯成英語,會產生「她是護士,他是醫生」這樣的刻板印象和錯誤。 + +![翻譯成土耳其語](../images/gender-bias-translate-en-tr.png) + +![翻譯成英語](../images/gender-bias-translate-tr-en.png) + +### 詆毀 + +一種圖像標記技術,臭名昭著地將深色皮膚的人的圖像錯誤地標記為大猩猩。錯誤的標簽是有害的,不僅僅是因為這個系統犯了一個錯誤,而且它還特別使用了一個長期以來被故意用來詆毀黑人的標簽。 + +[![AI: 我不是女人嗎?](https://img.youtube.com/vi/QxuyfWoVV98/0.jpg)](https://www.youtube.com/watch?v=QxuyfWoVV98 "AI, 我不是女人嗎?") +> 🎥 點擊上圖觀看視頻:AI,我不是女人嗎 - 一場展示 AI 種族主義詆毀造成的傷害的表演 +### 代表性過高或過低 + +有傾向性的圖像搜索結果就是一個很好的例子。在搜索男性比例等於或高於女性的職業的圖片時,比如工程或首席執行官,要註意那些更傾向於特定性別的結果。 + +![必應CEO搜索](../images/ceos.png) +> 在 Bing 上搜索「CEO」會得到非常全面的結果 +這五種主要類型的危害不是相互排斥的,一個單一的系統可以表現出一種以上的危害。此外,每個案例的嚴重程度各不相同。例如,不公平地給某人貼上罪犯的標簽比給形象貼上錯誤的標簽要嚴重得多。然而,重要的是要記住,即使是相對不嚴重的傷害也會讓人感到疏遠或被孤立,累積的影響可能會非常壓抑。 + +✅ **討論**:重溫一些例子,看看它們是否顯示出不同的危害。 + +| | 分配 | 服務質量 | 刻板印象 | 詆毀 | 代表性過高或過低 | +| ------------ | :---: | :------: | :------: | :---: | :--------------: | +| 自動招聘系統 | x | x | x | | x | +| 機器翻譯 | | | | | | +| 照片加標簽 | | | | | | + + +## 檢測不公平 + +給定系統行為不公平的原因有很多。例如,社會偏見可能會反映在用於訓練它們的數據集中。例如,過度依賴歷史數據可能會加劇招聘不公平。通過使用過去 10 年提交給公司的簡歷中的模式,該模型確定男性更合格,因為大多數簡歷來自男性,這反映了過去男性在整個科技行業的主導地位。 + +關於特定人群的數據不足可能是不公平的原因。例如,圖像分類器對於深膚色人的圖像具有較高的錯誤率,因為數據中沒有充分代表較深的膚色。 + +開發過程中做出的錯誤假設也會導致不公平。例如,旨在根據人臉圖像預測誰將犯罪的面部分析系統可能會導致破壞性假設。這可能會對錯誤分類的人造成重大傷害。 + +## 了解你的模型並建立公平性 + +盡管公平性的許多方面都沒有包含在量化公平性指標中,並且不可能從系統中完全消除偏見以保證公平性,但你仍然有責任盡可能多地檢測和緩解公平性問題。 + +當你使用機器學習模型時,通過確保模型的可解釋性以及評估和減輕不公平性來理解模型非常重要。 + +讓我們使用貸款選擇示例來作為分析案例,以確定每個因素對預測的影響程度。 + +## 評價方法 + +1. **識別危害(和好處)**。第一步是找出危害和好處。思考行動和決策如何影響潛在客戶和企業本身。 + +2. **確定受影響的群體**。一旦你了解了什麽樣的傷害或好處可能會發生,找出可能受到影響的群體。這些群體是按性別、種族或社會群體界定的嗎? + +3. **定義公平性度量**。最後,定義一個度量標準,這樣你就可以在工作中衡量一些東西來改善這種情況。 + +### 識別危害(和好處) + +與貸款相關的危害和好處是什麽?想想假陰性和假陽性的情況: + +**假陰性**(拒絕,但 Y=1)-在這種情況下,將拒絕有能力償還貸款的申請人。這是一個不利的事件,因為貸款的資源是從合格的申請人扣留。 + +**假陽性**(接受,但 Y=0)-在這種情況下,申請人確實獲得了貸款,但最終違約。因此,申請人的案件將被送往一個債務催收機構,這可能會影響他們未來的貸款申請。 + +### 確定受影響的群體 + +下一步是確定哪些群體可能受到影響。例如,在信用卡申請的情況下,模型可能會確定女性應獲得比共享家庭資產的配偶低得多的信用額度。因此,由性別定義的整個人口統計數據都會受到影響。 + +### 定義公平性度量 + +你已經確定了傷害和受影響的群體,在本例中,是按性別劃分的。現在,使用量化因子來分解它們的度量。例如,使用下面的數據,你可以看到女性的假陽性率最大,男性的假陽性率最小,而對於假陰性則相反。 + +✅ 在以後關於聚類的課程中,你將看到如何在代碼中構建這個「混淆矩陣」 + +| | 假陽性率 | 假陰性率 | 數量 | +| ---------- | -------- | -------- | ----- | +| 女性 | 0.37 | 0.27 | 54032 | +| 男性 | 0.31 | 0.35 | 28620 | +| 未列出性別 | 0.33 | 0.31 | 1266 | + + +這個表格告訴我們幾件事。首先,我們註意到數據中的未列出性別的人相對較少。數據是有偏差的,所以你需要小心解釋這些數字。 + +在本例中,我們有 3 個組和 2 個度量。當我們考慮我們的系統如何影響貸款申請人的客戶群時,這可能就足夠了,但是當你想要定義更多的組時,你可能需要將其提取到更小的摘要集。為此,你可以添加更多的度量,例如每個假陰性和假陽性的最大差異或最小比率。 + +✅ 停下來想一想:還有哪些群體可能會受到貸款申請的影響? + +## 減輕不公平 + +為了緩解不公平,探索模型生成各種緩解模型,並比較其在準確性和公平性之間的權衡,以選擇最公平的模型。 + +這個介紹性的課程並沒有深入探討算法不公平緩解的細節,比如後處理和減少方法,但是這裏有一個你可能想嘗試的工具。 + +### Fairlearn + +[Fairlearn](https://fairlearn.github.io/) 是一個開源 Python 包,可讓你評估系統的公平性並減輕不公平性。 + +該工具可幫助你評估模型的預測如何影響不同的組,使你能夠通過使用公平性和性能指標來比較多個模型,並提供一組算法來減輕二元分類和回歸中的不公平性。 + +- 通過查看 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). + +- 了解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 機器學習中的更多公平性評估場景。 + +--- +## 🚀 挑戰 + +為了防止首先引入偏見,我們應該: + +- 在系統工作人員中有不同的背景和觀點 + +- 獲取反映我們社會多樣性的數據集 + +- 開發更好的方法來檢測和糾正偏差 + +想想現實生活中的場景,在模型構建和使用中明顯存在不公平。我們還應該考慮什麽? + +## [課後測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/6/) +## 復習與自學 + +在本課中,你學習了機器學習中公平和不公平概念的一些基礎知識。 + +觀看本次研討會,深入探討以下主題: + +- 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 研究小組:[FATE:AI 中的公平、問責、透明和道德-微軟研究院](https://www.microsoft.com/research/theme/fate/) + +探索 Fairlearn 工具箱 + +[Fairlearn](https://fairlearn.org/) + +了解 Azure 機器學習的工具以確保公平性 + +- [Azure 機器學習](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-15963-cxa) + +## 任務 + +[探索 Fairlearn](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/3-fairness/translations/assignment.zh-tw.md b/1-Introduction/3-fairness/translations/assignment.zh-tw.md new file mode 100644 index 00000000..f065a4dd --- /dev/null +++ b/1-Introduction/3-fairness/translations/assignment.zh-tw.md @@ -0,0 +1,11 @@ +# 探索 Fairlearn + +## 說明 + +在這節課中,你了解了 Fairlearn,一個「開源的,社區驅動的項目,旨在幫助數據科學家們提高人工智能系統的公平性」。在這項作業中,探索 Fairlearn [筆記本](https://fairlearn.org/v0.6.2/auto_examples/index.html)中的一個例子,之後你可以用論文或者 ppt 的形式敘述你學習後的發現。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | --------- | -------- | ----------------- | +| | 提交了一篇論文或者ppt 關於討論 Fairlearn 系統、挑選運行的例子、和運行這個例子後所得出來的心得結論 | 提交了一篇沒有結論的論文 | 沒有提交論文 | \ No newline at end of file From 605b8144689205ccb45364a3ce141497bc89b317 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Fri, 3 Jun 2022 15:17:30 +0800 Subject: [PATCH 05/13] Add Traditional Chinese translation --- .../translations/README.zh-tw.md | 111 ++++++++++++++++++ .../translations/assignment.zh-tw.md | 11 ++ 2 files changed, 122 insertions(+) create mode 100644 1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md create mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md diff --git a/1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md b/1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md new file mode 100644 index 00000000..7f7daf08 --- /dev/null +++ b/1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md @@ -0,0 +1,111 @@ + +# 機器學習技術 + +構建、使用和維護機器學習模型及其使用的數據的過程與許多其他開發工作流程截然不同。 在本課中,我們將揭開該過程的神秘面紗,並概述你需要了解的主要技術。 你會: + +- 在高層次上理解支持機器學習的過程。 +- 探索基本概念,例如「模型」、「預測」和「訓練數據」。 + +## [課前測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/7/) +## 介紹 + +在較高的層次上,創建機器學習(ML)過程的工藝包括許多步驟: + +1. **決定問題**。 大多數機器學習過程都是從提出一個簡單的條件程序或基於規則的引擎無法回答的問題開始的。 這些問題通常圍繞基於數據集合的預測展開。 +2. **收集和準備數據**。為了能夠回答你的問題,你需要數據。數據的質量(有時是數量)將決定你回答最初問題的能力。可視化數據是這個階段的一個重要方面。此階段還包括將數據拆分為訓練和測試組以構建模型。 +3. **選擇一種訓練方法**。根據你的問題和數據的性質,你需要選擇如何訓練模型以最好地反映你的數據並對其進行準確預測。這是你的ML過程的一部分,需要特定的專業知識,並且通常需要大量的實驗。 +4. **訓練模型**。使用你的訓練數據,你將使用各種算法來訓練模型以識別數據中的模式。該模型可能會利用可以調整的內部權重來使數據的某些部分優於其他部分,從而構建更好的模型。 +5. **評估模型**。你使用收集到的集合中從未見過的數據(你的測試數據)來查看模型的性能。 +6. **參數調整**。根據模型的性能,你可以使用不同的參數或變量重做該過程,這些參數或變量控製用於訓練模型的算法的行為。 +7. **預測**。使用新輸入來測試模型的準確性。 + +## 要問什麽問題 + +計算機特別擅長發現數據中的隱藏模式。此實用程序對於對給定領域有疑問的研究人員非常有幫助,這些問題無法通過創建基於條件的規則引擎來輕松回答。例如,給定一項精算任務,數據科學家可能能夠圍繞吸煙者與非吸煙者的死亡率構建手工規則。 + +然而,當將許多其他變量納入等式時,ML模型可能會更有效地根據過去的健康史預測未來的死亡率。一個更令人愉快的例子可能是根據包括緯度、經度、氣候變化、與海洋的接近程度、急流模式等在內的數據對給定位置的4月份進行天氣預報。 + +✅ 這個關於天氣模型的[幻燈片](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf)為在天氣分析中使用機器學習提供了一個歷史視角。 + +## 預構建任務 + +在開始構建模型之前,你需要完成多項任務。要測試你的問題並根據模型的預測形成假設,你需要識別和配置多個元素。 + +### Data + +為了能夠確定地回答你的問題,你需要大量正確類型的數據。 此時你需要做兩件事: + +- **收集數據**。記住之前關於數據分析公平性的課程,小心收集數據。請註意此數據的來源、它可能具有的任何固有偏見,並記錄其來源。 +- **準備數據**。數據準備過程有幾個步驟。如果數據來自不同的來源,你可能需要整理數據並對其進行標準化。你可以通過各種方法提高數據的質量和數量,例如將字符串轉換為數字(就像我們在[聚類](../../../5-Clustering/1-Visualize/README.md)中所做的那樣)。你還可以根據原始數據生成新數據(正如我們在[分類](../../../4-Classification/1-Introduction/README.md)中所做的那樣)。你可以清理和編輯數據(就像我們在 [Web App](../../3-Web-App/README.md)課程之前所做的那樣)。最後,你可能還需要對其進行隨機化和打亂,具體取決於你的訓練技術。 + +✅ 在收集和處理你的數據後,花點時間看看它的形狀是否能讓你解決你的預期問題。正如我們在[聚類](../../../5-Clustering/1-Visualize/README.md)課程中發現的那樣,數據可能在你的給定任務中表現不佳! + +### 功能和目標 + +功能是數據的可測量屬性。在許多數據集中,它表示為標題為"日期""大小"或"顏色"的列。您的功能變量(通常在代碼中表示為 `X`)表示用於訓練模型的輸入變量。 + +目標就是你試圖預測的事情。目標通常表示為代碼中的 `y`,代表您試圖詢問數據的問題的答案:在 12 月,什麽顏色的南瓜最便宜?在舊金山,哪些街區的房地產價格最好?有時目標也稱為標簽屬性。 + +### 選擇特征變量 + +🎓 **特征選擇和特征提取** 構建模型時如何知道選擇哪個變量?你可能會經歷一個特征選擇或特征提取的過程,以便為性能最好的模型選擇正確的變量。然而,它們不是一回事:「特征提取是從基於原始特征的函數中創建新特征,而特征選擇返回特征的一個子集。」([來源](https://wikipedia.org/wiki/Feature_selection)) +### 可視化數據 + +數據科學家工具包的一個重要方面是能夠使用多個優秀的庫(例如 Seaborn 或 MatPlotLib)將數據可視化。直觀地表示你的數據可能會讓你發現可以利用的隱藏關聯。 你的可視化還可以幫助你發現偏見或不平衡的數據(正如我們在 [分類](../../../4-Classification/2-Classifiers-1/README.md)中發現的那樣)。 +### 拆分數據集 + +在訓練之前,你需要將數據集拆分為兩個或多個大小不等但仍能很好地代表數據的部分。 + +- **訓練**。這部分數據集適合你的模型進行訓練。這個集合構成了原始數據集的大部分。 +- **測試**。測試數據集是一組獨立的數據,通常從原始數據中收集,用於確認構建模型的性能。 +- **驗證**。驗證集是一個較小的獨立示例組,用於調整模型的超參數或架構,以改進模型。根據你的數據大小和你提出的問題,你可能不需要構建第三組(正如我們在[時間序列預測](../../../7-TimeSeries/1-Introduction/README.md)中所述)。 + +## 建立模型 + +使用你的訓練數據,你的目標是構建模型或數據的統計表示,並使用各種算法對其進行**訓練**。訓練模型將其暴露給數據,並允許它對其發現、驗證和接受或拒絕的感知模式做出假設。 + +### 決定一種訓練方法 + +根據你的問題和數據的性質,你將選擇一種方法來訓練它。逐步完成 [Scikit-learn的文檔](https://scikit-learn.org/stable/user_guide.html) - 我們在本課程中使用 - 你可以探索多種訓練模型的方法。 根據你的經驗,你可能需要嘗試多種不同的方法來構建最佳模型。你可能會經歷一個過程,在該過程中,數據科學家通過提供未見過的數據來評估模型的性能,檢查準確性、偏差和其他降低質量的問題,並為手頭的任務選擇最合適的訓練方法。 + +### 訓練模型 + +有了您的培訓數據,您就可以"適應"它來創建模型。您會註意到,在許多 ML 庫中,您會發現代碼"model.fit"-此時,您將功能變量作為一系列值(通常是`X`)和目標變量(通常是`y`)發送。 + +### 評估模型 + +訓練過程完成後(訓練大型模型可能需要多次叠代或「時期」),你將能夠通過使用測試數據來衡量模型的性能來評估模型的質量。此數據是模型先前未分析的原始數據的子集。 你可以打印出有關模型質量的指標表。 + +🎓 **模型擬合** + +在機器學習的背景下,模型擬合是指模型在嘗試分析不熟悉的數據時其底層功能的準確性。 + +🎓 **欠擬合**和**過擬合**是降低模型質量的常見問題,因為模型擬合得不夠好或太好。這會導致模型做出與其訓練數據過於緊密對齊或過於松散對齊的預測。 過擬合模型對訓練數據的預測太好,因為它已經很好地了解了數據的細節和噪聲。欠擬合模型並不準確,因為它既不能準確分析其訓練數據,也不能準確分析尚未「看到」的數據。 + +![過擬合模型 ](../images/overfitting.png) +> 作者 [Jen Looper](https://twitter.com/jenlooper) +## 參數調優 + +初始訓練完成後,觀察模型的質量並考慮通過調整其「超參數」來改進它。[在此文檔中](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-15963-cxa)閱讀有關該過程的更多信息。 + +## 預測 + +這是你可以使用全新數據來測試模型準確性的時刻。在「應用」ML設置中,你正在構建Web資源以在生產中使用模型,此過程可能涉及收集用戶輸入(例如按下按鈕)以設置變量並將其發送到模型進行推理,或者評估。 + +在這些課程中,你將了解如何使用這些步驟來準備、構建、測試、評估和預測—所有這些都是數據科學家的姿態,而且隨著你在成為一名「全棧」ML工程師的旅程中取得進展,你將了解更多。 + +--- + +## 🚀挑戰 + +畫一個流程圖,反映ML的步驟。在這個過程中,你認為自己現在在哪裏?你預測你在哪裏會遇到困難?什麽對你來說很容易? + +## [閱讀後測驗](https://white-water-09ec41f0f.azurestaticapps.net/quiz/8/) + +## 復習與自學 + +在線搜索對討論日常工作的數據科學家的采訪。 這是[其中之一](https://www.youtube.com/watch?v=Z3IjgbbCEfs)。 + +## 任務 + +[采訪一名數據科學家](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md b/1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md new file mode 100644 index 00000000..6d3d601c --- /dev/null +++ b/1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md @@ -0,0 +1,11 @@ +# 采訪一位數據科學家 + +## 說明 + +在你的公司、你所在的社群、或者在你的朋友和同學中,找到一位從事數據科學專業工作的人,與他或她交流一下。寫一篇關於他們工作日常的小短文(500字左右)。他們是專家,還是說他們是「全棧」開發者? + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | +| | 提交一篇清晰描述了職業屬性且字數符合規範的word文檔 | 提交的文檔職業屬性描述得不清晰或者字數不合規範 | 啥都沒有交 | \ No newline at end of file From e77fdac08b47fa3bec688d44f89012961d16be02 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:03:21 +0800 Subject: [PATCH 06/13] Add files via upload --- 2-Regression/translations/README.zh-tw.md | 36 +++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 2-Regression/translations/README.zh-tw.md diff --git a/2-Regression/translations/README.zh-tw.md b/2-Regression/translations/README.zh-tw.md new file mode 100644 index 00000000..5da4eb94 --- /dev/null +++ b/2-Regression/translations/README.zh-tw.md @@ -0,0 +1,36 @@ +# 機器學習中的回歸模型 + +## 本節主題: 北美南瓜價格的回歸模型 🎃 + +在北美,南瓜經常在萬聖節被刻上嚇人的鬼臉。讓我們來深入研究一下這種奇妙的蔬菜 + +![jack-o-lantern](../images/jack-o-lanterns.jpg) +> Foto oleh Beth Teutschmann di Unsplash + +## 你會學到什麽 + +這節的課程包括機器學習領域中的多種回歸模型。回歸模型可以明確多種變量間的_關系_。這種模型可以用來預測類似長度、溫度和年齡之類的值, 通過分析數據點來揭示變量之間的關系。 + +在本節的一系列課程中,你會學到線性回歸和邏輯回歸之間的區別,並且你將知道對於特定問題如何在這兩種模型中進行選擇 + +在這組課程中,你會準備好包括為管理筆記而設置VS Code、配置數據科學家常用的環境等機器學習的初始任務。你會開始上手Scikit-learn學習項目(一個機器學習的百科),並且你會以回歸模型為主構建起你的第一種機器學習模型 + +> 這裏有一些代碼難度較低但很有用的工具可以幫助你學習使用回歸模型。 試一下 [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-15963-cxa) + + +### Lessons + +1. [交易的工具](../1-Tools/translations/README.zh-tw.md) +2. [管理數據](../2-Data/translations/README.zh-tw.md) +3. [線性和多項式回歸](../3-Linear/translations/README.zh-tw.md) +4. [邏輯回歸](../4-Logistic/translations/README.zh-tw.md) + +--- + +### Credits + +"機器學習中的回歸" 由[Jen Looper](https://twitter.com/jenlooper)♥️ 撰寫 + +♥️ 測試的貢獻者: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) 和 [Ornella Altunyan](https://twitter.com/ornelladotcom) + +南瓜數據集受此啟發 [this project on Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) 並且其數據源自 [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) 由美國農業部上傳分享。我們根據種類添加了圍繞顏色的一些數據點。這些數據處在公共的域名上。 From eef52d5fa55d150cb37b0d7058eaa5b017a2d310 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:20:26 +0800 Subject: [PATCH 07/13] Add Traditional Chinese translation --- .../2-Data/translations/README.zh-tw.md | 203 ++++++++++++++++++ .../2-Data/translations/assignment.zh-tw.md | 9 + 2 files changed, 212 insertions(+) create mode 100644 2-Regression/2-Data/translations/README.zh-tw.md create mode 100644 2-Regression/2-Data/translations/assignment.zh-tw.md diff --git a/2-Regression/2-Data/translations/README.zh-tw.md b/2-Regression/2-Data/translations/README.zh-tw.md new file mode 100644 index 00000000..c3d92fde --- /dev/null +++ b/2-Regression/2-Data/translations/README.zh-tw.md @@ -0,0 +1,203 @@ +# 使用 Scikit-learn 構建回歸模型:準備和可視化數據 + +![數據可視化信息圖](../images/data-visualization.png) +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/11/) + +## 介紹 + +既然你已經設置了開始使用 Scikit-learn 處理機器學習模型構建所需的工具,你就可以開始對數據提出問題了。當你處理數據並應用ML解決方案時,了解如何提出正確的問題以正確釋放數據集的潛力非常重要。 + +在本課中,你將學習: + +- 如何為模型構建準備數據。 +- 如何使用 Matplotlib 進行數據可視化。 + +## 對你的數據提出正確的問題 + +你提出的問題將決定你將使用哪種類型的 ML 算法。你得到的答案的質量將在很大程度上取決於你的數據的性質。 + +查看為本課程提供的[數據](../data/US-pumpkins.csv)。你可以在 VS Code 中打開這個 .csv 文件。快速瀏覽一下就會發現有空格,還有字符串和數字數據的混合。還有一個奇怪的列叫做「Package」,其中的數據是「sacks」、「bins」和其他值的混合。事實上,數據有點亂。 + +事實上,得到一個完全準備好用於創建 ML 模型的開箱即用數據集並不是很常見。在本課中,你將學習如何使用標準 Python 庫準備原始數據集。你還將學習各種技術來可視化數據。 + +## 案例研究:「南瓜市場」 + +你將在 `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 數據分析」 Python Data Analysis 的意思)一個非常有用的工具,用於分析和準備南瓜數據。 + +### 首先,檢查遺漏的日期 + +你首先需要采取以下步驟來檢查缺少的日期: + +1. 將日期轉換為月份格式(這些是美國日期,因此格式為 `MM/DD/YYYY`)。 + +2. 將月份提取到新列。 + +在 Visual Studio Code 中打開 notebook.ipynb 文件,並將電子表格導入到新的 Pandas dataframe 中。 + +1. 使用 `head()` 函數查看前五行。 + + ```python + import pandas as pd + pumpkins = pd.read_csv('../../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ 使用什麽函數來查看最後五行? + +2. 檢查當前 dataframe 中是否缺少數據: + + ```python + pumpkins.isnull().sum() + ``` + + 有數據丟失,但可能對手頭的任務來說無關緊要。 + +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 列。 + +解決方案:取 `Low Price` 和 `High Price` 列的平均值來填充新的 Price 列,將 Date 列轉換成只顯示月份。幸運的是,根據上面的檢查,沒有丟失日期或價格的數據。 + +1. 要計算平均值,請添加以下代碼: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ 請隨意使用 `print(month)` 打印你想檢查的任何數據。 + +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 將向你展示一個幹凈整潔的數據集,你可以在此數據集上構建新的回歸模型。 + +### 但是等等!這裏有點奇怪 + +如果你看看 `Package`(包裝)一欄,南瓜有很多不同的配置。有的以 1 1/9 蒲式耳的尺寸出售,有的以 1/2 蒲式耳的尺寸出售,有的以每只南瓜出售,有的以每磅出售,有的以不同寬度的大盒子出售。 + +> 南瓜似乎很難統一稱重方式 + +深入研究原始數據,有趣的是,任何 `Unit of Sale` 等於「EACH」或「PER BIN」的東西也具有每英寸、每箱或「每個」的 `Package` 類型。南瓜似乎很難采用統一稱重方式,因此讓我們通過僅選擇 `Package` 列中帶有字符串「蒲式耳」的南瓜來過濾它們。 + +1. 在初始 .csv 導入下添加過濾器: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + 如果你現在打印數據,你可以看到你只獲得了 415 行左右包含按蒲式耳計算的南瓜的數據。 + +### 可是等等! 還有一件事要做 + +你是否註意到每行的蒲式耳數量不同?你需要對定價進行標準化,以便顯示每蒲式耳的定價,因此請進行一些數學計算以對其進行標準化。 + +1. 在創建 new_pumpkins dataframe 的代碼塊之後添加這些行: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ 根據 [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308),蒲式耳的重量取決於產品的類型,因為它是一種體積測量。「例如,一蒲式耳西紅柿應該重56 磅……葉子和蔬菜占據更多空間,重量更輕,所以一蒲式耳菠菜只有20磅。」 這一切都相當復雜!讓我們不要費心進行蒲式耳到磅的轉換,而是按蒲式耳定價。然而,所有這些對蒲式耳南瓜的研究表明,了解數據的性質是多麽重要! + +現在,你可以根據蒲式耳測量來分析每單位的定價。如果你再打印一次數據,你可以看到它是如何標準化的。 + +✅ 你有沒有註意到半蒲式耳賣的南瓜很貴?你能弄清楚為什麽嗎?提示:小南瓜比大南瓜貴得多,這可能是因為考慮到一個大的空心餡餅南瓜占用的未使用空間,每蒲式耳的南瓜要多得多。 + +## 可視化策略 + +數據科學家的部分職責是展示他們使用的數據的質量和性質。為此,他們通常會創建有趣的可視化或繪圖、圖形和圖表,以顯示數據的不同方面。通過這種方式,他們能夠直觀地展示難以發現的關系和差距。 + +可視化還可以幫助確定最適合數據的機器學習技術。例如,似乎沿著一條線的散點圖表明該數據是線性回歸練習的良好候選者。 + +一個在 Jupyter notebooks 中運行良好的數據可視化庫是 [Matplotlib](https://matplotlib.org/)(你在上一課中也看到過)。 + +> 在[這些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-15963-cxa)中獲得更多數據可視化經驗。 + +## 練習 - 使用 Matplotlib 進行實驗 + +嘗試創建一些基本圖形來顯示你剛剛創建的新 dataframe。基本線圖會顯示什麽? + +1. 在文件頂部導入 Matplotlib: + + ```python + import matplotlib.pyplot as plt + ``` + +2. 重新刷新以運行整個 notebook。 + +3. 在 notebook 底部,添加一個單元格以繪製數據: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![顯示價格與月份關系的散點圖](../images/scatterplot.png) + + 這是一個有用的圖嗎?有什麽讓你吃驚的嗎? + + 它並不是特別有用,因為它所做的只是在你的數據中顯示為給定月份的點數分布。 + +### 讓它有用 + +為了讓圖表顯示有用的數據,你通常需要以某種方式對數據進行分組。讓我們嘗試創建一個圖,其中 y 軸顯示月份,數據顯示數據的分布。 + +1. 添加單元格以創建分組柱狀圖: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![顯示價格與月份關系的柱狀圖](../images/barchart.png) + + 這是一個更有用的數據可視化!似乎表明南瓜的最高價格出現在 9 月和 10 月。這符合你的期望嗎?為什麽?為什麽不? + +--- + +## 🚀挑戰 + +探索 Matplotlib 提供的不同類型的可視化。哪種類型最適合回歸問題? + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/12/) + +## 復習與自學 + +請看一下可視化數據的多種方法。列出各種可用的庫,並註意哪些庫最適合給定類型的任務,例如 2D 可視化與 3D 可視化。你發現了什麽? + +## 任務 + +[探索可視化](./assignment.zh-tw.md) diff --git a/2-Regression/2-Data/translations/assignment.zh-tw.md b/2-Regression/2-Data/translations/assignment.zh-tw.md new file mode 100644 index 00000000..7eb2e9a5 --- /dev/null +++ b/2-Regression/2-Data/translations/assignment.zh-tw.md @@ -0,0 +1,9 @@ +# 探索數據可視化 + +有好幾個庫都可以進行數據可視化。用 matplotlib 和 seaborn 對本課中涉及的 Pumpkin 數據集創建一些數據可視化的圖標。並思考哪個庫更容易使用? + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | --------- | -------- | ----------------- | +| | 提交了含有兩種探索可視化方法的 notebook 工程文件 | 提交了只包含有一種探索可視化方法的 notebook 工程文件 | 沒提交 notebook 工程文件 | From 101d8e2c758a19094d5be7f5a964238a3abd1609 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:22:19 +0800 Subject: [PATCH 08/13] Add Traditional Chinese translation --- .../1-Tools/translations/README.zh-tw.md | 208 ++++++++++++++++++ .../1-Tools/translations/assignment.zh-tw.md | 14 ++ 2 files changed, 222 insertions(+) create mode 100644 2-Regression/1-Tools/translations/README.zh-tw.md create mode 100644 2-Regression/1-Tools/translations/assignment.zh-tw.md diff --git a/2-Regression/1-Tools/translations/README.zh-tw.md b/2-Regression/1-Tools/translations/README.zh-tw.md new file mode 100644 index 00000000..79b8aad1 --- /dev/null +++ b/2-Regression/1-Tools/translations/README.zh-tw.md @@ -0,0 +1,208 @@ +# 開始使用 Python 和 Scikit 學習回歸模型 + +![回歸](../../../sketchnotes/ml-regression.png) + +> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/9/) + +## 介紹 + +在這四節課中,你將了解如何構建回歸模型。我們將很快討論這些是什麽。但在你做任何事情之前,請確保你有合適的工具來開始這個過程! + +在本課中,你將學習如何: + +- 為本地機器學習任務配置你的計算機。 +- 使用 Jupyter notebooks。 +- 使用 Scikit-learn,包括安裝。 +- 通過動手練習探索線性回歸。 + +## 安裝和配置 + +[![在 Visual Studio Code 中使用 Python](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python with Visual Studio Code") + +> 🎥 單擊上圖觀看視頻:在 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) 可用於簡化某些用戶的設置。 + + 然而,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 開發。 + + > 通過學習這一系列的 [學習模塊](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-15963-cxa) 熟悉 Python + +3. **按照 [這些說明](https://scikit-learn.org/stable/install.html) 安裝 Scikit learn**。由於你需要確保使用 Python3,因此建議你使用虛擬環境。註意,如果你是在 M1 Mac 上安裝這個庫,在上面鏈接的頁面上有特別的說明。 + +4. **安裝 Jupyter Notebook**。你需要 [安裝 Jupyter 包](https://pypi.org/project/jupyter/)。 + +## 你的 ML 工作環境 + +你將使用 **notebooks** 開發 Python 代碼並創建機器學習模型。這種類型的文件是數據科學家的常用工具,可以通過後綴或擴展名 `.ipynb` 來識別它們。 + +Notebooks 是一個交互式環境,允許開發人員編寫代碼並添加註釋並圍繞代碼編寫文檔,這對於實驗或面向研究的項目非常有幫助。 + +### 練習 - 使用 notebook + +1. 在 Visual Studio Code 中打開 _notebook.ipynb_。 + + Jupyter 服務器將以 python3+啟動。你會發現 notebook 可以「運行」的區域、代碼塊。你可以通過選擇看起來像播放按鈕的圖標來運行代碼塊。 + +2. 選擇 `md` 圖標並添加一點 markdown,輸入文字 **# Welcome to your notebook**。 + + 接下來,添加一些 Python 代碼。 + +1. 在代碼塊中輸入 **print("hello notebook")**。 + +2. 選擇箭頭運行代碼。 + + 你應該看到打印的語句: + + ```output + hello notebook + ``` + +![打開 notebook 的 VS Code](../images/notebook.jpg) + +你可以為你的代碼添加註釋,以便 notebook 可以自描述。 + +✅ 想一想 web 開發人員的工作環境與數據科學家的工作環境有多大的不同。 + +## 啟動並運行 Scikit-learn + +現在 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 是一個開源機器學習庫,支持有監督和無監督學習。它還提供了各種模型擬合工具、數據預處理、模型選擇和評估以及許多其他實用程序。」 + +在本課程中,你將使用 Scikit-learn 和其他工具來構建機器學習模型,以執行我們所謂的「傳統機器學習」任務。我們特意避免了神經網絡和深度學習,因為它們在我們即將推出的「面向初學者的人工智能」課程中得到了更好的介紹。 + +Scikit-learn 使構建模型和評估它們的使用變得簡單。它主要側重於使用數字數據,並包含幾個現成的數據集用作學習工具。它還包括供學生嘗試的預建模型。讓我們探索加載預先打包的數據和使用內置的 estimator first ML 模型和 Scikit-learn 以及一些基本數據的過程。 + +## 練習 - 你的第一個 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)。 + +在與本課程相關的 _notebook.ipynb_ 文件中,通過點擊「垃圾桶」圖標清除所有單元格。 + +在本節中,你將使用一個關於糖尿病的小數據集,該數據集內置於 Scikit-learn 中以用於學習目的。想象一下,你想為糖尿病患者測試一種治療方法。機器學習模型可能會幫助你根據變量組合確定哪些患者對治療反應更好。即使是非常基本的回歸模型,在可視化時,也可能會顯示有助於組織理論臨床試驗的變量信息。 + +✅ 回歸方法有很多種,你選擇哪一種取決於你正在尋找的答案。如果你想預測給定年齡的人的可能身高,你可以使用線性回歸,因為你正在尋找**數值**。如果你有興趣了解某種菜肴是否應被視為素食主義者,那麽你正在尋找**類別分配**,以便使用邏輯回歸。稍後你將了解有關邏輯回歸的更多信息。想一想你可以對數據提出的一些問題,以及這些方法中的哪一個更合適。 + +讓我們開始這項任務。 + +### 導入庫 + +對於此任務,我們將導入一些庫: + +- **matplotlib**。這是一個有用的 [繪圖工具](https://matplotlib.org/),我們將使用它來創建線圖。 +- **numpy**。 [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是一個有用的庫,用於在 Python 中處理數字數據。 +- **sklearn**。這是 Scikit-learn 庫。 + +導入一些庫來幫助你完成任務。 + +1. 通過輸入以下代碼添加導入: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, 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 個特征變量,其中包括: + +- age:歲數 +- bmi:體重指數 +- bp:平均血壓 +- s1 tc:T 細胞(一種白細胞) + +✅ 該數據集包括「性別」的概念,作為對糖尿病研究很重要的特征變量。許多醫學數據集包括這種類型的二元分類。想一想諸如此類的分類如何將人群的某些部分排除在治療之外。 + +現在,加載 X 和 y 數據。 + +> 🎓 請記住,這是監督學習,我們需要一個命名為「y」的目標。 + +在新的代碼單元中,通過調用 `load_diabetes()` 加載糖尿病數據集。輸入 `return_X_y=True` 表示 `X` 將是一個數據矩陣,而`y`將是回歸目標。 + +1. 添加一些打印命令來顯示數據矩陣的形狀及其第一個元素: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + 作為響應返回的是一個元組。你正在做的是將元組的前兩個值分別分配給 `X` 和 `y`。了解更多 [關於元組](https://wikipedia.org/wiki/Tuple)。 + + 你可以看到這個數據有 442 個項目,組成了 10 個元素的數組: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ 稍微思考一下數據和回歸目標之間的關系。線性回歸預測特征 X 和目標變量 y 之間的關系。你能在文檔中找到糖尿病數據集的 [目標](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 嗎?鑒於該目標,該數據集展示了什麽? + +2. 接下來,通過使用 numpy 的 `newaxis` 函數將數據集的一部分排列到一個新數組中。我們將使用線性回歸根據它確定的模式在此數據中的值之間生成一條線。 + + ```python + X = X[:, np.newaxis, 2] + ``` + + ✅ 隨時打印數據以檢查其形狀。 + +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 訓練集對其進行訓練: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` 是一個你會在許多機器學習庫(例如 TensorFlow)中看到的函數 + +5. 然後,使用函數 `predict()`,使用測試數據創建預測。這將用於繪製數據組之間的線 + + ```python + y_pred = model.predict(X_test) + ``` + +6. 現在是時候在圖中顯示數據了。Matplotlib 是完成此任務的非常有用的工具。創建所有 X 和 y 測試數據的散點圖,並使用預測在模型的數據分組之間最合適的位置畫一條線。 + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.show() + ``` + + ![顯示糖尿病周圍數據點的散點圖](../images/scatterplot.png) + + ✅ 想一想這裏發生了什麽。一條直線穿過許多小數據點,但它到底在做什麽?你能看到你應該如何使用這條線來預測一個新的、未見過的數據點對應的 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://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-15963-cxa) 加深你的理解。 + +## 任務 + +[不同的數據集](./assignment.zh-tw.md) diff --git a/2-Regression/1-Tools/translations/assignment.zh-tw.md b/2-Regression/1-Tools/translations/assignment.zh-tw.md new file mode 100644 index 00000000..bd1d384c --- /dev/null +++ b/2-Regression/1-Tools/translations/assignment.zh-tw.md @@ -0,0 +1,14 @@ +# 用 Scikit-learn 實現一次回歸算法 + +## 說明 + +先看看 Scikit-learn 中的 [Linnerud 數據集](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) +這個數據集中有多個[目標變量(target)](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset),其中包含了三種運動(訓練數據)和三個生理指標(目標變量)組成,這些數據都是從一個健身俱樂部中的 20 名中年男子收集到的。 + +之後用自己的方式,創建一個可以描述腰圍和完成仰臥起坐個數關系的回歸模型。用同樣的方式對這個數據集中的其它數據也建立一下模型探究一下其中的關系。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| 需要提交一段能描述數據集中關系的文字 | 很好的描述了數據集中的關系 | 只能描述少部分的關系 | 啥都沒有提交 | From e343e4b7d95cf275f39a89ef1d6483323dfa0fee Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:23:13 +0800 Subject: [PATCH 09/13] Add Traditional Chinese translation --- .../3-Linear/translations/README.zh-tw.md | 342 ++++++++++++++++++ .../3-Linear/translations/assignment.zh-tw.md | 11 + 2 files changed, 353 insertions(+) create mode 100644 2-Regression/3-Linear/translations/README.zh-tw.md create mode 100644 2-Regression/3-Linear/translations/assignment.zh-tw.md diff --git a/2-Regression/3-Linear/translations/README.zh-tw.md b/2-Regression/3-Linear/translations/README.zh-tw.md new file mode 100644 index 00000000..a5a78ed4 --- /dev/null +++ b/2-Regression/3-Linear/translations/README.zh-tw.md @@ -0,0 +1,342 @@ +# 使用 Scikit-learn 構建回歸模型:兩種方式的回歸 + +![線性與多項式回歸信息圖](../images/linear-polynomial.png) + +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/13/) + +### 介紹 + +到目前為止,你已經通過從我們將在本課程中使用的南瓜定價數據集收集的樣本數據探索了什麽是回歸。你還使用 Matplotlib 對其進行了可視化。 + +現在你已準備好深入研究 ML 的回歸。 在本課中,你將詳細了解兩種類型的回歸:_基本線性回歸_ 和 _多項式回歸_,以及這些技術背後的一些數學知識。 + +> 在整個課程中,我們假設數學知識最少,並試圖讓來自其他領域的學生也能接觸到它,因此請使用筆記、🧮標註、圖表和其他學習工具以幫助理解。 + +### 前提 + +你現在應該熟悉我們正在檢查的南瓜數據的結構。你可以在本課的 _notebook.ipynb_ 文件中找到它。 在這個文件中,南瓜的價格顯示在一個新的 dataframe 中。確保可以在 Visual Studio Code 代碼的內核中運行這些 notebooks。 + +### 準備 + +提醒一下,你正在加載此數據以提出問題。 + +- 什麽時候買南瓜最好? +- 一箱微型南瓜的價格是多少? +- 我應該買半蒲式耳還是 1 1/9 蒲式耳? + +讓我們繼續深入研究這些數據。 + +在上一課中,你創建了一個 Pandas dataframe 並用原始數據集的一部分填充它,按蒲式耳標準化定價。但是,通過這樣做,你只能收集大約 400 個數據點,而且只能收集秋季月份的數據。 + +看看我們在本課隨附的 notebook 中預加載的數據。數據已預加載,並繪製了初始散點圖以顯示月份數據。也許我們可以通過更多地清理數據來獲得更多關於數據性質的細節。 + +## 線性回歸線 + +正如你在第 1 課中學到的,線性回歸練習的目標是能夠繪製一條線以便: + +- **顯示變量關系**。 顯示變量之間的關系 +- **作出預測**。 準確預測新數據點與該線的關系。 + +繪製這種類型的線是**最小二乘回歸**的典型做法。術語「最小二乘法」意味著將回歸線周圍的所有數據點平方,然後相加。理想情況下,最終和盡可能小,因為我們希望錯誤數量較少,或「最小二乘法」。 + +我們這樣做是因為我們想要對一條與所有數據點的累積距離最小的線進行建模。我們還在添加它們之前對這些項進行平方,因為我們關心的是它的大小而不是它的方向。 + +> **🧮 數學知識** +> +> 這條線稱為 _最佳擬合線_,可以用[一個等式](https://en.wikipedia.org/wiki/Simple_linear_regression)表示: +> +> ``` +> Y = a + bX +> ``` +> +> `X` 是「解釋變量」。`Y` 是「因變量」。直線的斜率是 `b`,`a` 是 y 軸截距,指的是 `X = 0` 時 `Y` 的值。 +> +>![計算斜率](../images/slope.png) +> +> 首先,計算斜率 `b`。作者 [Jen Looper](https://twitter.com/jenlooper) +> +> 換句話說,參考我們的南瓜數據的原始問題:「按月預測每蒲式耳南瓜的價格」,`X` 指的是價格,`Y` 指的是銷售月份。 +> +> ![完成等式](../images/calculation.png) +> +> 計算 Y 的值。如果你支付大約 4 美元,那一定是四月!作者 [Jen Looper](https://twitter.com/jenlooper) +> +> 計算直線的數學必須證明直線的斜率,這也取決於截距,或者當 `X = 0` 時 `Y` 所在的位置。 +> +> 你可以在 [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) 網站上觀察這些值的計算方法。另請訪問[這個最小二乘計算器](https://www.mathsisfun.com/data/least-squares-calculator.html)以觀察數字的值如何影響直線。 + +## 相關性 + +另一個需要理解的術語是給定 X 和 Y 變量之間的**相關系數**。使用散點圖,你可以快速可視化該系數。數據點散布在一條直線上的圖具有高相關性,但數據點散布在 X 和 Y 之間的圖具有低相關性。 + +一個好的線性回歸模型將是一個用最小二乘回歸法與直線回歸得到的高(更接近於 1)相關系數的模型。 + +✅ 運行本課隨附的 notebook 並查看 City to Price 散點圖。根據你對散點圖的視覺解釋,將南瓜銷售的城市與價格相關聯的數據似乎具有高相關性或低相關性? + +## 為回歸準備數據 + +現在你已經了解了本練習背後的數學原理,可以創建一個回歸模型,看看你是否可以預測哪個南瓜包裝的南瓜價格最優惠。為節日購買南瓜的人可能希望此信息能夠優化他們如何購買南瓜包裝。 + +由於你將使用 Scikit-learn,因此沒有理由手動執行此操作(盡管你可以!)。在課程 notebook 的主要數據處理塊中,從 Scikit-learn 添加一個庫以自動將所有字符串數據轉換為數字: + +```python +from sklearn.preprocessing import LabelEncoder + +new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) +``` + +如果你現在查看 new_pumpkins dataframe,你會看到所有字符串現在都是數字。這讓你更難閱讀,但對 Scikit-learn 來說更容易理解! + +現在,你可以對最適合回歸的數據做出更有根據的決策(不僅僅是基於觀察散點圖)。 + +嘗試在數據的兩點之間找到良好的相關性,以構建良好的預測模型。事實證明,城市和價格之間只有微弱的相關性: + +```python +print(new_pumpkins['City'].corr(new_pumpkins['Price'])) +0.32363971816089226 +``` + +然而,包裝和它的價格之間有更好的相關性。這是有道理的,對吧?通常,農產品箱越大,價格越高。 + +```python +print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) +0.6061712937226021 +``` + +對這些數據提出的一個很好的問題是:「我可以期望給定的南瓜包裝的價格是多少?」 + +讓我們建立這個回歸模型 + +## 建立線性模型 + +在構建模型之前,再對數據進行一次整理。刪除任何空數據並再次檢查數據的樣子。 + +```python +new_pumpkins.dropna(inplace=True) +new_pumpkins.info() +``` + +然後,從這個最小集合創建一個新的 dataframe 並將其打印出來: + +```python +new_columns = ['Package', 'Price'] +lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') + +lin_pumpkins +``` + +```output + Package Price +70 0 13.636364 +71 0 16.363636 +72 0 16.363636 +73 0 15.454545 +74 0 13.636364 +... ... ... +1738 2 30.000000 +1739 2 28.750000 +1740 2 25.750000 +1741 2 24.000000 +1742 2 24.000000 +415 rows × 2 columns +``` + +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`。 + +2. 接下來,開始回歸模型構建例程: + + ```python + from sklearn.linear_model import LinearRegression + from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error + from sklearn.model_selection import train_test_split + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + lin_reg = LinearRegression() + lin_reg.fit(X_train,y_train) + + pred = lin_reg.predict(X_test) + + accuracy_score = lin_reg.score(X_train,y_train) + print('Model Accuracy: ', accuracy_score) + ``` + + 因為相關性不是特別好,所以生成的模型不是非常準確。 + + ```output + Model Accuracy: 0.3315342327998987 + ``` + +3. 你可以將過程中繪製的線條可視化: + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, pred, color='blue', linewidth=3) + + plt.xlabel('Package') + plt.ylabel('Price') + + plt.show() + ``` + + ![散點圖顯示包裝與價格的關系](../images/linear.png) + +4. 針對假設的品種測試模型: + + ```python + lin_reg.predict( np.array([ [2.75] ]) ) + ``` + + 這個神話般的品種的價格是: + + ```output + array([[33.15655975]]) + ``` + +如果回歸線的邏輯成立,這個數字是有意義的。 + +🎃 恭喜你,你剛剛創建了一個模型,可以幫助預測幾個南瓜品種的價格。你的節日南瓜地會很漂亮的。但是你可以創造一個更好的模型! + +## 多項式回歸 + +另一種線性回歸是多項式回歸。雖然有時變量之間存在線性關系——南瓜的體積越大,價格就越高——但有時這些關系不能繪製成平面或直線。 + +✅ 這裏有可以使用多項式回歸數據的[更多示例](https://online.stat.psu.edu/stat501/lesson/9/9.8) + +再看一下上圖中品種與價格之間的關系。這個散點圖看起來是否應該用一條直線來分析?也許不是。在這種情況下,你可以嘗試多項式回歸。 + +✅ 多項式是可能由一個或多個變量和系數組成的數學表達式 + +多項式回歸創建一條曲線以更好地擬合非線性數據。 + +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') + + poly_pumpkins + ``` + +可視化 dataframe 中數據之間相關性的一種好方法是將其顯示在「coolwarm」圖表中: + +2. 使用 `Background_gradient()` 方法和 `coolwarm` 作為其參數值: + + ```python + corr = poly_pumpkins.corr() + corr.style.background_gradient(cmap='coolwarm') + ``` + + 這段代碼創建了一個熱圖: + ![顯示數據相關性的熱圖](../images/heatmap.png) + +查看此圖表,你可以直觀地看到 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)。 創建了一個「管道」,它是一個估計器鏈。在這種情況下,管道包括多項式特征或形成非線性路徑的預測。 + +1. 構建 X 和 y 列: + + ```python + X=poly_pumpkins.iloc[:,3:4].values + y=poly_pumpkins.iloc[:,4:5].values + ``` + +2. 通過調用 `make_pipeline()` 方法創建管道: + + ```python + from sklearn.preprocessing import PolynomialFeatures + from sklearn.pipeline import make_pipeline + + pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + pipeline.fit(np.array(X_train), y_train) + + y_pred=pipeline.predict(X_test) + ``` + +### 創建序列 + +此時,你需要使用_排序好的_數據創建一個新的 dataframe ,以便管道可以創建序列。 + +添加以下代碼: + + ```python + df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) + df.sort_values(by='x',inplace = True) + points = pd.DataFrame(df).to_numpy() + + plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) + plt.xlabel('Package') + plt.ylabel('Price') + plt.scatter(X,y, color="black") + plt.show() + ``` + +你通過調用 `pd.DataFrame` 創建了一個新的 dataframe。然後通過調用 `sort_values()` 對值進行排序。最後你創建了一個多項式圖: + +![顯示包裝與價格關系的多項式圖](../images/polynomial.png) + +你可以看到更適合你的數據的曲線。 + +讓我們檢查模型的準確性: + + ```python + accuracy_score = pipeline.score(X_train,y_train) + print('Model Accuracy: ', accuracy_score) + ``` + + 瞧! + + ```output + Model Accuracy: 0.8537946517073784 + ``` + +這樣好多了!試著預測一個價格: + +### 做個預測 + +我們可以輸入一個新值並得到一個預測嗎? + +調用 `predict()` 進行預測: + + ```python + pipeline.predict( np.array([ [2.75] ]) ) + ``` + + 你會得到這樣的預測: + + ```output + array([[46.34509342]]) + ``` + +參照圖像,這確實有道理!而且,如果這是一個比前一個更好的模型,看同樣的數據,你需要為這些更昂貴的南瓜做好預算! + +🏆 幹得不錯!你在一節課中創建了兩個回歸模型。在回歸的最後一節中,你將了解邏輯回歸以確定類別。 + +--- + +## 🚀挑戰 + +在此 notebook 中測試幾個不同的變量,以查看相關性與模型準確性的對應關系。 + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/) + +## 復習與自學 + +在本課中,我們學習了線性回歸。還有其他重要的回歸類型。了解 Stepwise、Ridge、Lasso 和 Elasticnet 技術。學習更多信息的好課程是 [斯坦福統計學習課程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) + +## 任務 + +[構建模型](./assignment.zh-tw.md) diff --git a/2-Regression/3-Linear/translations/assignment.zh-tw.md b/2-Regression/3-Linear/translations/assignment.zh-tw.md new file mode 100644 index 00000000..dd6a9afc --- /dev/null +++ b/2-Regression/3-Linear/translations/assignment.zh-tw.md @@ -0,0 +1,11 @@ +# 創建自己的回歸模型 + +## 說明 + +在這節課中你學到了如何用線性回歸和多項式回歸建立一個模型。利用這些只是,找到一個你感興趣的數據集或者是 Scikit-learn 內置的數據集來建立一個全新的模型。用你的 notebook 來解釋為什麽用了這種技術來對這個數據集進行建模,並且證明出你的模型的準確度。如果它沒你想象中準確,請思考一下並解釋一下原因。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | +| | 提交了一個完整的 notebook 工程文件,其中包含了解集,並且可讀性良好 | 不完整的解集 | 解集是有缺陷或者有錯誤的 | From 283fdd49fe02f77ed3ba3dcd2bcc38f046d509b2 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:23:53 +0800 Subject: [PATCH 10/13] Add files via upload --- .../4-Logistic/translations/README.zh-tw.md | 301 ++++++++++++++++++ .../translations/assignment.zh-tw.md | 11 + 2 files changed, 312 insertions(+) create mode 100644 2-Regression/4-Logistic/translations/README.zh-tw.md create mode 100644 2-Regression/4-Logistic/translations/assignment.zh-tw.md diff --git a/2-Regression/4-Logistic/translations/README.zh-tw.md b/2-Regression/4-Logistic/translations/README.zh-tw.md new file mode 100644 index 00000000..b8789d35 --- /dev/null +++ b/2-Regression/4-Logistic/translations/README.zh-tw.md @@ -0,0 +1,301 @@ +# 邏輯回歸預測分類 + +![邏輯與線性回歸信息圖](../images/logistic-linear.png) + +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/15/) + +## 介紹 + +在關於回歸的最後一課中,我們將學習邏輯回歸,這是經典的基本技術之一。你可以使用此技術來發現預測二元分類的模式。這是不是巧克力糖?這種病會傳染嗎?這個顧客會選擇這個產品嗎? + +在本課中,你將學習: + +- 用於數據可視化的新庫 +- 邏輯回歸技術 + +✅ 在此[學習模塊](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-15963-cxa) 中加深你對使用此類回歸的理解 + +## 前提 + +使用南瓜數據後,我們現在對它已經足夠熟悉了,可以意識到我們可以使用一個二元類別:`Color`。 + +讓我們建立一個邏輯回歸模型來預測,給定一些變量,_給定的南瓜可能是什麽顏色_(橙色🎃或白色👻)。 + +> 為什麽我們在關於回歸的課程分組中談論二元分類? 只是為了語言上的方便,因為邏輯回歸[真的是一種分類方法](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression),盡管是基於線性的。我們將在在下一課組中了解對數據進行分類的其他方法。 + +## 定義問題 + +出於我們的目的,我們將其表示為二進製:「橙色」或「非橙色」。我們的數據集中還有一個「條紋」類別,但它的實例很少,所以我們不會使用它。無論如何,一旦我們從數據集中刪除空值,它就會消失。 + +> 🎃 有趣的是,我們有時稱白南瓜為鬼南瓜。他們不是很容易雕刻,所以它們不像橙色的那麽受歡迎,但它們看起來很酷! + +## 關於邏輯回歸 + +邏輯回歸在一些重要方面與你之前了解的線性回歸不同。 + +### 二元分類 + +邏輯回歸不提供與線性回歸相同的功能。前者提供關於二元類別(「橙色或非橙色」)的預測,而後者能夠預測連續值,例如,給定南瓜的起源和收獲時間,_其價格將上漲多少_。 + +![南瓜分類模型](../images/pumpkin-classifier.png) +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### 其他分類 + +還有其他類型的邏輯回歸,包括多項和有序: + +- **多項**,涉及多個類別 - 「橙色、白色和條紋」。 +- **有序**,涉及有序類別,如果我們想對我們的結果進行邏輯排序非常有用,例如我們的南瓜按有限數量的大小(mini、sm、med、lg、xl、xxl)排序。 + +![多項式與有序回歸](../images/multinomial-ordinal.png) +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### 仍然是線性的 + +盡管這種類型的回歸都是關於「類別預測」的,但當因變量(顏色)和其他自變量(數據集的其余部分,如城市名稱和大小)之間存在明顯的線性關系時,它仍然效果最好。最好了解一下這些變量是否存在線性劃分。 + +### 變量不必相關 + +還記得線性回歸如何更好地處理更多相關變量嗎?邏輯回歸是相反的——變量不必對齊。這適用於相關性較弱的數據。 + +### 你需要大量幹凈的數據 + +如果使用更多數據,邏輯回歸將給出更準確的結果;我們的小數據集對於這項任務不是最佳的,請記住這一點。 + +✅ 考慮適合邏輯回歸的數據類型 + +## 練習 - 整理數據 + +首先,稍微清理一下數據,刪除空值並僅選擇其中一些列: + +1. 添加以下代碼: + + ```python + from sklearn.preprocessing import LabelEncoder + + new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] + + new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) + + new_pumpkins.dropna(inplace=True) + + new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) + ``` + + 你可以隨時查看新的數據幀: + + ```python + new_pumpkins.info + ``` + +### 可視化 - 並列網格 + +到現在為止,你已經再次使用南瓜數據加載了 [starter notebook](./notebook.ipynb) 並對其進行了清理,以保留包含一些變量(包括 `Color`)的數據集。讓我們使用不同的庫來可視化 notebook 中的數據幀:[Seaborn](https://seaborn.pydata.org/index.html),它是基於我們之前使用的 Matplotlib 構建的。 + +Seaborn 提供了一些巧妙的方法來可視化你的數據。例如,你可以比較並列網格中每個點的數據分布。 + +1. 通過實例化一個 `PairGrid`,使用我們的南瓜數據 `new_pumpkins`,然後調用 `map()` 來創建這樣一個網格: + + ```python + import seaborn as sns + + g = sns.PairGrid(new_pumpkins) + g.map(sns.scatterplot) + ``` + + ![可視化數據網格](../images/grid.png) + + 通過並列觀察數據,你可以看到顏色數據與其他列的關系。 + + ✅ 鑒於此散點圖網格,你可以設想哪些有趣的探索? + +### 使用分類散點圖 + +由於顏色是一個二元類別(橙色或非橙色),它被稱為「分類數據」,需要一種更[專業的方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)來可視化。還有其他方法可以可視化此類別與其他變量的關系。 + +你可以使用 Seaborn 圖並列可視化變量。 + +1. 嘗試使用「分類散點」圖來顯示值的分布: + + ```python + sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) + ``` + + ![分類散點圖可視化數據](../images/swarm.png) + +### 小提琴圖 + +「小提琴」類型的圖很有用,因為你可以輕松地可視化兩個類別中數據的分布方式。小提琴圖不適用於較小的數據集,因為分布顯示得更「平滑」。 + +1. 作為參數 `x=Color`、`kind="violin"` 並調用 `catplot()`: + + ```python + sns.catplot(x="Color", y="Item Size", + kind="violin", data=new_pumpkins) + ``` + + ![小提琴圖](../images/violin.png) + + ✅ 嘗試使用其他變量創建此圖和其他 Seaborn 圖。 + +現在我們已經了解了顏色的二元類別與更大的尺寸組之間的關系,讓我們探索邏輯回歸來確定給定南瓜的可能顏色。 + +> **🧮 數學知識** +> +> 還記得線性回歸如何經常使用普通最小二乘法來得出一個值嗎?邏輯回歸依賴於使用[sigmoid 函數](https://wikipedia.org/wiki/Sigmoid_function) 的「最大似然」概念。繪圖上的「Sigmoid 函數」看起來像「S」形。它接受一個值並將其映射到0和1之間的某個位置。它的曲線也稱為「邏輯曲線」。它的公式如下所示: +> +> ![邏輯函數](../images/sigmoid.png) +> +> 其中 sigmoid 的中點位於 x 的 0 點,L 是曲線的最大值,k 是曲線的陡度。如果函數的結果大於 0.5,則所討論的標簽將被賦予二進製選擇的類「1」。否則,它將被分類為「0」。 + +## 建立你的模型 + +在 Scikit-learn 中構建模型來查找這些二元分類非常簡單。 + +1. 選擇要在分類模型中使用的變量,並調用 `train_test_split()` 拆分訓練集和測試集: + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Origin','Item Size','Variety','City Name','Package'] + + X = new_pumpkins[Selected_features] + y = new_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. 現在你可以訓練你的模型,用你的訓練數據調用 `fit()`,並打印出它的結果: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + + 看看你的模型的記分板。考慮到你只有大約 1000 行數據,這還不錯: + + ```output + precision recall f1-score support + + 0 0.85 0.95 0.90 166 + 1 0.38 0.15 0.22 33 + + accuracy 0.82 199 + macro avg 0.62 0.55 0.56 199 + weighted avg 0.77 0.82 0.78 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 0 1 0 0 0 1 0] + ``` + +## 通過混淆矩陣更好地理解 + +雖然你可以通過獲得記分板報告[條目](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)把上面的項目打印出來,通過使用[混淆矩陣](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)可以更容易地理解你的模型,幫助我們了解模型的性能。 + +> 🎓 「[混淆矩陣](https://wikipedia.org/wiki/Confusion_matrix)」(或「誤差矩陣」)是一個表格,用於表示模型的真假陽性和假陰性,從而衡量預測的準確性。 + +1. 要使用混淆指標,請調用 `confusin_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + 看看你的模型的混淆矩陣: + + ```output + array([[162, 4], + [ 33, 0]]) + ``` + +這裏發生了什麽?假設我們的模型被要求對兩個二元類別之間的項目進行分類,即類別「南瓜」和類別「非南瓜」。 + +- 如果你的模型將某物預測為南瓜並且它實際上屬於「南瓜」類別,我們將其稱為真陽性,由左上角的數字顯示。 +- 如果你的模型預測某物不是南瓜,並且它實際上屬於「南瓜」類別,我們將其稱為假陽性,如右上角的數字所示。 +- 如果你的模型將某物預測為南瓜並且它實際上屬於「非南瓜」類別,我們將其稱為假陰性,由左下角的數字顯示。 +- 如果你的模型預測某物不是南瓜,並且它實際上屬於「非南瓜」類別,我們將其稱為真陰性,如右下角的數字所示。 + +正如你可能已經猜到的那樣,最好有更多的真陽性和真陰性以及較少的假陽性和假陰性,這意味著模型性能更好。 + +✅ Q:根據混淆矩陣,模型怎麽樣? A:還不錯;有很多真陽性,但也有一些假陰性。 + +讓我們借助混淆矩陣對TP/TN和FP/FN的映射,重新審視一下我們之前看到的術語: + +🎓 準確率:TP/(TP + FP) 檢索實例中相關實例的分數(例如,哪些標簽標記得很好) + +🎓 召回率: TP/(TP + FN) 檢索到的相關實例的比例,無論是否標記良好 + +🎓 F1分數: (2 * 準確率 * 召回率)/(準確率 + 召回率) 準確率和召回率的加權平均值,最好為1,最差為0 + +🎓 Support:檢索到的每個標簽的出現次數 + +🎓 準確度:(TP + TN)/(TP + TN + FP + FN) 為樣本準確預測的標簽百分比。 + +🎓 宏平均值: 計算每個標簽的未加權平均指標,不考慮標簽不平衡。 + +🎓 加權平均值:計算每個標簽的平均指標,通過按支持度(每個標簽的真實實例數)加權來考慮標簽不平衡。 + +✅ 如果你想讓你的模型減少假陰性的數量,你能想出應該關註哪個指標嗎? + +## 可視化該模型的 ROC 曲線 + +這不是一個糟糕的模型;它的準確率在 80% 範圍內,因此理想情況下,你可以使用它來預測給定一組變量的南瓜顏色。 + +讓我們再做一個可視化來查看所謂的「ROC」分數 + +```python +from sklearn.metrics import roc_curve, roc_auc_score + +y_scores = model.predict_proba(X_test) +# calculate ROC curve +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 軸上的假陽性率。」 因此,曲線的陡度以及中點線與曲線之間的空間很重要:你需要一條快速向上並越過直線的曲線。在我們的例子中,一開始就有誤報,然後這條線正確地向上和重復: + +![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): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` + +結果是 `0.6976998904709748`。 鑒於 AUC 的範圍從 0 到 1,你需要一個高分,因為預測 100% 正確的模型的 AUC 為 1;在這種情況下,模型_相當不錯_。 + +在以後的分類課程中,你將學習如何叠代以提高模型的分數。但是現在,恭喜!你已經完成了這些回歸課程! + +--- + +## 🚀挑戰 + +關於邏輯回歸,還有很多東西需要解開!但最好的學習方法是實驗。找到適合此類分析的數據集並用它構建模型。你學到了什麽?小貼士:嘗試 [Kaggle](https://kaggle.com) 獲取有趣的數據集。 + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/16/) + +## 復習與自學 + +閱讀[斯坦福大學的這篇論文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)的前幾頁關於邏輯回歸的一些實際應用。想想那些更適合於我們目前所研究的一種或另一種類型的回歸任務的任務。什麽最有效? + +## 任務 + +[重試此回歸](./assignment.zh-tw.md) diff --git a/2-Regression/4-Logistic/translations/assignment.zh-tw.md b/2-Regression/4-Logistic/translations/assignment.zh-tw.md new file mode 100644 index 00000000..ce59d861 --- /dev/null +++ b/2-Regression/4-Logistic/translations/assignment.zh-tw.md @@ -0,0 +1,11 @@ +# 再探回歸模型 + +## 說明 + +在這節課中,你使用了 pumpkin 數據集的子集。現在,讓我們回到原始數據,並嘗試使用所有數據。經過了數據清理和標準化,建立一個邏輯回歸模型。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | 用 notebook 呈現了一個解釋性和性能良好的模型 | 用 notebook 呈現了一個性能一般的模型 | 用 notebook 呈現了一個性能差的模型或根本沒有模型 | From faa77147a78784661c8f20cf38131b50ad0788f0 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:04:38 +0800 Subject: [PATCH 11/13] Add files via upload --- 3-Web-App/translations/README.zh-tw.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 3-Web-App/translations/README.zh-tw.md diff --git a/3-Web-App/translations/README.zh-tw.md b/3-Web-App/translations/README.zh-tw.md new file mode 100644 index 00000000..f5c9ab64 --- /dev/null +++ b/3-Web-App/translations/README.zh-tw.md @@ -0,0 +1,22 @@ +# 構建一個 Web 應用程序來使用您的機器學習模型 + +課程的本章節將為您介紹機器學習的應用:如何保存您的 Scikit-learn 模型為文件以便在 Web 應用程序中使用該模型進行預測。模型保存後,您將學習如何在一個由 Flask 構建的 Web 應用程序中使用它。首先,您將會使用一些 UFO 目擊事件的數據去創建一個模型!然後,您將構建一個 Web 應用程序,這個應用程序能讓您輸入秒數,經度,緯度來預測哪個國家會報告 UFO 目擊事件。 + +![UFO Parking](../images/ufo.jpg) + +圖片由 Michael Herren 拍攝,來自 Unsplash + +## 教程 + +1. [構建一個 Web 應用程序](../1-Web-App/translations/README.zh-tw.md) + +## 致謝 + +"構建一個 Web 應用程序" 由 [Jen Looper](https://twitter.com/jenlooper) 用 ♥ 編寫️ + +測驗由 Rohan Raj 用 ♥️ 編寫 + +數據集來自 [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings) + +Web 應用程序的架構一部分參考了 Abhinav Sagar 的[文章](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4)和[倉庫](https://github.com/abhinavsagar/machine-learning-deployment) + From 82faccb04f7f937ee60ce42e07d648924f0a73e5 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:14:37 +0800 Subject: [PATCH 12/13] Add files via upload --- .../1-Web-App/translations/README.zh-tw.md | 347 ++++++++++++++++++ .../translations/assignment.zh-tw.md | 12 + 2 files changed, 359 insertions(+) create mode 100644 3-Web-App/1-Web-App/translations/README.zh-tw.md create mode 100644 3-Web-App/1-Web-App/translations/assignment.zh-tw.md diff --git a/3-Web-App/1-Web-App/translations/README.zh-tw.md b/3-Web-App/1-Web-App/translations/README.zh-tw.md new file mode 100644 index 00000000..d28d7d9c --- /dev/null +++ b/3-Web-App/1-Web-App/translations/README.zh-tw.md @@ -0,0 +1,347 @@ +# 構建使用 ML 模型的 Web 應用程序 + +在本課中,你將在一個數據集上訓練一個 ML 模型,這個數據集來自世界各地:過去一個世紀的 UFO 目擊事件,來源於 [NUFORC 的數據庫](https://www.nuforc.org)。 + +你將學會: + +- 如何「pickle」一個訓練有素的模型 +- 如何在 Flask 應用程序中使用該模型 + +我們將繼續使用 notebook 來清理數據和訓練我們的模型,但你可以進一步探索在 web 應用程序中使用模型。 + +為此,你需要使用 Flask 構建一個 web 應用程序。 + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/17/) + +## 構建應用程序 + +有多種方法可以構建 Web 應用程序以使用機器學習模型。你的 web 架構可能會影響你的模型訓練方式。想象一下,你在一家企業工作,其中數據科學小組已經訓練了他們希望你在應用程序中使用的模型。 + +### 註意事項 + +你需要問很多問題: + +- **它是 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 來完成。 + +出於我們的目的,既然我們一直在使用基於 Python 的 notebook,那麽就讓我們探討一下將經過訓練的模型從 notebook 導出為 Python 構建的 web 應用程序可讀的格式所需要采取的步驟。 + +## 工具 + +對於此任務,你需要兩個工具: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 構建應用程序。 + +✅ 什麽是 [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 目擊事件有一些有趣的描述,例如: + +- **詳細描述**。"一名男子從夜間照射在草地上的光束中出現,他朝德克薩斯儀器公司的停車場跑去"。 +- **簡短描述**。 「燈光追著我們」。 + +[ufos.csv](./data/ufos.csv) 電子表格包括有關目擊事件發生的 `city`、`state` 和 `country`、對象的 `shape` 及其 `latitude` 和 `longitude` 的列。 + +在包含在本課中的空白 [notebook](notebook.ipynb) 中: + +1. 像在之前的課程中一樣導入 `pandas`、`matplotlib` 和 `numpy`,然後導入 ufos 電子表格。你可以查看一個示例數據集: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('../data/ufos.csv') + ufos.head() + ``` + +2. 將 ufos 數據轉換為帶有新標題的小 dataframe。檢查 `country` 字段中的唯一值。 + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +3. 現在,你可以通過刪除任何空值並僅導入 1-60 秒之間的目擊數據來減少我們需要處理的數據量: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +4. 導入 Scikit-learn 的 `LabelEncoder` 庫,將國家的文本值轉換為數字: + + ✅ LabelEncoder 按字母順序編碼數據 + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + 你的數據應如下所示: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## 練習 - 建立你的模型 + +現在,你可以通過將數據劃分為訓練和測試組來準備訓練模型。 + +1. 選擇要訓練的三個特征作為 X 向量,y 向量將是 `Country` 你希望能夠輸入 `Seconds`、`Latitude` 和 `Longitude` 並獲得要返回的國家/地區 ID。 + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +2. 使用邏輯回歸訓練模型: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +準確率還不錯 **(大約 95%)**,不出所料,因為 `Country` 和 `Latitude/Longitude` 相關。 + +你創建的模型並不是非常具有革命性,因為你應該能夠從其 `Latitude` 和 `Longitude` 推斷出 `Country`,但是,嘗試從清理、導出的原始數據進行訓練,然後在 web 應用程序中使用此模型是一個很好的練習。 + +## 練習 - 「pickle」你的模型 + +現在,是時候 _pickle_ 你的模型了!你可以在幾行代碼中做到這一點。一旦它是 _pickled_,加載你的 pickled 模型並針對包含秒、緯度和經度值的示例數據數組對其進行測試, + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +該模型返回 **'3'**,這是英國的國家代碼。👽 + +## 練習 - 構建Flask應用程序 + +現在你可以構建一個Flask應用程序來調用你的模型並返回類似的結果,但以一種更美觀的方式。 + +1. 首先在你的 _ufo-model.pkl_ 文件所在的 _notebook.ipynb_ 文件旁邊創建一個名為 **web-app** 的文件夾。 + +2. 在該文件夾中創建另外三個文件夾:**static**,其中有文件夾 **css** 和 **templates**。 你現在應該擁有以下文件和目錄 + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ 請參閱解決方案文件夾以查看已完成的應用程序 + +3. 在 _web-app_ 文件夾中創建的第一個文件是 **requirements.txt** 文件。與 JavaScript 應用程序中的 _package.json_ 一樣,此文件列出了應用程序所需的依賴項。在 **requirements.txt** 中添加以下幾行: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +4. 現在,進入 web-app 文件夾: + + ```bash + cd web-app + ``` + +5. 在你的終端中輸入 `pip install`,以安裝 _reuirements.txt_ 中列出的庫: + + ```bash + pip install -r requirements.txt + ``` + +6. 現在,你已準備好創建另外三個文件來完成應用程序: + + 1. 在根目錄中創建 **app.py**。 + 2. 在 _templates_ 目錄中創建**index.html**。 + 3. 在 _static/css_ 目錄中創建**styles.css**。 + +7. 使用一些樣式構建 _styles.css_ 文件: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +8. 接下來,構建 _index.html_ 文件: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +
+ +
+ +

According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?

+ +
+ + + + +
+ + +

{{ prediction_text }}

+ +
+
+ + + + ``` + + 看看這個文件中的模板。請註意應用程序將提供的變量周圍的「mustache」語法,例如預測文本:`{{}}`。還有一個表單可以將預測發布到 `/predict` 路由。 + + 最後,你已準備好構建使用模型和顯示預測的 python 文件: + +9. 在`app.py`中添加: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 提示:當你在使用 Flask 運行 Web 應用程序時添加 [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode)時你對應用程序所做的任何更改將立即反映,無需重新啟動服務器。註意!不要在生產應用程序中啟用此模式 + +如果你運行 `python app.py` 或 `python3 app.py` - 你的網絡服務器在本地啟動,你可以填寫一個簡短的表格來回答你關於在哪裏看到 UFO 的問題! + +在此之前,先看一下 `app.py` 的實現: + +1. 首先,加載依賴項並啟動應用程序。 +2. 然後,導入模型。 +3. 然後,在 home 路由上渲染 index.html。 + +在 `/predict` 路由上,當表單被發布時會發生幾件事情: + +1. 收集表單變量並轉換為 numpy 數組。然後將它們發送到模型並返回預測。 +2. 我們希望顯示的國家/地區根據其預測的國家/地區代碼重新呈現為可讀文本,並將該值發送回 index.html 以在模板中呈現。 + +以這種方式使用模型,包括 Flask 和 pickled 模型,是相對簡單的。最困難的是要理解數據是什麽形狀的,這些數據必須發送到模型中才能得到預測。這完全取決於模型是如何訓練的。有三個數據要輸入,以便得到一個預測。 + +在一個專業的環境中,你可以看到訓練模型的人和在 Web 或移動應用程序中使用模型的人之間的良好溝通是多麽的必要。在我們的情況下,只有一個人,你! + +--- + +## 🚀 挑戰 + +你可以在 Flask 應用程序中訓練模型,而不是在 notebook 上工作並將模型導入 Flask 應用程序!嘗試在 notebook 中轉換 Python 代碼,可能是在清除數據之後,從應用程序中的一個名為 `train` 的路徑訓練模型。采用這種方法的利弊是什麽? + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/18/) + +## 復習與自學 + +有很多方法可以構建一個Web應用程序來使用ML模型。列出可以使用JavaScript或Python構建Web應用程序以利用機器學習的方法。考慮架構:模型應該留在應用程序中還是存在於雲中?如果是後者,你將如何訪問它?為應用的ML Web解決方案繪製架構模型。 + +## 任務 + +[嘗試不同的模型](./assignment.zh-tw.md) + + diff --git a/3-Web-App/1-Web-App/translations/assignment.zh-tw.md b/3-Web-App/1-Web-App/translations/assignment.zh-tw.md new file mode 100644 index 00000000..3c98a948 --- /dev/null +++ b/3-Web-App/1-Web-App/translations/assignment.zh-tw.md @@ -0,0 +1,12 @@ +# 嘗試不同的模型 + +## 說明 + +現在,你已經能夠使用一個經過訓練的回歸模型來搭建web應用程序,那麽請你從前面的回歸課程中重新選擇一個模型來重做一遍web應用程序。你可以使用原來的風格或者其他不同的風格進行設計,來展示pumpkin數據。註意更改輸入以反映模型的訓練方法。 + + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | +| | web應用程序按預期運行,並部署到雲端 | web應用程序存在缺陷或者顯示意想不到的結果 | web應用程序無法正常運行 | \ No newline at end of file From 7a019a5966c85be0f45cd9b659f50c1158d38cc4 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 5 Jul 2022 15:17:50 +0800 Subject: [PATCH 13/13] fix assignment's path --- 3-Web-App/1-Web-App/translations/README.zh-cn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3-Web-App/1-Web-App/translations/README.zh-cn.md b/3-Web-App/1-Web-App/translations/README.zh-cn.md index c6409808..31228f98 100644 --- a/3-Web-App/1-Web-App/translations/README.zh-cn.md +++ b/3-Web-App/1-Web-App/translations/README.zh-cn.md @@ -342,6 +342,6 @@ print(model.predict([[50,44,-12]])) ## 任务 -[尝试不同的模型](../assignment.md) +[尝试不同的模型](./assignment.zh-cn.md)