人工智能與 Python教程(第一節(jié))
人工智能與 Python – 入門概念
人工智能與 Python——入門
人工智能與 Python——機(jī)器學(xué)習(xí)
人工智能與 Python – 數(shù)據(jù)準(zhǔn)備
監(jiān)督學(xué)習(xí):分類
監(jiān)督學(xué)習(xí):回歸
人工智能與 Python – 邏輯編程
無監(jiān)督學(xué)習(xí):聚類
自然語言處理
人工智能與 Python——NLTK 包
分析時(shí)間序列數(shù)據(jù)
人工智能與 Python——語音識(shí)別
人工智能與 Python——啟發(fā)式搜索
人工智能與 Python – 游戲
人工智能與 Python——神經(jīng)網(wǎng)絡(luò)
強(qiáng)化學(xué)習(xí)
人工智能與 Python——遺傳算法
人工智能與 Python——計(jì)算機(jī)視覺
人工智能與 Python——深度學(xué)習(xí)
人工智能與 Python – 入門概念
自計(jì)算機(jī)或機(jī)器發(fā)明以來,它們執(zhí)行各種任務(wù)的能力經(jīng)歷了指數(shù)級(jí)增長(zhǎng)。人類在不同的工作領(lǐng)域、不斷提高的速度和相對(duì)于時(shí)間的縮小尺寸方面開發(fā)了計(jì)算機(jī)系統(tǒng)的功能。
名為人工智能的計(jì)算機(jī)科學(xué)的一個(gè)分支追求創(chuàng)造像人類一樣智能的計(jì)算機(jī)或機(jī)器。
人工智能(AI)的基本概念
按照人工智能之父約翰麥卡錫的說法,它是“制造智能機(jī)器,尤其是智能計(jì)算機(jī)程序的科學(xué)與工程”。
人工智能是一種讓計(jì)算機(jī)、計(jì)算機(jī)控制的機(jī)器人或軟件以智能人類思考的方式進(jìn)行智能思考的方法。人工智能是通過研究人腦如何思考以及人類在嘗試解決問題時(shí)如何學(xué)習(xí)、決策和工作,然后將這項(xiàng)研究的結(jié)果作為開發(fā)智能軟件和系統(tǒng)的基礎(chǔ)來實(shí)現(xiàn)的。
在利用計(jì)算機(jī)系統(tǒng)的力量時(shí),人類的好奇心使他想知道,“機(jī)器能像人類一樣思考和行動(dòng)嗎?”
因此,人工智能的發(fā)展始于在機(jī)器中創(chuàng)造我們發(fā)現(xiàn)并認(rèn)為人類具有很高智能的類似智能。
學(xué)習(xí)人工智能的必要性
眾所周知,人工智能追求的是創(chuàng)造像人類一樣智能的機(jī)器。我們研究人工智能的原因有很多。原因如下 -
人工智能可以通過數(shù)據(jù)學(xué)習(xí)
在我們的日常生活中,我們處理大量數(shù)據(jù),而人腦無法跟蹤這么多數(shù)據(jù)。這就是為什么我們需要自動(dòng)化的原因。做自動(dòng)化,我們需要研究人工智能,因?yàn)樗梢詮臄?shù)據(jù)中學(xué)習(xí),可以準(zhǔn)確無誤地完成重復(fù)性的工作,而且不會(huì)感到疲倦。
人工智能可以自學(xué)
系統(tǒng)自學(xué)是非常必要的,因?yàn)閿?shù)據(jù)本身不斷變化,從這些數(shù)據(jù)中衍生出來的知識(shí)也必須不斷更新。我們可以使用 AI 來實(shí)現(xiàn)這一目的,因?yàn)橹С?AI 的系統(tǒng)可以自學(xué)。
AI可以實(shí)時(shí)響應(yīng)
借助神經(jīng)網(wǎng)絡(luò)的人工智能可以更深入地分析數(shù)據(jù)。由于這種能力,人工智能可以實(shí)時(shí)思考和響應(yīng)基于條件的情況。
人工智能實(shí)現(xiàn)準(zhǔn)確性
在深度神經(jīng)網(wǎng)絡(luò)的幫助下,人工智能可以達(dá)到極高的準(zhǔn)確性。人工智能在醫(yī)學(xué)領(lǐng)域有助于通過患者的 MRI 診斷癌癥等疾病。
人工智能可以組織數(shù)據(jù)以充分利用它
數(shù)據(jù)是使用自學(xué)習(xí)算法的系統(tǒng)的知識(shí)產(chǎn)權(quán)。我們需要 AI 以始終提供最佳結(jié)果的方式對(duì)數(shù)據(jù)進(jìn)行索引和組織。
了解情報(bào)
有了人工智能,就可以構(gòu)建智能系統(tǒng)。我們需要理解智能的概念,這樣我們的大腦才能構(gòu)建另一個(gè)像它自己一樣的智能系統(tǒng)。
什么是情報(bào)?
系統(tǒng)計(jì)算、推理、感知關(guān)系和類比、從經(jīng)驗(yàn)中學(xué)習(xí)、從記憶中存儲(chǔ)和檢索信息、解決問題、理解復(fù)雜思想、流利地使用自然語言、分類、概括和適應(yīng)新情況的能力。
智力類型
正如美國發(fā)展心理學(xué)家霍華德加德納所描述的那樣,智力來自多方面 -
高級(jí)編號(hào)情報(bào)與描述例子1個(gè)
語言智能
說話、識(shí)別和使用音系(語音)、句法(語法)和語義(意義)機(jī)制的能力。
敘述者、演說者2個(gè)
音樂智能
創(chuàng)造、交流和理解聲音意義的能力,對(duì)音調(diào)和節(jié)奏的理解。
音樂家、歌手、作曲家3個(gè)
邏輯數(shù)理智能
在沒有動(dòng)作或?qū)ο蟮那闆r下使用和理解關(guān)系的能力。這也是理解復(fù)雜和抽象思想的能力。
數(shù)學(xué)家、科學(xué)家4個(gè)
空間智能
感知視覺或空間信息,改變它,并在不參考對(duì)象的情況下重新創(chuàng)建視覺圖像,構(gòu)建 3D 圖像以及移動(dòng)和旋轉(zhuǎn)它們的能力。
地圖閱讀器、宇航員、物理學(xué)家5個(gè)
身體運(yùn)動(dòng)智能
能夠使用完整或部分身體來解決問題或時(shí)尚產(chǎn)品,控制精細(xì)和粗略的運(yùn)動(dòng)技能,以及操縱物體。
球員、舞者6個(gè)
個(gè)人內(nèi)部智能
區(qū)分自己的感受、意圖和動(dòng)機(jī)的能力。
釋迦牟尼佛7
人際智能
識(shí)別和區(qū)分他人的感受、信念和意圖的能力。
大眾傳播者、采訪者
當(dāng)一臺(tái)機(jī)器或系統(tǒng)配備了至少一種或所有智能時(shí),你可以說它是人工智能。
什么是情報(bào)?
智慧是無形的。它由 -
推理
學(xué)習(xí)
解決問題
洞察力
語言智能
讓我們簡(jiǎn)要介紹一下所有組件 -
推理
它是使我們能夠?yàn)榕袛唷Q策和預(yù)測(cè)提供基礎(chǔ)的一組過程。大致有兩種類型 -
歸納推理演繹推理它進(jìn)行具體觀察以做出廣泛的一般性陳述。它從一般性陳述開始,并檢查得出特定、合乎邏輯的結(jié)論的可能性。即使陳述中的所有前提都為真,歸納推理也允許結(jié)論為假。如果某件事對(duì)一類事物普遍適用,那么它也適用于該類的所有成員。示例- “Nita 是一位老師。Nita 很勤奮。因此,所有老師都很勤奮?!?strong>示例- “所有 60 歲以上的女性都是祖母。Shalini 是 65 歲。因此,Shalini 是祖母?!?/p>
學(xué)習(xí) - l
人類、特定種類的動(dòng)物和支持 AI 的系統(tǒng)都具有學(xué)習(xí)能力。學(xué)習(xí)分類如下 -
聽覺學(xué)習(xí)
它是通過聽和聽來學(xué)習(xí)的。例如,學(xué)生收聽錄制的音頻講座。
情景學(xué)習(xí)
通過記住親眼目睹或經(jīng)歷過的一系列事件來學(xué)習(xí)。這是線性和有序的。
運(yùn)動(dòng)學(xué)習(xí)
它是通過肌肉的精確運(yùn)動(dòng)來學(xué)習(xí)的。比如撿東西,寫字等等。
觀察學(xué)習(xí)
通過觀察和模仿他人來學(xué)習(xí)。例如,孩子試圖通過模仿父母來學(xué)習(xí)。
感性學(xué)習(xí)
它正在學(xué)習(xí)識(shí)別以前見過的刺激。例如,識(shí)別和分類對(duì)象和情況。
關(guān)系學(xué)習(xí)
它涉及學(xué)習(xí)根據(jù)相關(guān)屬性而不是絕對(duì)屬性來區(qū)分各種刺激。例如,在烹飪上次變咸的土豆時(shí)添加“少一點(diǎn)”鹽,當(dāng)烹飪時(shí)添加一湯匙鹽。
空間學(xué)習(xí)- 它是通過圖像、顏色、地圖等視覺刺激進(jìn)行學(xué)習(xí)。例如,一個(gè)人可以在真正沿著道路行駛之前在腦海中創(chuàng)建路線圖。
Stimulus-Response Learning?- 它正在學(xué)習(xí)在存在特定刺激時(shí)執(zhí)行特定行為。例如,一只狗在聽到門鈴時(shí)會(huì)豎起耳朵。
解決問題
這是一個(gè)過程,在這個(gè)過程中,一個(gè)人通過采取一些被已知或未知障礙阻擋的路徑來感知并試圖從當(dāng)前情況中得出所需的解決方案。
解決問題還包括決策,這是從多個(gè)備選方案中選擇最合適的備選方案以達(dá)到預(yù)期目標(biāo)的過程。
洞察力
它是獲取、解釋、選擇和組織感官信息的過程。
感知假定感知。在人類中,感覺器官有助于感知。在人工智能領(lǐng)域,感知機(jī)制將傳感器獲取的數(shù)據(jù)以有意義的方式組合在一起。
語言智能
它是一個(gè)人使用、理解、說和寫口頭和書面語言的能力。在人際交往中很重要。
人工智能涉及什么
人工智能是一個(gè)廣闊的研究領(lǐng)域。該研究領(lǐng)域有助于找到解決現(xiàn)實(shí)世界問題的方法。
現(xiàn)在讓我們看看人工智能的不同研究領(lǐng)域 -
機(jī)器學(xué)習(xí)
它是人工智能最受歡迎的領(lǐng)域之一。本申請(qǐng)的基本概念是讓機(jī)器從數(shù)據(jù)中學(xué)習(xí),就像人類可以從他/她的經(jīng)驗(yàn)中學(xué)習(xí)一樣。它包含學(xué)習(xí)模型,在此基礎(chǔ)上可以對(duì)未知數(shù)據(jù)進(jìn)行預(yù)測(cè)。
邏輯
這是另一個(gè)重要的研究領(lǐng)域,其中使用數(shù)理邏輯來執(zhí)行計(jì)算機(jī)程序。它包含執(zhí)行模式匹配、語義分析等的規(guī)則和事實(shí)。
搜索中
這一研究領(lǐng)域基本上用于象棋、井字游戲等游戲。搜索算法在搜索整個(gè)搜索空間后給出最優(yōu)解。
人工神經(jīng)網(wǎng)絡(luò)
這是一個(gè)高效計(jì)算系統(tǒng)網(wǎng)絡(luò),其中心主題借鑒了生物神經(jīng)網(wǎng)絡(luò)的類比。人工神經(jīng)網(wǎng)絡(luò)可用于機(jī)器人、語音識(shí)別、語音處理等。
遺傳算法
遺傳算法有助于在多個(gè)程序的幫助下解決問題。結(jié)果將基于選擇最適者。
知識(shí)表示
在研究領(lǐng)域的幫助下,我們可以用機(jī)器可以理解的方式來表示事實(shí)。知識(shí)的表達(dá)效率越高;系統(tǒng)越智能。
人工智能的應(yīng)用
在本節(jié)中,我們將看到 AI 支持的不同領(lǐng)域 -
賭博
人工智能在國際象棋、撲克、井字游戲等戰(zhàn)略游戲中起著至關(guān)重要的作用,機(jī)器可以根據(jù)啟發(fā)式知識(shí)思考大量可能的位置。
自然語言處理
可以與理解人類所說的自然語言的計(jì)算機(jī)進(jìn)行交互。
專家系統(tǒng)
有些應(yīng)用程序集成了機(jī)器、軟件和特殊信息以提供推理和建議。他們向用戶提供解釋和建議。
視覺系統(tǒng)
這些系統(tǒng)理解、解釋和理解計(jì)算機(jī)上的視覺輸入。例如,
間諜飛機(jī)拍攝照片,這些照片用于計(jì)算空間信息或區(qū)域地圖。
醫(yī)生使用臨床專家系統(tǒng)對(duì)患者進(jìn)行診斷。
警察使用計(jì)算機(jī)軟件,可以通過法醫(yī)藝術(shù)家制作的存儲(chǔ)肖像識(shí)別罪犯的面孔。
語音識(shí)別
一些智能系統(tǒng)能夠在人類與之交談時(shí)根據(jù)句子及其含義來聽取和理解語言。它可以處理不同的口音、俚語、背景噪音、因寒冷引起的人聲變化等。
手寫識(shí)別
手寫識(shí)別軟件讀取用筆寫在紙上或用手寫筆寫在屏幕上的文本。它可以識(shí)別字母的形狀并將其轉(zhuǎn)換為可編輯的文本。
智能機(jī)器人
機(jī)器人能夠執(zhí)行人類賦予的任務(wù)。他們有傳感器來檢測(cè)來自現(xiàn)實(shí)世界的物理數(shù)據(jù),例如光、熱、溫度、運(yùn)動(dòng)、聲音、碰撞和壓力。它們擁有高效的處理器、多個(gè)傳感器和巨大的內(nèi)存,以展現(xiàn)智能。此外,他們能夠從錯(cuò)誤中吸取教訓(xùn),能夠適應(yīng)新環(huán)境。
認(rèn)知建模:模擬人類思維過程
認(rèn)知建?;旧鲜怯?jì)算機(jī)科學(xué)中的研究領(lǐng)域,涉及研究和模擬人類的思維過程。人工智能的主要任務(wù)是讓機(jī)器像人一樣思考。人類思維過程的最重要特征是解決問題。這就是為什么或多或少的認(rèn)知建模試圖理解人類如何解決問題的原因。之后,該模型可用于各種人工智能應(yīng)用,如機(jī)器學(xué)習(xí)、機(jī)器人技術(shù)、自然語言處理等。以下是人腦不同思維層次的圖表 -
代理與環(huán)境
在本節(jié)中,我們將重點(diǎn)關(guān)注代理和環(huán)境以及它們?nèi)绾螏椭斯ぶ悄堋?/p>
代理人
代理是任何可以通過傳感器感知其環(huán)境并通過效應(yīng)器作用于該環(huán)境的事物。
人類主體具有與傳感器平行的眼睛、耳朵、鼻子、舌頭和皮膚等感覺器官,以及用于效應(yīng)器的其他器官,例如手、腿、嘴。
機(jī)器人代理取代了傳感器的相機(jī)和紅外測(cè)距儀,以及效應(yīng)器的各種電機(jī)和執(zhí)行器。
軟件代理將位串編碼為它的程序和動(dòng)作。
環(huán)境
一些程序在完全人工的環(huán)境中運(yùn)行,僅限于鍵盤輸入、數(shù)據(jù)庫、計(jì)算機(jī)文件系統(tǒng)和屏幕上的字符輸出。
相比之下,一些軟件代理(軟件機(jī)器人或軟件機(jī)器人)存在于豐富的、無限的軟件機(jī)器人域中。模擬器有一個(gè)非常詳細(xì)、復(fù)雜的環(huán)境。軟件代理需要從一長(zhǎng)串實(shí)時(shí)操作中進(jìn)行選擇。softbot 旨在掃描客戶的在線偏好,并向客戶展示有趣的項(xiàng)目,在真實(shí)和人工環(huán)境中工作。
人工智能與 Python——入門
在本章中,我們將學(xué)習(xí)如何開始使用 Python。我們還將了解 Python 如何幫助人工智能。
為什么 Python 用于 AI
人工智能被認(rèn)為是未來的趨勢(shì)技術(shù)。已經(jīng)有許多應(yīng)用程序在上面進(jìn)行。因此,許多公司和研究人員都對(duì)此感興趣。但這里出現(xiàn)的主要問題是,可以使用哪種編程語言開發(fā)這些 AI 應(yīng)用程序?有多種編程語言,如 Lisp、Prolog、C++、Java 和 Python,可用于開發(fā) AI 應(yīng)用程序。其中,Python 編程語言大受歡迎,原因如下:
簡(jiǎn)單的語法和更少的編碼
與其他可用于開發(fā) AI 應(yīng)用程序的編程語言相比,Python 涉及的代碼非常少,語法簡(jiǎn)單。由于這個(gè)特性,測(cè)試可以更容易,我們可以更專注于編程。
人工智能項(xiàng)目的內(nèi)置庫
將 Python 用于 AI 的一個(gè)主要優(yōu)勢(shì)是它帶有內(nèi)置庫。Python 擁有適用于幾乎所有類型 AI 項(xiàng)目的庫。例如,NumPy、SciPy、matplotlib、nltk、SimpleAI是 Python 的一些重要內(nèi)置庫。
開源- Python 是一種開源編程語言。這使其在社區(qū)中廣受歡迎。
可用于廣泛的編程——Python 可用于廣泛的編程任務(wù),如小型 shell 腳本到企業(yè) Web 應(yīng)用程序。這也是 Python 適合 AI 項(xiàng)目的另一個(gè)原因。
Python的特點(diǎn)
Python 是一種高級(jí)、解釋型、交互式和面向?qū)ο蟮哪_本語言。Python 被設(shè)計(jì)成具有高度可讀性。它經(jīng)常使用英語關(guān)鍵字,而其他語言使用標(biāo)點(diǎn)符號(hào),并且它的句法結(jié)構(gòu)比其他語言少。Python 的功能包括以下 -
Easy-to-learn?- Python 關(guān)鍵字少,結(jié)構(gòu)簡(jiǎn)單,語法定義明確。這使學(xué)生能夠快速掌握語言。
Easy-to-read?- Python 代碼定義更清晰,更清晰可見。
Easy-to-maintain?- Python 的源代碼相當(dāng)易于維護(hù)。
廣泛的標(biāo)準(zhǔn)庫——Python 的大部分庫在 UNIX、Windows 和 Macintosh 上都非常便攜且跨平臺(tái)兼容。
交互模式- Python 支持交互模式,允許交互測(cè)試和調(diào)試代碼片段。
便攜- Python 可以在多種硬件平臺(tái)上運(yùn)行,并且在所有平臺(tái)上都具有相同的界面。
可擴(kuò)展- 我們可以向 Python 解釋器添加低級(jí)模塊。這些模塊使程序員能夠添加或自定義他們的工具以提高效率。
數(shù)據(jù)庫- Python 提供所有主要商業(yè)數(shù)據(jù)庫的接口。
GUI 編程- Python 支持可以創(chuàng)建和移植到許多系統(tǒng)調(diào)用、庫和 Windows 系統(tǒng)(例如 Windows MFC、Macintosh 和 Unix 的 X Window 系統(tǒng))的 GUI 應(yīng)用程序。
可擴(kuò)展- Python 為大型程序提供了比 shell 腳本更好的結(jié)構(gòu)和支持。
Python的重要特性
現(xiàn)在讓我們考慮 Python 的以下重要特性 -
它支持函數(shù)式和結(jié)構(gòu)化編程方法以及 OOP。
它可以用作腳本語言,也可以編譯為字節(jié)碼以構(gòu)建大型應(yīng)用程序。
它提供非常高級(jí)的動(dòng)態(tài)數(shù)據(jù)類型并支持動(dòng)態(tài)類型檢查。
它支持自動(dòng)垃圾收集。
它可以輕松地與 C、C++、COM、ActiveX、CORBA 和 Java 集成。
安裝 Python
Python 發(fā)行版可用于大量平臺(tái)。您只需下載適用于您的平臺(tái)的二進(jìn)制代碼并安裝 Python。
如果您的平臺(tái)的二進(jìn)制代碼不可用,您需要一個(gè) C 編譯器來手動(dòng)編譯源代碼。編譯源代碼在選擇安裝中所需的功能方面提供了更大的靈活性。
這是在各種平臺(tái)上安裝 Python 的快速概述 -
Unix 和 Linux 安裝
按照以下步驟在 Unix/Linux 機(jī)器上安裝 Python。
打開 Web 瀏覽器并轉(zhuǎn)到https://www.python.org/downloads
按照鏈接下載適用于 Unix/Linux 的壓縮源代碼。
下載并提取文件。
如果要自定義某些選項(xiàng),請(qǐng)編輯模塊/設(shè)置文件。
運(yùn)行 ./configure 腳本
制作
安裝
這會(huì)將 Python 安裝在標(biāo)準(zhǔn)位置 /usr/local/bin,并將其庫安裝在/usr/local/lib/pythonXX,其中 XX 是 Python 的版本。
Windows 安裝
按照以下步驟在 Windows 機(jī)器上安裝 Python。
打開 Web 瀏覽器并轉(zhuǎn)到https://www.python.org/downloads
點(diǎn)擊 Windows 安裝程序python-XYZ?.msi 文件的鏈接,其中 XYZ 是您需要安裝的版本。
要使用此安裝程序python-XYZ?.msi,Windows 系統(tǒng)必須支持 Microsoft Installer 2.0。將安裝程序文件保存到您的本地計(jì)算機(jī),然后運(yùn)行它以查看您的計(jì)算機(jī)是否支持 MSI。
運(yùn)行下載的文件。這將打開 Python 安裝向?qū)?,它非常易于使用。只需接受默認(rèn)設(shè)置并等待安裝完成即可。
蘋果機(jī)安裝
如果您使用的是 Mac OS X,建議您使用 Homebrew 安裝 Python 3。它是一個(gè)很棒的 Mac OS X 軟件包安裝程序,而且非常易于使用。如果您沒有 Homebrew,您可以使用以下命令安裝它 -
$?ruby?-e?"$(curl?-fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
我們可以使用以下命令更新包管理器 -
$?brew?update
現(xiàn)在運(yùn)行以下命令在您的系統(tǒng)上安裝 Python3 -
$?brew?install?python3
設(shè)置路徑
程序和其他可執(zhí)行文件可以位于許多目錄中,因此操作系統(tǒng)提供了一個(gè)搜索路徑,其中列出了操作系統(tǒng)搜索可執(zhí)行文件的目錄。
路徑存儲(chǔ)在環(huán)境變量中,這是操作系統(tǒng)維護(hù)的命名字符串。此變量包含可用于命令 shell 和其他程序的信息。
路徑變量在 Unix 中命名為 PATH,在 Windows 中命名為 Path(Unix 區(qū)分大小寫;Windows 不區(qū)分大小寫)。
在 Mac OS 中,安裝程序會(huì)處理路徑詳細(xì)信息。要從任何特定目錄調(diào)用 Python 解釋器,您必須將 Python 目錄添加到您的路徑中。
在 Unix/Linux 下設(shè)置路徑
將 Python 目錄添加到 Unix 中特定會(huì)話的路徑 -
在 csh 外殼中
輸入setenv PATH "$PATH:/usr/local/bin/python"并按Enter。
在 bash shell (Linux) 中
鍵入export ATH = "$PATH:/usr/local/bin/python"并按Enter。
在 sh 或 ksh shell 中
鍵入PATH = "$PATH:/usr/local/bin/python"并按Enter。
注意- /usr/local/bin/python 是 Python 目錄的路徑。
在 Windows 中設(shè)置路徑
將 Python 目錄添加到 Windows 中特定會(huì)話的路徑 -
在命令提示符下- 鍵入path %path%;C:Python并按Enter鍵。
注意- C:Python 是 Python 目錄的路徑。
運(yùn)行 Python
現(xiàn)在讓我們看看運(yùn)行 Python 的不同方式。這些方法如下所述 -
交互式口譯員
我們可以從 Unix、DOS 或任何其他為您提供命令行解釋器或 shell 窗口的系統(tǒng)啟動(dòng) Python。
在命令行輸入python 。
立即在交互式解釋器中開始編碼。
$python?#?Unix/Linux
或者
python%?#?Unix/Linux
或者
C:>?python?#?Windows/DOS
以下是所有可用命令行選項(xiàng)的列表 -
編號(hào)選項(xiàng)和描述1個(gè)
-d
它提供調(diào)試輸出。
2個(gè)
-o
它生成優(yōu)化的字節(jié)碼(生成 .pyo 文件)。
3個(gè)
-S
不要在啟動(dòng)時(shí)運(yùn)行 import site 來查找 Python 路徑。
4個(gè)
-v
詳細(xì)輸出(導(dǎo)入語句的詳細(xì)跟蹤)。
5個(gè)
-X
禁用基于類的內(nèi)置異常(僅使用字符串);從 1.6 版開始已過時(shí)。
6個(gè)
-c命令
運(yùn)行作為 cmd 字符串發(fā)送的 Python 腳本。
7
文件
從給定文件運(yùn)行 Python 腳本。
來自命令行的腳本
可以通過在應(yīng)用程序上調(diào)用解釋器在命令行執(zhí)行 Python 腳本,如下所示 -
$python?script.py?#?Unix/Linux
或者,
python%?script.py?#?Unix/Linux
或者,
C:>?python?script.py?#?Windows/DOS
注意- 確保文件權(quán)限模式允許執(zhí)行。
集成開發(fā)環(huán)境
如果您的系統(tǒng)上有支持 Python 的 GUI 應(yīng)用程序,您也可以從圖形用戶界面 (GUI) 環(huán)境運(yùn)行 Python。
Unix?- IDLE 是第一個(gè)用于 Python 的 Unix IDE。
Windows?- PythonWin 是 Python 的第一個(gè) Windows 界面,是一個(gè)帶有 GUI 的 IDE。
Macintosh?- Macintosh 版本的 Python 以及 IDLE IDE 可從主網(wǎng)站獲得,可下載為 MacBinary 或 BinHex'd 文件。
如果您無法正確設(shè)置環(huán)境,則可以向系統(tǒng)管理員尋求幫助。確保 Python 環(huán)境設(shè)置正確并且運(yùn)行良好。
我們還可以使用另一個(gè)名為 Anaconda 的 Python 平臺(tái)。它包括數(shù)百個(gè)流行的數(shù)據(jù)科學(xué)包和適用于 Windows、Linux 和 MacOS 的 conda 包和虛擬環(huán)境管理器。您可以根據(jù)您的操作系統(tǒng)從鏈接https://www.anaconda.com/download/下載它。
對(duì)于本教程,我們?cè)?MS Windows 上使用 Python 3.6.3 版本。
人工智能與 Python——機(jī)器學(xué)習(xí)
學(xué)習(xí)是指通過學(xué)習(xí)或經(jīng)驗(yàn)獲得知識(shí)或技能。基于此,我們可以定義機(jī)器學(xué)習(xí)(ML)如下 -
它可以定義為計(jì)算機(jī)科學(xué)領(lǐng)域,更具體地說是人工智能的應(yīng)用,它為計(jì)算機(jī)系統(tǒng)提供了利用數(shù)據(jù)進(jìn)行學(xué)習(xí)并根據(jù)經(jīng)驗(yàn)進(jìn)行改進(jìn)的能力,而無需明確編程。
基本上,機(jī)器學(xué)習(xí)的主要重點(diǎn)是讓計(jì)算機(jī)在沒有人為干預(yù)的情況下自動(dòng)學(xué)習(xí)?,F(xiàn)在的問題是,如何開始和完成這樣的學(xué)習(xí)?它可以從數(shù)據(jù)觀察開始。數(shù)據(jù)也可以是一些示例、說明或一些直接經(jīng)驗(yàn)。然后在這個(gè)輸入的基礎(chǔ)上,機(jī)器通過尋找數(shù)據(jù)中的一些模式來做出更好的決策。
機(jī)器學(xué)習(xí) (ML) 的類型
機(jī)器學(xué)習(xí)算法幫助計(jì)算機(jī)系統(tǒng)在沒有明確編程的情況下進(jìn)行學(xué)習(xí)。這些算法分為有監(jiān)督的或無監(jiān)督的。現(xiàn)在讓我們看看一些算法 -
監(jiān)督機(jī)器學(xué)習(xí)算法
這是最常用的機(jī)器學(xué)習(xí)算法。之所以稱為有監(jiān)督的,是因?yàn)閺挠?xùn)練數(shù)據(jù)集學(xué)習(xí)算法的過程可以被認(rèn)為是老師監(jiān)督學(xué)習(xí)過程。在這種 ML 算法中,可能的結(jié)果是已知的,訓(xùn)練數(shù)據(jù)也標(biāo)有正確答案??梢岳斫馊缦?-
假設(shè)我們有輸入變量x和輸出變量y,我們應(yīng)用了一種算法來學(xué)習(xí)從輸入到輸出的映射函數(shù),例如 -
Y?=?f(x)
現(xiàn)在,主要目標(biāo)是很好地近似映射函數(shù),以便當(dāng)我們有新的輸入數(shù)據(jù) (x) 時(shí),我們可以預(yù)測(cè)該數(shù)據(jù)的輸出變量 (Y)。
主要有監(jiān)督的學(xué)習(xí)問題可以分為以下兩種問題 -
分類- 當(dāng)我們有分類輸出如“黑色”,“教學(xué)”,“非教學(xué)”等時(shí),一個(gè)問題稱為分類問題。
回歸- 當(dāng)我們有諸如“距離”、“千克”等真實(shí)值輸出時(shí),一個(gè)問題稱為回歸問題。
決策樹、隨機(jī)森林、knn、邏輯回歸是監(jiān)督機(jī)器學(xué)習(xí)算法的例子。
無監(jiān)督機(jī)器學(xué)習(xí)算法
顧名思義,這類機(jī)器學(xué)習(xí)算法沒有任何主管提供任何指導(dǎo)。這就是為什么無監(jiān)督機(jī)器學(xué)習(xí)算法與某些人所謂的真正人工智能密切相關(guān)的原因??梢岳斫馊缦?-
假設(shè)我們有輸入變量 x,那么就沒有監(jiān)督學(xué)習(xí)算法中相應(yīng)的輸出變量。
簡(jiǎn)單來說,我們可以說,在無監(jiān)督學(xué)習(xí)中,沒有正確答案,也沒有老師指導(dǎo)。算法有助于發(fā)現(xiàn)數(shù)據(jù)中有趣的模式。
無監(jiān)督學(xué)習(xí)問題可分為以下兩種問題 -
聚類- 在聚類問題中,我們需要發(fā)現(xiàn)數(shù)據(jù)中的固有分組。例如,按購買行為對(duì)客戶進(jìn)行分組。
Association?- 一個(gè)問題被稱為關(guān)聯(lián)問題,因?yàn)檫@類問題需要發(fā)現(xiàn)描述我們大部分?jǐn)?shù)據(jù)的規(guī)則。例如,查找同時(shí)購買x和y的客戶。
用于聚類的 K-means、用于關(guān)聯(lián)的 Apriori 算法是無監(jiān)督機(jī)器學(xué)習(xí)算法的示例。
強(qiáng)化機(jī)器學(xué)習(xí)算法
這類機(jī)器學(xué)習(xí)算法用得很少。這些算法訓(xùn)練系統(tǒng)做出特定的決定。基本上,機(jī)器暴露在一個(gè)環(huán)境中,在這個(gè)環(huán)境中,它使用試錯(cuò)法不斷地自我訓(xùn)練。這些算法從過去的經(jīng)驗(yàn)中學(xué)習(xí),并試圖捕捉最好的知識(shí)來做出準(zhǔn)確的決策。馬爾可夫決策過程是強(qiáng)化機(jī)器學(xué)習(xí)算法的一個(gè)例子。
最常見的機(jī)器學(xué)習(xí)算法
在本節(jié)中,我們將了解最常見的機(jī)器學(xué)習(xí)算法。算法描述如下 -
線性回歸
它是統(tǒng)計(jì)和機(jī)器學(xué)習(xí)中最著名的算法之一。
基本概念 - 主要是線性回歸是一種線性模型,它假設(shè)輸入變量 x 和單個(gè)輸出變量 y 之間存在線性關(guān)系。換句話說,我們可以說 y 可以從輸入變量 x 的線性組合中計(jì)算出來??梢酝ㄟ^擬合最佳線來建立變量之間的關(guān)系。
線性回歸的類型
線性回歸有以下兩種類型 -
簡(jiǎn)單線性回歸- 如果線性回歸算法只有一個(gè)自變量,則稱為簡(jiǎn)單線性回歸。
多元線性回歸- 如果線性回歸算法具有多個(gè)自變量,則稱為多元線性回歸。
線性回歸主要用于根據(jù)連續(xù)變量估計(jì)實(shí)際值。例如,可以通過線性回歸估算基于實(shí)際值的商店一天的總銷售額。
邏輯回歸
它是一種分類算法,也稱為邏輯回歸。
主要是邏輯回歸是一種分類算法,用于根據(jù)給定的自變量集估計(jì)離散值,如 0 或 1、真或假、是或否。基本上,它預(yù)測(cè)概率,因此其輸出介于 0 和 1 之間。
決策樹
決策樹是一種監(jiān)督學(xué)習(xí)算法,主要用于分類問題。
基本上它是一個(gè)分類器,表示為基于自變量的遞歸分區(qū)。決策樹具有形成有根樹的節(jié)點(diǎn)。有根樹是有向樹,其節(jié)點(diǎn)稱為“根”。Root 沒有任何入邊,所有其他節(jié)點(diǎn)都有一個(gè)入邊。這些節(jié)點(diǎn)稱為葉節(jié)點(diǎn)或決策節(jié)點(diǎn)。例如,考慮以下決策樹來查看一個(gè)人是否適合。
支持向量機(jī) (SVM)
它用于分類和回歸問題。但主要用于分類問題。SVM 的主要概念是將每個(gè)數(shù)據(jù)項(xiàng)繪制為 n 維空間中的一個(gè)點(diǎn),每個(gè)特征的值是特定坐標(biāo)的值。這里 n 是我們將擁有的特征。以下是理解 SVM 概念的簡(jiǎn)單圖形表示 -
在上圖中,我們有兩個(gè)特征,因此我們首先需要在二維空間中繪制這兩個(gè)變量,其中每個(gè)點(diǎn)都有兩個(gè)坐標(biāo),稱為支持向量。該線將數(shù)據(jù)分成兩個(gè)不同的分類組。這條線就是分類器。
樸素貝葉斯
這也是一種分類技術(shù)。這種分類技術(shù)背后的邏輯是使用貝葉斯定理來構(gòu)建分類器。假設(shè)預(yù)測(cè)變量是獨(dú)立的。簡(jiǎn)而言之,它假設(shè)類中特定特征的存在與任何其他特征的存在無關(guān)。以下是貝葉斯定理的等式 -
$$Pleft ( rac{A}{B} ight ) = rac{Pleft ( rac{B}{A} ight )Pleft ( A ight )}{Pleft ( B 右 )}$$
樸素貝葉斯模型易于構(gòu)建,對(duì)大型數(shù)據(jù)集特別有用。
K 最近鄰 (KNN)
它用于問題的分類和回歸。它被廣泛用于解決分類問題。該算法的主要概念是它用于存儲(chǔ)所有可用的案例,并根據(jù)其 k 個(gè)鄰居的多數(shù)票對(duì)新案例進(jìn)行分類。然后將案例分配給在其 K 近鄰中最常見的類,通過距離函數(shù)測(cè)量。距離函數(shù)可以是歐氏距離、閔可夫斯基距離和漢明距離??紤]以下使用 KNN -
在計(jì)算上,KNN 比用于分類問題的其他算法昂貴。
需要對(duì)變量進(jìn)行歸一化,否則更高范圍的變量會(huì)使它產(chǎn)生偏差。
在 KNN 中,我們需要在去噪等預(yù)處理階段進(jìn)行工作。
K-均值聚類
顧名思義,就是用來解決聚類問題的。它基本上是一種無監(jiān)督學(xué)習(xí)。K-Means 聚類算法的主要邏輯是通過多個(gè)簇對(duì)數(shù)據(jù)集進(jìn)行分類。按照以下步驟通過 K-means 形成集群 -
K-means 為每個(gè)簇選擇 k 個(gè)點(diǎn),稱為質(zhì)心。
現(xiàn)在每個(gè)數(shù)據(jù)點(diǎn)形成一個(gè)具有最接近質(zhì)心的簇,即k個(gè)簇。
現(xiàn)在,它將根據(jù)現(xiàn)有的集群成員找到每個(gè)集群的質(zhì)心。
我們需要重復(fù)這些步驟,直到出現(xiàn)收斂。
隨機(jī)森林
它是一種監(jiān)督分類算法。隨機(jī)森林算法的優(yōu)點(diǎn)是它可以用于分類和回歸類問題?;旧纤菦Q策樹(即森林)的集合,或者你可以說是決策樹的集合。隨機(jī)森林的基本概念是每棵樹給出一個(gè)分類,森林從中選擇最好的分類。以下是隨機(jī)森林算法的優(yōu)點(diǎn) -
隨機(jī)森林分類器可用于分類和回歸任務(wù)。
他們可以處理缺失值。
即使我們?cè)谏种杏懈嗟臉淠?,它也不?huì)過度擬合模型。
人工智能與 Python – 數(shù)據(jù)準(zhǔn)備
我們已經(jīng)研究了有監(jiān)督和無監(jiān)督的機(jī)器學(xué)習(xí)算法。這些算法需要格式化數(shù)據(jù)才能開始訓(xùn)練過程。我們必須以某種方式準(zhǔn)備或格式化數(shù)據(jù),以便它可以作為 ML 算法的輸入提供。
本章重點(diǎn)介紹機(jī)器學(xué)習(xí)算法的數(shù)據(jù)準(zhǔn)備。
預(yù)處理數(shù)據(jù)
在我們的日常生活中,我們處理大量數(shù)據(jù),但這些數(shù)據(jù)都是原始形式。為了提供數(shù)據(jù)作為機(jī)器學(xué)習(xí)算法的輸入,我們需要將其轉(zhuǎn)換為有意義的數(shù)據(jù)。這就是數(shù)據(jù)預(yù)處理的用武之地。換句話說,我們可以說,在將數(shù)據(jù)提供給機(jī)器學(xué)習(xí)算法之前,我們需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。
數(shù)據(jù)預(yù)處理步驟
按照以下步驟在 Python 中預(yù)處理數(shù)據(jù) -
第 1 步 - 導(dǎo)入有用的包- 如果我們使用 Python,那么這將是將數(shù)據(jù)轉(zhuǎn)換為特定格式的第一步,即預(yù)處理??梢园慈缦路绞酵瓿?-
import?numpy?as?np import?sklearn.preprocessing
在這里,我們使用了以下兩個(gè)包 -
NumPy?- 基本上,NumPy 是一個(gè)通用的數(shù)組處理包,旨在有效地操作任意記錄的大型多維數(shù)組,而不會(huì)為小型多維數(shù)組犧牲太多速度。
Sklearn.preprocessing?- 該包提供了許多常用的實(shí)用函數(shù)和轉(zhuǎn)換器類,用于將原始特征向量更改為更適合機(jī)器學(xué)習(xí)算法的表示。
第 2 步 - 定義樣本數(shù)據(jù)- 導(dǎo)入包后,我們需要定義一些樣本數(shù)據(jù),以便我們可以對(duì)該數(shù)據(jù)應(yīng)用預(yù)處理技術(shù)。我們現(xiàn)在將定義以下示例數(shù)據(jù) -
input_data?=?np.array([2.1,?-1.9,?5.5], ??????????????????????[-1.5,?2.4,?3.5], ??????????????????????[0.5,?-7.9,?5.6], ??????????????????????[5.9,?2.3,?-5.8])
Step3 - Applying preprocessing technique?- 在此步驟中,我們需要應(yīng)用任何預(yù)處理技術(shù)。
以下部分描述了數(shù)據(jù)預(yù)處理技術(shù)。
數(shù)據(jù)預(yù)處理技術(shù)
數(shù)據(jù)預(yù)處理技術(shù)如下所述 -
二值化
這是我們需要將數(shù)值轉(zhuǎn)換為布爾值時(shí)使用的預(yù)處理技術(shù)。我們可以使用內(nèi)置方法對(duì)輸入數(shù)據(jù)進(jìn)行二值化,例如通過以下方式使用 0.5 作為閾值 -
data_binarized?=?preprocessing.Binarizer(threshold?=?0.5).transform(input_data)print(" Binarized?data: ",?data_binarized)
現(xiàn)在,運(yùn)行上面的代碼后,我們將得到以下輸出,所有高于 0.5(閾值)的值將被轉(zhuǎn)換為 1,所有低于 0.5 的值將被轉(zhuǎn)換為 0。
二值化數(shù)據(jù)
[[?1.?0.?1.] [?0.?1.?1.] [?0.?0.?1.] [?1.?1.?0.]]
均值去除
這是機(jī)器學(xué)習(xí)中使用的另一種非常常見的預(yù)處理技術(shù)?;旧纤糜趶奶卣飨蛄恐邢?,以便每個(gè)特征都以零為中心。我們還可以去除特征向量中特征的偏差。為了對(duì)樣本數(shù)據(jù)應(yīng)用均值去除預(yù)處理技術(shù),我們可以編寫如下所示的 Python 代碼。該代碼將顯示輸入數(shù)據(jù)的均值和標(biāo)準(zhǔn)差 -
print("Mean?=?",?input_data.mean(axis?=?0)) print("Std?deviation?=?",?input_data.std(axis?=?0))
運(yùn)行以上代碼行后,我們將得到以下輸出 -
?????????Mean?=?[?1.75???????-1.275???????2.2] Std?deviation?=?[?2.71431391??4.20022321??4.69414529]
現(xiàn)在,下面的代碼將刪除輸入數(shù)據(jù)的均值和標(biāo)準(zhǔn)差 -
data_scaled?=?preprocessing.scale(input_data)print("Mean?=",?data_scaled.mean(axis=0))print("Std?deviation?=",?data_scaled.std(axis?=?0))
運(yùn)行以上代碼行后,我們將得到以下輸出 -
?????????Mean?=?[?1.11022302e-16?0.00000000e+00?0.00000000e+00] Std?deviation?=?[?1.?????????????1.?????????????1.]
縮放
這是另一種用于縮放特征向量的數(shù)據(jù)預(yù)處理技術(shù)。需要對(duì)特征向量進(jìn)行縮放,因?yàn)槊總€(gè)特征的值都可以在許多隨機(jī)值之間變化。換句話說,我們可以說縮放很重要,因?yàn)槲覀儾幌M魏翁卣骶C合變大或變小。借助以下 Python 代碼,我們可以縮放輸入數(shù)據(jù),即特征向量 -
# 最小最大縮放
data_scaler_minmax?=?preprocessing.MinMaxScaler(feature_range=(0,1))data_scaled_minmax?=?data_scaler_minmax.fit_transform(input_data)print?(" Min?max?scaled?data: ",?data_scaled_minmax)
運(yùn)行以上代碼行后,我們將得到以下輸出 -
最小最大縮放數(shù)據(jù)
[?[?0.48648649??0.58252427???0.99122807][???0.??????????1.???????????0.81578947][???0.27027027??0.???????????1.????????][???1.??????????0.?99029126??0.????????]]
正?;?/strong>
這是另一種用于修改特征向量的數(shù)據(jù)預(yù)處理技術(shù)。這種修改對(duì)于在通用尺度上測(cè)量特征向量是必要的。以下是可用于機(jī)器學(xué)習(xí)的兩種歸一化類型 -
L1歸一化
它也被稱為最小絕對(duì)偏差。這種歸一化會(huì)修改值,使每行中的絕對(duì)值總和始終為 1。它可以在以下 Python 代碼的幫助下在輸入數(shù)據(jù)上實(shí)現(xiàn) -
#?Normalize?data data_normalized_l1?=?preprocessing.normalize(input_data,?norm?=?'l1') print(" L1?normalized?data: ",?data_normalized_l1)
上面的代碼行生成以下輸出 &miuns;
L1?normalized?data: [[?0.22105263??-0.2??????????0.57894737] [?-0.2027027????0.32432432???0.47297297] [??0.03571429??-0.56428571???0.4???????] [??0.42142857???0.16428571??-0.41428571]]
L2 歸一化
它也稱為最小二乘法。這種歸一化會(huì)修改值,使每行的平方和始終等于 1。它可以在以下 Python 代碼的幫助下在輸入數(shù)據(jù)上實(shí)現(xiàn) -
#?Normalize?data data_normalized_l2?=?preprocessing.normalize(input_data,?norm?=?'l2') print(" L2?normalized?data: ",?data_normalized_l2)
上面的代碼行將生成以下輸出 -
L2?normalized?data: [[?0.33946114??-0.30713151???0.88906489] [?-0.33325106???0.53320169???0.7775858?] [??0.05156558??-0.81473612???0.57753446] [??0.68706914???0.26784051??-0.6754239?]]
標(biāo)記數(shù)據(jù)
我們已經(jīng)知道,某種格式的數(shù)據(jù)對(duì)于機(jī)器學(xué)習(xí)算法是必需的。另一個(gè)重要要求是,在將數(shù)據(jù)作為機(jī)器學(xué)習(xí)算法的輸入發(fā)送之前,必須正確標(biāo)記數(shù)據(jù)。例如,如果我們談?wù)摲诸?,?shù)據(jù)上有很多標(biāo)簽。那些標(biāo)簽的形式是文字,數(shù)字等。sklearn中機(jī)器學(xué)習(xí)相關(guān)的功能要求數(shù)據(jù)必須有數(shù)字標(biāo)簽。因此,如果數(shù)據(jù)是其他形式,則必須將其轉(zhuǎn)換為數(shù)字。這種將單詞標(biāo)簽轉(zhuǎn)換為數(shù)字形式的過程稱為標(biāo)簽編碼。
標(biāo)簽編碼步驟
按照以下步驟在 Python 中編碼數(shù)據(jù)標(biāo)簽 -
Step1 - 導(dǎo)入有用的包
如果我們使用 Python,那么這將是將數(shù)據(jù)轉(zhuǎn)換為特定格式的第一步,即預(yù)處理??梢园慈缦路绞酵瓿?-
import?numpy?as?npfrom?sklearn?import?preprocessing
第 2 步 - 定義樣本標(biāo)簽
導(dǎo)入包后,我們需要定義一些樣本標(biāo)簽,以便我們可以創(chuàng)建和訓(xùn)練標(biāo)簽編碼器。我們現(xiàn)在將定義以下樣本標(biāo)簽 -
#?Sample?input?labelsinput_labels?=?['red','black','red','green','black','yellow','white']
第 3 步 - 創(chuàng)建和訓(xùn)練標(biāo)簽編碼器對(duì)象
在這一步中,我們需要?jiǎng)?chuàng)建標(biāo)簽編碼器并對(duì)其進(jìn)行訓(xùn)練。以下 Python 代碼將有助于做到這一點(diǎn) -
#?Creating?the?label?encoder encoder?=?preprocessing.LabelEncoder() encoder.fit(input_labels)
以下是運(yùn)行上述 Python 代碼后的輸出 -
LabelEncoder()
Step4 - 通過編碼隨機(jī)有序列表來檢查性能
此步驟可用于通過對(duì)隨機(jī)有序列表進(jìn)行編碼來檢查性能??梢跃帉懸韵?Python 代碼來執(zhí)行相同的操作 -
#?encoding?a?set?of?labels test_labels?=?['green','red','black'] encoded_values?=?encoder.transform(test_labels) print(" Labels?=",?test_labels)
標(biāo)簽將打印如下 -
Labels?=?['green',?'red',?'black']
現(xiàn)在,我們可以獲得編碼值列表,即轉(zhuǎn)換為數(shù)字的單詞標(biāo)簽如下 -
print("Encoded?values?=",?list(encoded_values))
編碼值將打印如下 -
Encoded?values?=?[1,?2,?0]
第 5 步 - 通過解碼一組隨機(jī)數(shù)字來檢查性能 -
此步驟可用于通過解碼隨機(jī)數(shù)字集來檢查性能??梢跃帉懸韵?Python 代碼來執(zhí)行相同的操作 -
#?decoding?a?set?of?values encoded_values?=?[3,0,4,1] decoded_list?=?encoder.inverse_transform(encoded_values) print(" Encoded?values?=",?encoded_values)
現(xiàn)在,編碼值將打印如下 -
Encoded?values?=?[3,?0,?4,?1]print(" Decoded?labels?=",?list(decoded_list))
現(xiàn)在,解碼值將打印如下 -
Decoded?labels?=?['white',?'black',?'yellow',?'green']
標(biāo)記數(shù)據(jù)與未標(biāo)記數(shù)據(jù)
未標(biāo)記數(shù)據(jù)主要包括可以從世界上輕松獲得的自然或人造物體的樣本。它們包括音頻、視頻、照片、新聞文章等。
另一方面,標(biāo)記數(shù)據(jù)采用一組未標(biāo)記數(shù)據(jù),并使用一些有意義的標(biāo)記或標(biāo)簽或類來擴(kuò)充每個(gè)未標(biāo)記數(shù)據(jù)。例如,如果我們有一張照片,那么標(biāo)簽可以根據(jù)照片的內(nèi)容來放置,即它是男孩或女孩或動(dòng)物或其他任何東西的照片。標(biāo)記數(shù)據(jù)需要人類的專業(yè)知識(shí)或?qū)o定的未標(biāo)記數(shù)據(jù)的判斷。
在許多情況下,未標(biāo)記的數(shù)據(jù)很豐富且易于獲取,但標(biāo)記的數(shù)據(jù)通常需要人工/專家進(jìn)行注釋。半監(jiān)督學(xué)習(xí)試圖結(jié)合標(biāo)記和未標(biāo)記的數(shù)據(jù)來構(gòu)建更好的模型。
人工智能與 Python——監(jiān)督學(xué)習(xí):分類
在本章中,我們將重點(diǎn)關(guān)注實(shí)施監(jiān)督學(xué)習(xí)——分類。
分類技術(shù)或模型試圖從觀察值中得出一些結(jié)論。在分類問題中,我們有分類輸出,例如“黑色”或“白色”或“教學(xué)”和“非教學(xué)”。在構(gòu)建分類模型時(shí),我們需要有包含數(shù)據(jù)點(diǎn)和相應(yīng)標(biāo)簽的訓(xùn)練數(shù)據(jù)集。例如,如果我們想檢查圖像是否是汽車。為了檢查這一點(diǎn),我們將構(gòu)建一個(gè)包含與“汽車”和“無汽車”相關(guān)的兩個(gè)類別的訓(xùn)練數(shù)據(jù)集。然后我們需要使用訓(xùn)練樣本來訓(xùn)練模型。分類模型主要用于人臉識(shí)別、垃圾郵件識(shí)別等。
在 Python 中構(gòu)建分類器的步驟
為了在 Python 中構(gòu)建分類器,我們將使用 Python 3 和機(jī)器學(xué)習(xí)工具 Scikit-learn。按照以下步驟在 Python 中構(gòu)建分類器 -
第 1 步 - 導(dǎo)入 Scikit-learn
這將是在 Python 中構(gòu)建分類器的第一步。在這一步中,我們將安裝一個(gè)名為 Scikit-learn 的 Python 包,它是 Python 中最好的機(jī)器學(xué)習(xí)模塊之一。以下命令將幫助我們導(dǎo)入包 -
Import?Sklearn
第 2 步 - 導(dǎo)入 Scikit-learn 的數(shù)據(jù)集
在此步驟中,我們可以開始使用機(jī)器學(xué)習(xí)模型的數(shù)據(jù)集。在這里,我們將使用乳腺癌威斯康星診斷數(shù)據(jù)庫。該數(shù)據(jù)集包括有關(guān)乳腺癌腫瘤的各種信息,以及惡性或良性的分類標(biāo)簽。該數(shù)據(jù)集包含 569 個(gè)腫瘤的 569 個(gè)實(shí)例或數(shù)據(jù),并包含有關(guān) 30 個(gè)屬性或特征的信息,例如腫瘤的半徑、紋理、平滑度和面積。借助以下命令,我們可以導(dǎo)入 Scikit-learn 的乳腺癌數(shù)據(jù)集 -
from?sklearn.datasets?import?load_breast_cancer
現(xiàn)在,以下命令將加載數(shù)據(jù)集。
data?=?load_breast_cancer()
以下是重要字典鍵的列表 -
分類標(biāo)簽名稱(target_names)
實(shí)際標(biāo)簽(目標(biāo))
屬性/特征名稱(feature_names)
屬性(數(shù)據(jù))
現(xiàn)在,借助以下命令,我們可以為每組重要信息創(chuàng)建新變量并分配數(shù)據(jù)。換句話說,我們可以使用以下命令組織數(shù)據(jù) -
label_names?=?data['target_names'] labels?=?data['target'] feature_names?=?data['feature_names'] features?=?data['data']
現(xiàn)在,為了更清楚,我們可以在以下命令的幫助下打印類標(biāo)簽、第一個(gè)數(shù)據(jù)實(shí)例的標(biāo)簽、我們的特征名稱和特征值 -
print(label_names)
上面的命令將分別打印出惡性和良性的類名。它顯示為下面的輸出 -
['malignant'?'benign']
現(xiàn)在,下面的命令將顯示它們被映射到二進(jìn)制值 0 和 1。這里 0 代表惡性癌癥,1 代表良性癌癥。您將收到以下輸出 -
print(labels[0]) 0
下面給出的兩個(gè)命令將生成特征名稱和特征值。
print(feature_names[0]) mean?radius print(features[0]) [?1.79900000e+01?1.03800000e+01?1.22800000e+02?1.00100000e+03 ??1.18400000e-01?2.77600000e-01?3.00100000e-01?1.47100000e-01 ??2.41900000e-01?7.87100000e-02?1.09500000e+00?9.05300000e-01 ??8.58900000e+00?1.53400000e+02?6.39900000e-03?4.90400000e-02 ??5.37300000e-02?1.58700000e-02?3.00300000e-02?6.19300000e-03 ??2.53800000e+01?1.73300000e+01?1.84600000e+02?2.01900000e+03 ??1.62200000e-01?6.65600000e-01?7.11900000e-01?2.65400000e-01 ??4.60100000e-01?1.18900000e-01]
從上面的輸出可以看出,第一個(gè)數(shù)據(jù)實(shí)例是一個(gè)惡性腫瘤,其半徑為1.7990000e+01。
第 3 步 - 將數(shù)據(jù)組織成集合
在這一步中,我們將把數(shù)據(jù)分成兩部分,即訓(xùn)練集和測(cè)試集。將數(shù)據(jù)分成這些集合非常重要,因?yàn)槲覀儽仨氃诳床灰姷臄?shù)據(jù)上測(cè)試我們的模型。為了將數(shù)據(jù)拆分成集合,sklearn 有一個(gè)名為train_test_split()的函數(shù)。在以下命令的幫助下,我們可以拆分這些集中的數(shù)據(jù) -
from?sklearn.model_selection?import?train_test_split
上面的命令將從 sklearn 導(dǎo)入train_test_split函數(shù),下面的命令將數(shù)據(jù)拆分為訓(xùn)練和測(cè)試數(shù)據(jù)。在下面給出的示例中,我們使用 40% 的數(shù)據(jù)進(jìn)行測(cè)試,其余數(shù)據(jù)將用于訓(xùn)練模型。
train,?test,?train_labels,?test_labels?=?train_test_split(features,labels,test_size?=?0.40,?random_state?=?42)
第 4 步 - 構(gòu)建模型
在這一步中,我們將構(gòu)建我們的模型。我們將使用樸素貝葉斯算法來構(gòu)建模型。以下命令可用于構(gòu)建模型 -
from?sklearn.naive_bayes?import?GaussianNB
上面的命令將導(dǎo)入 GaussianNB 模塊?,F(xiàn)在,以下命令將幫助您初始化模型。
gnb?=?GaussianNB()
我們將通過使用 gnb.fit() 將模型擬合到數(shù)據(jù)來訓(xùn)練模型。
model?=?gnb.fit(train,?train_labels)
第 5 步 - 評(píng)估模型及其準(zhǔn)確性
在這一步中,我們將通過對(duì)測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè)來評(píng)估模型。然后我們也會(huì)發(fā)現(xiàn)它的準(zhǔn)確性。為了進(jìn)行預(yù)測(cè),我們將使用 predict() 函數(shù)。以下命令將幫助您執(zhí)行此操作 -
preds?=?gnb.predict(test) print(preds) [1?0?0?1?1?0?0?0?1?1?1?0?1?0?1?0?1?1?1?0?1?1?0?1?1?1?1?1?1 ?0?1?1?1?1?1?1?0?1?0?1?1?0?1?1?1?1?1?1?1?1?0?0?1?1?1?1?1?0? ?0?1?1?0?0?1?1?1?0?0?1?1?0?0?1?0?1?1?1?1?1?1?0?1?1?0?0?0?0? ?0?1?1?1?1?1?1?1?1?0?0?1?0?0?1?0?0?1?1?1?0?1?1?0?1?1?0?0?0? ?1?1?1?0?0?1?1?0?1?0?0?1?1?0?0?0?1?1?1?0?1?1?0?0?1?0?1?1?0? ?1?0?0?1?1?1?1?1?1?1?0?0?1?1?1?1?1?1?1?1?1?1?1?1?0?1?1?1?0? ?1?1?0?1?1?1?1?1?1?0?0?0?1?1?0?1?0?1?1?1?1?0?1?1?0?1?1?1?0? ?1?0?0?1?1?1?1?1?1?1?1?0?1?1?1?1?1?0?1?0?0?1?1?0?1]
上面的一系列 0 和 1 是腫瘤類別(惡性和良性)的預(yù)測(cè)值。
現(xiàn)在,通過比較兩個(gè)數(shù)組,即test_labels和preds,我們可以找出模型的準(zhǔn)確性。我們將使用accuracy_score()函數(shù)來確定準(zhǔn)確性。為此考慮以下命令 -
from?sklearn.metrics?import?accuracy_score print(accuracy_score(test_labels,preds)) 0.951754385965
結(jié)果表明,Na?veBayes 分類器的準(zhǔn)確率為 95.17%。
這樣,借助上述步驟,我們就可以在 Python 中構(gòu)建我們的分類器了。
在 Python 中構(gòu)建分類器
在本節(jié)中,我們將學(xué)習(xí)如何在 Python 中構(gòu)建分類器。
樸素貝葉斯分類器
樸素貝葉斯是一種分類技術(shù),用于使用貝葉斯定理構(gòu)建分類器。假設(shè)預(yù)測(cè)變量是獨(dú)立的。簡(jiǎn)而言之,它假設(shè)類中特定特征的存在與任何其他特征的存在無關(guān)。為了構(gòu)建樸素貝葉斯分類器,我們需要使用名為 scikit learn 的 python 庫。scikit 學(xué)習(xí)包下有三種樸素貝葉斯模型,分別是高斯模型、多項(xiàng)式模型和伯努利模型。
要構(gòu)建樸素貝葉斯機(jī)器學(xué)習(xí)分類器模型,我們需要以下 &minus
數(shù)據(jù)集
我們將使用名為Breast Cancer Wisconsin Diagnostic Database 的數(shù)據(jù)集。該數(shù)據(jù)集包括有關(guān)乳腺癌腫瘤的各種信息,以及惡性或良性的分類標(biāo)簽。該數(shù)據(jù)集包含 569 個(gè)腫瘤的 569 個(gè)實(shí)例或數(shù)據(jù),并包含有關(guān) 30 個(gè)屬性或特征的信息,例如腫瘤的半徑、紋理、平滑度和面積。我們可以從 sklearn 包導(dǎo)入這個(gè)數(shù)據(jù)集。
樸素貝葉斯模型
為了構(gòu)建樸素貝葉斯分類器,我們需要一個(gè)樸素貝葉斯模型。如前所述,scikit 學(xué)習(xí)包下有三種類型的樸素貝葉斯模型,分別是高斯模型、多項(xiàng)式模型和伯努利模型。在這里,在下面的示例中,我們將使用高斯樸素貝葉斯模型。
通過以上內(nèi)容,我們將構(gòu)建一個(gè)樸素貝葉斯機(jī)器學(xué)習(xí)模型,以使用腫瘤信息來預(yù)測(cè)腫瘤是惡性還是良性。
首先,我們需要安裝 sklearn 模塊。它可以在以下命令的幫助下完成 -
Import?Sklearn
現(xiàn)在,我們需要導(dǎo)入名為 Breast Cancer Wisconsin Diagnostic Database 的數(shù)據(jù)集。
from?sklearn.datasets?import?load_breast_cancer
現(xiàn)在,以下命令將加載數(shù)據(jù)集。
data?=?load_breast_cancer()
數(shù)據(jù)可以組織如下 -
label_names?=?data['target_names']labels?=?data['target']feature_names?=?data['feature_names']features?=?data['data']
現(xiàn)在,為了更清楚,我們可以在以下命令的幫助下打印類標(biāo)簽、第一個(gè)數(shù)據(jù)實(shí)例的標(biāo)簽、我們的特征名稱和特征值 -
print(label_names)
上面的命令將分別打印出惡性和良性的類名。它顯示為下面的輸出 -
['malignant'?'benign']
現(xiàn)在,下面給出的命令將顯示它們被映射到二進(jìn)制值 0 和 1。這里 0 代表惡性癌癥,1 代表良性癌癥。它顯示為下面的輸出 -
print(labels[0]) 0
以下兩個(gè)命令將生成特征名稱和特征值。
print(feature_names[0]) mean?radius print(features[0]) [?1.79900000e+01?1.03800000e+01?1.22800000e+02?1.00100000e+03 ??1.18400000e-01?2.77600000e-01?3.00100000e-01?1.47100000e-01 ??2.41900000e-01?7.87100000e-02?1.09500000e+00?9.05300000e-01 ??8.58900000e+00?1.53400000e+02?6.39900000e-03?4.90400000e-02 ??5.37300000e-02?1.58700000e-02?3.00300000e-02?6.19300000e-03 ??2.53800000e+01?1.73300000e+01?1.84600000e+02?2.01900000e+03 ??1.62200000e-01?6.65600000e-01?7.11900000e-01?2.65400000e-01 ??4.60100000e-01?1.18900000e-01]
從上面的輸出可以看出,第一個(gè)數(shù)據(jù)實(shí)例是一個(gè)惡性腫瘤,其主要半徑為1.7990000e+01。
為了在看不見的數(shù)據(jù)上測(cè)試我們的模型,我們需要將數(shù)據(jù)拆分為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。它可以在以下代碼的幫助下完成 -
from?sklearn.model_selection?import?train_test_split
上面的命令將從 sklearn 導(dǎo)入train_test_split函數(shù),下面的命令將數(shù)據(jù)拆分為訓(xùn)練和測(cè)試數(shù)據(jù)。在下面的示例中,我們使用 40% 的數(shù)據(jù)進(jìn)行測(cè)試,而重新挖掘的數(shù)據(jù)將用于訓(xùn)練模型。
train,?test,?train_labels,?test_labels?=?train_test_split(features,labels,test_size?=?0.40,?random_state?=?42)
現(xiàn)在,我們正在使用以下命令構(gòu)建模型 -
from?sklearn.naive_bayes?import?GaussianNB
上面的命令將導(dǎo)入GaussianNB模塊?,F(xiàn)在,使用下面給出的命令,我們需要初始化模型。
gnb?=?GaussianNB()
我們將通過使用gnb.fit()將模型擬合到數(shù)據(jù)來訓(xùn)練模型。
model?=?gnb.fit(train,?train_labels)
現(xiàn)在,通過對(duì)測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè)來評(píng)估模型,可以按如下方式完成 -
preds?=?gnb.predict(test)print(preds)[1?0?0?1?1?0?0?0?1?1?1?0?1?0?1?0?1?1?1?0?1?1?0?1?1?1?1?1?1 ?0?1?1?1?1?1?1?0?1?0?1?1?0?1?1?1?1?1?1?1?1?0?0?1?1?1?1?1?0? ?0?1?1?0?0?1?1?1?0?0?1?1?0?0?1?0?1?1?1?1?1?1?0?1?1?0?0?0?0? ?0?1?1?1?1?1?1?1?1?0?0?1?0?0?1?0?0?1?1?1?0?1?1?0?1?1?0?0?0? ?1?1?1?0?0?1?1?0?1?0?0?1?1?0?0?0?1?1?1?0?1?1?0?0?1?0?1?1?0? ?1?0?0?1?1?1?1?1?1?1?0?0?1?1?1?1?1?1?1?1?1?1?1?1?0?1?1?1?0? ?1?1?0?1?1?1?1?1?1?0?0?0?1?1?0?1?0?1?1?1?1?0?1?1?0?1?1?1?0? ?1?0?0?1?1?1?1?1?1?1?1?0?1?1?1?1?1?0?1?0?0?1?1?0?1]
上面的一系列 0 和 1 是腫瘤類別(即惡性和良性)的預(yù)測(cè)值。
現(xiàn)在,通過比較兩個(gè)數(shù)組,即test_labels和preds,我們可以找出模型的準(zhǔn)確性。我們將使用accuracy_score()函數(shù)來確定準(zhǔn)確性??紤]以下命令 -
from?sklearn.metrics?import?accuracy_score print(accuracy_score(test_labels,preds)) 0.951754385965
結(jié)果表明,Na?veBayes 分類器的準(zhǔn)確率為 95.17%。
那是基于樸素貝斯高斯模型的機(jī)器學(xué)習(xí)分類器。
支持向量機(jī) (SVM)
基本上,支持向量機(jī) (SVM) 是一種有監(jiān)督的機(jī)器學(xué)習(xí)算法,可用于回歸和分類。SVM 的主要概念是將每個(gè)數(shù)據(jù)項(xiàng)繪制為 n 維空間中的一個(gè)點(diǎn),每個(gè)特征的值是特定坐標(biāo)的值。這里 n 是我們將擁有的特征。以下是理解 SVM 概念的簡(jiǎn)單圖形表示 -
在上圖中,我們有兩個(gè)特征。因此,我們首先需要在二維空間中繪制這兩個(gè)變量,其中每個(gè)點(diǎn)都有兩個(gè)坐標(biāo),稱為支持向量。該線將數(shù)據(jù)分成兩個(gè)不同的分類組。這條線就是分類器。
在這里,我們將使用 scikit-learn 和 iris 數(shù)據(jù)集構(gòu)建一個(gè) SVM 分類器。Scikitlearn 庫有sklearn.svm模塊,并提供 sklearn.svm.svc 用于分類?;?4 個(gè)特征預(yù)測(cè)鳶尾植物類別的 SVM 分類器如下所示。
數(shù)據(jù)集
我們將使用鳶尾花數(shù)據(jù)集,其中包含 3 個(gè)類,每個(gè)類有 50 個(gè)實(shí)例,其中每個(gè)類指的是一種鳶尾植物。每個(gè)實(shí)例都有四個(gè)特征,即萼片長(zhǎng)度、萼片寬度、花瓣長(zhǎng)度和花瓣寬度?;?4 個(gè)特征預(yù)測(cè)鳶尾植物類別的 SVM 分類器如下所示。
核心
它是 SVM 使用的一種技術(shù)?;旧线@些是采用低維輸入空間并將其轉(zhuǎn)換為高維空間的函數(shù)。它將不可分離的問題轉(zhuǎn)化為可分離的問題。核函數(shù)可以是線性、多項(xiàng)式、rbf 和 sigmoid 中的任意一種。在這個(gè)例子中,我們將使用線性內(nèi)核。
現(xiàn)在讓我們導(dǎo)入以下包 -
import?pandas?as?pdimport?numpy?as?npfrom?sklearn?import?svm,?datasetsimport?matplotlib.pyplot?as?plt
現(xiàn)在,加載輸入數(shù)據(jù) -
iris?=?datasets.load_iris()
我們正在采用前兩個(gè)功能 -
X?=?iris.data[:,?:2]y?=?iris.target
我們將用原始數(shù)據(jù)繪制支持向量機(jī)邊界。我們正在創(chuàng)建一個(gè)網(wǎng)格來繪制。
x_min,?x_max?=?X[:,?0].min()?-?1,?X[:,?0].max()?+?1y_min,?y_max?=?X[:,?1].min()?-?1,?X[:,?1].max()?+?1h?=?(x_max?/?x_min)/100xx,?yy?=?np.meshgrid(np.arange(x_min,?x_max,?h),np.arange(y_min,?y_max,?h))X_plot?=?np.c_[xx.ravel(),?yy.ravel()]
我們需要給出正則化參數(shù)的值。
C?=?1.0
我們需要?jiǎng)?chuàng)建 SVM 分類器對(duì)象。
Svc_classifier?=?svm_classifier.SVC(kernel='linear',?C=C,?decision_function_shape?=?'ovr').fit(X,?y)Z?=?svc_classifier.predict(X_plot)Z?=?Z.reshape(xx.shape)plt.figure(figsize?=?(15,?5))plt.subplot(121)plt.contourf(xx,?yy,?Z,?cmap?=?plt.cm.tab10,?alpha?=?0.3)plt.scatter(X[:,?0],?X[:,?1],?c?=?y,?cmap?=?plt.cm.Set1)plt.xlabel('Sepal?length')plt.ylabel('Sepal?width')plt.xlim(xx.min(),?xx.max())plt.title('SVC?with?linear?kernel')
邏輯回歸
基本上,邏輯回歸模型是監(jiān)督分類算法家族的成員之一。邏輯回歸通過使用邏輯函數(shù)估計(jì)概率來衡量因變量和自變量之間的關(guān)系。
在這里,如果我們談?wù)撘蜃兞亢妥宰兞浚敲匆蜃兞烤褪俏覀円A(yù)測(cè)的目標(biāo)類變量,而另一方面,自變量是我們要用來預(yù)測(cè)目標(biāo)類的特征。
在邏輯回歸中,估計(jì)概率意味著預(yù)測(cè)事件發(fā)生的可能性。例如,店主想預(yù)測(cè)進(jìn)入商店的顧客是否會(huì)購買游戲站(例如)。顧客會(huì)有很多特征——性別、年齡等,店主會(huì)觀察這些特征來預(yù)測(cè)發(fā)生的可能性,即是否購買游戲機(jī)。邏輯函數(shù)是用于構(gòu)建具有各種參數(shù)的函數(shù)的 S 型曲線。
先決條件
在使用邏輯回歸構(gòu)建分類器之前,我們需要在我們的系統(tǒng)上安裝 Tkinter 包。它可以從https://docs.python.org/2/library/tkinter.html安裝。
現(xiàn)在,借助下面給出的代碼,我們可以使用邏輯回歸創(chuàng)建分類器 -
首先,我們將導(dǎo)入一些包 -
import?numpy?as?npfrom?sklearn?import?linear_modelimport?matplotlib.pyplot?as?plt
現(xiàn)在,我們需要定義樣本數(shù)據(jù),可以按如下方式完成 -
X?=?np.array([[2,?4.8],?[2.9,?4.7],?[2.5,?5],?[3.2,?5.5],?[6,?5],?[7.6,?4], ??????????????[3.2,?0.9],?[2.9,?1.9],[2.4,?3.5],?[0.5,?3.4],?[1,?4],?[0.9,?5.9]])y?=?np.array([0,?0,?0,?1,?1,?1,?2,?2,?2,?3,?3,?3])
接下來,我們需要?jiǎng)?chuàng)建邏輯回歸分類器,可以按如下方式完成 -
Classifier_LR?=?linear_model.LogisticRegression(solver?=?'liblinear',?C?=?75)
最后但并非最不重要的是,我們需要訓(xùn)練這個(gè)分類器 -
Classifier_LR.fit(X,?y)
現(xiàn)在,我們?nèi)绾慰梢暬敵觯窟@可以通過創(chuàng)建一個(gè)名為 Logistic_visualize() 的函數(shù)來完成 -
Def?Logistic_visualize(Classifier_LR,?X,?y): ???min_x,?max_x?=?X[:,?0].min()?-?1.0,?X[:,?0].max()?+?1.0 ???min_y,?max_y?=?X[:,?1].min()?-?1.0,?X[:,?1].max()?+?1.0
在上面的行中,我們定義了要在網(wǎng)格中使用的最小值和最大值 X 和 Y。此外,我們將定義繪制網(wǎng)格的步長(zhǎng)。
mesh_step_size?=?0.02
讓我們定義 X 和 Y 值的網(wǎng)格如下 -
x_vals,?y_vals?=?np.meshgrid(np.arange(min_x,?max_x,?mesh_step_size), ?????????????????np.arange(min_y,?max_y,?mesh_step_size))
借助以下代碼,我們可以在網(wǎng)格上運(yùn)行分類器 -
output?=?classifier.predict(np.c_[x_vals.ravel(),?y_vals.ravel()])output?=?output.reshape(x_vals.shape)plt.figure()plt.pcolormesh(x_vals,?y_vals,?output,?cmap?=?plt.cm.gray) ?plt.scatter(X[:,?0],?X[:,?1],?c?=?y,?s?=?75,?edgecolors?=?'black',?linewidth=1,?cmap?=?plt.cm.Paired)
以下代碼行將指定繪圖的邊界
plt.xlim(x_vals.min(),?x_vals.max())plt.ylim(y_vals.min(),?y_vals.max())plt.xticks((np.arange(int(X[:,?0].min()?-?1),?int(X[:,?0].max()?+?1),?1.0)))plt.yticks((np.arange(int(X[:,?1].min()?-?1),?int(X[:,?1].max()?+?1),?1.0)))plt.show()
現(xiàn)在,運(yùn)行代碼后我們將得到以下輸出,邏輯回歸分類器 -
決策樹分類器
決策樹基本上是一個(gè)二叉樹流程圖,其中每個(gè)節(jié)點(diǎn)根據(jù)某個(gè)特征變量拆分一組觀察值。
在這里,我們正在構(gòu)建一個(gè)決策樹分類器來預(yù)測(cè)男性或女性。我們將采用一個(gè)包含 19 個(gè)樣本的非常小的數(shù)據(jù)集。這些樣本將包含兩個(gè)特征——“身高”和“頭發(fā)長(zhǎng)度”。
先決條件
為了構(gòu)建以下分類器,我們需要安裝pydotplus和graphviz?;旧?,graphviz 是一個(gè)使用點(diǎn)文件繪制圖形的工具,而pydotplus是 Graphviz 的點(diǎn)語言的一個(gè)模塊。它可以使用包管理器或 pip 安裝。
現(xiàn)在,我們可以在以下 Python 代碼的幫助下構(gòu)建決策樹分類器 -
首先,讓我們按如下方式導(dǎo)入一些重要的庫 -
import?pydotplusfrom?sklearn?import?treefrom?sklearn.datasets?import?load_irisfrom?sklearn.metrics?import?classification_reportfrom?sklearn?import?cross_validationimport?collections
現(xiàn)在,我們需要提供如下數(shù)據(jù)集 -
X?=?[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15],[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[126,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,25]]Y?=?['Man','Woman','Woman','Man','Woman','Man','Woman','Man','Woman','Man','Woman','Man','Woman','Woman','Woman','Man','Woman','Woman','Man']data_feature_names?=?['height','length?of?hair']X_train,?X_test,?Y_train,?Y_test?=?cross_validation.train_test_split(X,?Y,?test_size=0.40,?random_state=5)
提供數(shù)據(jù)集后,我們需要擬合模型,可以按如下方式完成 -
clf?=?tree.DecisionTreeClassifier()clf?=?clf.fit(X,Y)
可以借助以下 Python 代碼進(jìn)行預(yù)測(cè) -
prediction?=?clf.predict([[133,37]]) print(prediction)
我們可以借助以下 Python 代碼可視化決策樹 -
dot_data?=?tree.export_graphviz(clf,feature_names?=?data_feature_names, ????????????out_file?=?None,filled?=?True,rounded?=?True) graph?=?pydotplus.graph_from_dot_data(dot_data) colors?=?('orange',?'yellow') edges?=?collections.defaultdict(list) for?edge?in?graph.get_edge_list(): edges[edge.get_source()].append(int(edge.get_destination())) for?edge?in?edges:?edges[edge].sort() for?i?in?range(2):dest?=?graph.get_node(str(edges[edge][i]))[0] dest.set_fillcolor(colors[i]) graph.write_png('Decisiontree16.png')
它將對(duì)上述代碼的預(yù)測(cè)作為['Woman']并創(chuàng)建以下決策樹 -
我們可以改變預(yù)測(cè)中的特征值來測(cè)試它。
隨機(jī)森林分類器
眾所周知,集成方法是將機(jī)器學(xué)習(xí)模型組合成更強(qiáng)大的機(jī)器學(xué)習(xí)模型的方法。決策樹的集合隨機(jī)森林就是其中之一。它比單個(gè)決策樹更好,因?yàn)樵诒A纛A(yù)測(cè)能力的同時(shí),它可以通過對(duì)結(jié)果進(jìn)行平均來減少過度擬合。在這里,我們將在 scikit 學(xué)習(xí)癌癥數(shù)據(jù)集上實(shí)現(xiàn)隨機(jī)森林模型。
導(dǎo)入必要的包 -
from?sklearn.ensemble?import?RandomForestClassifierfrom?sklearn.model_selection?import?train_test_splitfrom?sklearn.datasets?import?load_breast_cancer cancer?=?load_breast_cancer()import?matplotlib.pyplot?as?pltimport?numpy?as?np
現(xiàn)在,我們需要提供可以按以下方式完成的數(shù)據(jù)集 &minus
cancer?=?load_breast_cancer()X_train,?X_test,?y_train,y_test?=?train_test_split(cancer.data,?cancer.target,?random_state?=?0)
提供數(shù)據(jù)集后,我們需要擬合模型,可以按如下方式完成 -
forest?=?RandomForestClassifier(n_estimators?=?50,?random_state?=?0)forest.fit(X_train,y_train)
現(xiàn)在,獲得訓(xùn)練子集和測(cè)試子集的準(zhǔn)確性:如果我們?cè)黾庸烙?jì)器的數(shù)量,那么測(cè)試子集的準(zhǔn)確性也會(huì)提高。
print('Accuracy?on?the?training?subset:(:.3f)',format(forest.score(X_train,y_train)))print('Accuracy?on?the?training?subset:(:.3f)',format(forest.score(X_test,y_test)))
輸出
Accuracy?on?the?training?subset:(:.3f)?1.0 Accuracy?on?the?training?subset:(:.3f)?0.965034965034965
現(xiàn)在,與決策樹一樣,隨機(jī)森林具有feature_importance模塊,它將提供比決策樹更好的特征權(quán)重視圖。它可以繪制和可視化如下 -
n_features?=?cancer.data.shape[1]plt.barh(range(n_features),forest.feature_importances_,?align='center')plt.yticks(np.arange(n_features),cancer.feature_names)plt.xlabel('Feature?Importance')plt.ylabel('Feature')plt.show()
分類器的性能
實(shí)施機(jī)器學(xué)習(xí)算法后,我們需要了解模型的有效性。衡量有效性的標(biāo)準(zhǔn)可以基于數(shù)據(jù)集和度量。為了評(píng)估不同的機(jī)器學(xué)習(xí)算法,我們可以使用不同的性能指標(biāo)。例如,假設(shè)如果使用分類器來區(qū)分不同對(duì)象的圖像,我們可以使用平均準(zhǔn)確度、AUC 等分類性能指標(biāo)。在某種意義上,我們選擇評(píng)估機(jī)器學(xué)習(xí)模型的指標(biāo)是非常重要,因?yàn)橹笜?biāo)的選擇會(huì)影響機(jī)器學(xué)習(xí)算法性能的測(cè)量和比較方式。以下是一些指標(biāo) -
混淆矩陣
基本上它用于分類問題,其中輸出可以是兩種或多種類型的類。這是衡量分類器性能的最簡(jiǎn)單方法。混淆矩陣基本上是一個(gè)具有兩個(gè)維度的表,即“實(shí)際”和“預(yù)測(cè)”。這兩個(gè)維度都有“True Positives (TP)”、“True Negatives (TN)”、“False Positives (FP)”、“False Negatives (FN)”。
在上面的混淆矩陣中,1 代表正類,0 代表負(fù)類。
以下是與混淆矩陣相關(guān)的術(shù)語 -
True Positives -?TP 是數(shù)據(jù)點(diǎn)的實(shí)際類別為 1 且預(yù)測(cè)也為 1 的情況。
True Negatives -?TNs 是數(shù)據(jù)點(diǎn)的實(shí)際類別為 0 且預(yù)測(cè)也為 0 的情況。
False Positives -?FPs 是數(shù)據(jù)點(diǎn)的實(shí)際類別為 0 而預(yù)測(cè)也為 1 的情況。
假陰性-?FN 是數(shù)據(jù)點(diǎn)的實(shí)際類別為 1 而預(yù)測(cè)也為 0 的情況。
準(zhǔn)確性
混淆矩陣本身并不是性能度量,但幾乎所有性能矩陣都基于混淆矩陣。其中之一是準(zhǔn)確性。在分類問題中,它可以定義為模型在所有類型的預(yù)測(cè)中做出的正確預(yù)測(cè)的數(shù)量。計(jì)算精度的公式如下 -
$$準(zhǔn)確度 = rac{TP+TN}{TP+FP+FN+TN}$$
精確
它主要用于文檔檢索。它可以定義為有多少返回的文檔是正確的。以下是計(jì)算精度的公式 -
$$精度 = rac{TP}{TP+FP}$$
召回或敏感性
它可以定義為模型返回了多少正數(shù)。以下是計(jì)算模型召回率/靈敏度的公式 -
$$召回 = rac{TP}{TP+FN}$$
特異性
它可以定義為模型返回了多少負(fù)數(shù)。它與召回正好相反。以下是計(jì)算模型特異性的公式 -
$$特異性 = rac{TN}{TN+FP}$$
階級(jí)失衡問題
類別不平衡是指屬于一個(gè)類別的觀測(cè)值數(shù)量明顯低于屬于其他類別的觀測(cè)值數(shù)量的情況。例如,在我們需要識(shí)別罕見病、銀行欺詐交易等場(chǎng)景中,這個(gè)問題就比較突出。
不平衡類的例子
讓我們考慮一個(gè)欺詐檢測(cè)數(shù)據(jù)集的例子來理解不平衡類的概念 -
Total?observations?=?5000Fraudulent?Observations?=?50Non-Fraudulent?Observations?=?4950Event?Rate?=?1%
解決方案
平衡類的行為是解決不平衡類的方法。平衡類的主要目標(biāo)是增加少數(shù)類的頻率或減少多數(shù)類的頻率。以下是解決不平衡類問題的方法 -
重采樣
重采樣是用于重建樣本數(shù)據(jù)集的一系列方法——包括訓(xùn)練集和測(cè)試集。重新采樣是為了提高模型的準(zhǔn)確性。以下是一些重采樣技術(shù) -
Random Under-Sampling?- 該技術(shù)旨在通過隨機(jī)消除多數(shù)類示例來平衡類分布。這樣做直到多數(shù)和少數(shù)類實(shí)例被平衡。
Total?observations?=?5000Fraudulent?Observations?=?50Non-Fraudulent?Observations?=?4950Event?Rate?=?1%
在這種情況下,我們從非欺詐實(shí)例中無替換地抽取 10% 的樣本,然后將它們與欺詐實(shí)例結(jié)合起來 -
隨機(jī)抽樣后的非欺詐性觀察 = 4950 的 10% = 495
將它們與欺詐性觀察相結(jié)合后的總觀察 = 50+495 = 545
因此現(xiàn)在,欠采樣后新數(shù)據(jù)集的事件率 = 9%
這種技術(shù)的主要優(yōu)點(diǎn)是它可以減少運(yùn)行時(shí)間并改善存儲(chǔ)。但另一方面,它可以丟棄有用的信息,同時(shí)減少訓(xùn)練數(shù)據(jù)樣本的數(shù)量。
Random Over-Sampling?- 這種技術(shù)旨在通過復(fù)制它們來增加少數(shù)類中的實(shí)例數(shù)量來平衡類分布。
Total?observations?=?5000Fraudulent?Observations?=?50Non-Fraudulent?Observations?=?4950Event?Rate?=?1%
如果我們將 50 個(gè)欺詐性觀察復(fù)制 30 次,那么復(fù)制少數(shù)類觀察后的欺詐性觀察將是 1500。然后在過采樣后新數(shù)據(jù)中的總觀察將是 4950+1500 = 6450。因此新數(shù)據(jù)集的事件率將是 1500/6450 = 23%。
這種方法的主要優(yōu)點(diǎn)是不會(huì)丟失有用的信息。但另一方面,它增加了過度擬合的機(jī)會(huì),因?yàn)樗鼜?fù)制了少數(shù)類事件。
合奏技巧
這種方法基本上用于修改現(xiàn)有的分類算法,使其適用于不平衡的數(shù)據(jù)集。在這種方法中,我們從原始數(shù)據(jù)構(gòu)建了幾個(gè)兩階段分類器,然后聚合它們的預(yù)測(cè)。隨機(jī)森林分類器是基于集成的分類器的一個(gè)例子。