機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語言實(shí)現(xiàn) 課件全套 高延增 第1-10章 概述、基礎(chǔ)知識(shí)- 用于處理時(shí)間序列的網(wǎng)絡(luò)_第1頁
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語言實(shí)現(xiàn) 課件全套 高延增 第1-10章 概述、基礎(chǔ)知識(shí)- 用于處理時(shí)間序列的網(wǎng)絡(luò)_第2頁
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語言實(shí)現(xiàn) 課件全套 高延增 第1-10章 概述、基礎(chǔ)知識(shí)- 用于處理時(shí)間序列的網(wǎng)絡(luò)_第3頁
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語言實(shí)現(xiàn) 課件全套 高延增 第1-10章 概述、基礎(chǔ)知識(shí)- 用于處理時(shí)間序列的網(wǎng)絡(luò)_第4頁
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語言實(shí)現(xiàn) 課件全套 高延增 第1-10章 概述、基礎(chǔ)知識(shí)- 用于處理時(shí)間序列的網(wǎng)絡(luò)_第5頁
已閱讀5頁,還剩449頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

概述《機(jī)器學(xué)習(xí)簡(jiǎn)明教程》01目錄/Contents1.11.2理解機(jī)器學(xué)習(xí)一些相關(guān)概念1.3機(jī)器學(xué)習(xí)的發(fā)展1.4開發(fā)環(huán)境準(zhǔn)備1.1理解機(jī)器學(xué)習(xí)——一個(gè)例子網(wǎng)站怎樣在海量的電影庫中找出少數(shù)幾部你可能喜歡的電影呢?這背后的推薦邏輯是什么?1.1理解機(jī)器學(xué)習(xí)——一個(gè)例子預(yù)先對(duì)影片庫里的電影進(jìn)行處理,給它們?cè)O(shè)計(jì)一些特征,能夠用這些特征來描述電影;對(duì)網(wǎng)站的用戶進(jìn)行數(shù)據(jù)標(biāo)注;記錄歷史數(shù)據(jù),包括所有電影被觀看情況、所有用戶觀看電影的情況等。收集、記錄數(shù)據(jù)只是第一步,還需要大量的數(shù)據(jù)處理工作,才能更好利用這些數(shù)據(jù)中蘊(yùn)藏的大量信息。機(jī)器學(xué)習(xí)并不是預(yù)先定義好的固定代碼,而是從歷史數(shù)據(jù)中推導(dǎo)出來的。1.1理解機(jī)器學(xué)習(xí)——計(jì)算電影相似性的方法示例如何衡量電影、用戶的相似性?問題簡(jiǎn)化,假設(shè)每部電影只有兩個(gè)特征(評(píng)分、時(shí)長(zhǎng))分別作為橫、縱坐標(biāo),那每一部電影都可以對(duì)應(yīng)到二維直角坐標(biāo)系上的一個(gè)點(diǎn)。1.1理解機(jī)器學(xué)習(xí)——One-hot編碼示意電影名是否國(guó)產(chǎn)是否歐美是否動(dòng)畫是否喜劇大鬧天宮1010阿甘正傳0101我不是藥神1001數(shù)機(jī)器學(xué)習(xí)算法能夠處理的特征都是數(shù)值型的,這就需要將非數(shù)值型特征轉(zhuǎn)換為數(shù)值型特征,這種信息形式的轉(zhuǎn)換過程又叫編碼(encoding)。較常用的編碼方式是One-hot編碼(獨(dú)熱編碼),One-hot編碼又稱一位有效編碼,其方法是使用N位狀態(tài)寄存器來對(duì)N個(gè)狀態(tài)進(jìn)行編碼,One-Hot編碼是使用二進(jìn)制來表示非數(shù)值特征的取值。1.1理解機(jī)器學(xué)習(xí)——機(jī)器學(xué)習(xí)解決問題的流程目錄/Contents1.11.2理解機(jī)器學(xué)習(xí)一些相關(guān)概念1.3機(jī)器學(xué)習(xí)的發(fā)展1.4開發(fā)環(huán)境準(zhǔn)備1.2相關(guān)概念——基礎(chǔ)術(shù)語模型:它是機(jī)器學(xué)習(xí)中的核心概念。你可以把它看做一種映射關(guān)系(和函數(shù)類似),我們給模型一些輸入(特征)模型會(huì)將這些特征映射成結(jié)果。比如一個(gè)圖像分類模型,我們給它一張圖片,它能夠?qū)D片分類。擬合:假設(shè)平面坐標(biāo)系中有一系列散落的點(diǎn),擬合就是指用一條光滑的曲線來表征這些點(diǎn)的規(guī)律曲線擬合示意1.2相關(guān)概念——基礎(chǔ)術(shù)語特征(屬性)反映事件或?qū)ο笤谀撤矫娴谋憩F(xiàn)或性質(zhì)的事項(xiàng),數(shù)據(jù)所有能輸入到計(jì)算機(jī)并被計(jì)算機(jī)程序處理的符號(hào)介質(zhì)的總稱。數(shù)據(jù)集機(jī)器學(xué)習(xí)流程中所需要的所有數(shù)據(jù)的集合。訓(xùn)練集用于生成預(yù)測(cè)模型。模型生成之后,再用測(cè)試集評(píng)估模型的預(yù)測(cè)準(zhǔn)確度。測(cè)試集用于對(duì)訓(xùn)練集中的最終模型擬合進(jìn)行無偏評(píng)估。樣本是觀測(cè)或調(diào)查的一部分個(gè)體,總體是研究對(duì)象的全部??傮w中抽取的所要考查的元素總稱,樣本中個(gè)體的多少叫樣本容量。預(yù)測(cè)是基于以前收集的數(shù)據(jù)來預(yù)測(cè)未來的結(jié)果。整個(gè)預(yù)測(cè)流程可分為訓(xùn)練和預(yù)測(cè)兩個(gè)階段,訓(xùn)練階段從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)一個(gè)模型,預(yù)測(cè)階段使用模型預(yù)測(cè)未知或未來的結(jié)果。分類一個(gè)有監(jiān)督的學(xué)習(xí)過程,即訓(xùn)練數(shù)據(jù)庫中數(shù)據(jù)的類別是已知的,由此得到一個(gè)分類器。聚類按照某個(gè)特定標(biāo)準(zhǔn)(如距離)把一個(gè)數(shù)據(jù)集分割成不同的類或簇,使得同一個(gè)簇內(nèi)的數(shù)據(jù)對(duì)象的相似性盡可能大,同時(shí)不在同一個(gè)簇中的數(shù)據(jù)對(duì)象的差異性也盡可能地大。也即聚類后同一類的數(shù)據(jù)盡可能聚集到一起,不同類數(shù)據(jù)盡量分離。聚類是一種無監(jiān)督學(xué)習(xí)算法。分類器實(shí)現(xiàn)分類的算法?;貧w指的是從一組數(shù)據(jù)出發(fā),確定某些變量之間的定量關(guān)系式,即建立數(shù)學(xué)模型并估計(jì)未知參數(shù)?;貧w和分類都可以看成一種預(yù)測(cè)手段,如果預(yù)測(cè)離散的值可以使用分類、如果預(yù)測(cè)連續(xù)的值可以使用回歸。1.2相關(guān)概念——一些常用算法1.2相關(guān)概念——一些常用算法傳統(tǒng)機(jī)器學(xué)習(xí)算法中,最基礎(chǔ)、最具代表性的就是回歸算法(詳見第3章)。決策樹(詳見第5章)作為一種簡(jiǎn)單、易理解的算法常被用于分類問題中。KNN(K近鄰,KNearestNeighbors)是一種基于距離度量的算法(詳見第4章)。SVM(支持向量機(jī),SupportVectorMachines)是一種分類器,它使用升維的方法將低維度上非線性可分的問題變得線性可分,同時(shí)又巧妙地利用核技巧使得維度增加也不需要太大的運(yùn)算量(詳見第7章)。還可以將多種弱學(xué)習(xí)器集成使用,通過一定的規(guī)則揉和多個(gè)弱學(xué)習(xí)器結(jié)果得到一個(gè)結(jié)果,從而達(dá)到媲美強(qiáng)學(xué)習(xí)器的算法效果(祥見第6章)。1.2相關(guān)概念——一些常用算法強(qiáng)化學(xué)習(xí)示意伴隨著數(shù)據(jù)大爆炸,以深度學(xué)習(xí)(詳見第9章)、遷移學(xué)習(xí)、強(qiáng)化學(xué)習(xí)為代表的機(jī)器學(xué)習(xí)算法大放異彩。深度學(xué)習(xí)基于深度神經(jīng)網(wǎng)絡(luò),以卷積網(wǎng)絡(luò)、循環(huán)網(wǎng)絡(luò)、殘差網(wǎng)絡(luò)結(jié)合自注意力機(jī)制等,在海量訓(xùn)練集加持下在語音、圖像等任務(wù)領(lǐng)域甚至可以超過人類的水平。遷移學(xué)習(xí)利用數(shù)據(jù)、任務(wù)或模型之間的相似性,將在舊領(lǐng)域?qū)W習(xí)過的模型和知識(shí)應(yīng)用與新的領(lǐng)域,這樣可以提升模型的訓(xùn)練效率,并且還可以在小樣本場(chǎng)景下取得較好的效果。強(qiáng)化學(xué)習(xí)主要由智能體(Agent)、環(huán)境(Environment)、狀態(tài)(State)、動(dòng)作(Action)、獎(jiǎng)勵(lì)(Reward)組成,如圖17。智能體執(zhí)行了某個(gè)動(dòng)作后,環(huán)境將會(huì)轉(zhuǎn)換到一個(gè)新的狀態(tài),對(duì)于該新的狀態(tài)環(huán)境會(huì)給出獎(jiǎng)勵(lì)信號(hào)(正獎(jiǎng)勵(lì)或者負(fù)獎(jiǎng)勵(lì));智能體再根據(jù)反饋的獎(jiǎng)勵(lì),按照一定的策略執(zhí)行新的動(dòng)作。上述過程為智能體和環(huán)境通過狀態(tài)、動(dòng)作、獎(jiǎng)勵(lì)進(jìn)行交互的方式。智能體通過強(qiáng)化學(xué)習(xí),可以知道自己在什么狀態(tài)下,應(yīng)該采取什么樣的動(dòng)作使得自身獲得最大獎(jiǎng)勵(lì)。由于智能體與環(huán)境的交互方式與人類與環(huán)境的交互方式類似,可以認(rèn)為強(qiáng)化學(xué)習(xí)是一套通用的學(xué)習(xí)框架,可用來解決通用人工智能的問題。因此強(qiáng)化學(xué)習(xí)也被稱為通用人工智能的機(jī)器學(xué)習(xí)方法。1.2相關(guān)概念——算法效果

預(yù)測(cè)分類為0預(yù)測(cè)分類為1真實(shí)分類為0TNFP真實(shí)分類為1FNTP混淆矩陣精確率和召回率都是二分類算法的評(píng)價(jià)指標(biāo),二分類的分類結(jié)果只有兩種可能,分別以0和1表示。使用算法對(duì)而分類問題進(jìn)行分類預(yù)測(cè)的時(shí)候存在幾種可能:實(shí)際為0的分類,可能被正確預(yù)測(cè)為0(個(gè)數(shù)為TN)也可能被錯(cuò)誤預(yù)測(cè)為1(個(gè)數(shù)為FP);實(shí)際為1的分類,可能被正確預(yù)測(cè)為1(個(gè)數(shù)為TP)也可能被錯(cuò)誤預(yù)測(cè)為0(個(gè)數(shù)為FN)。1.2相關(guān)概念——算法效果精準(zhǔn)率指預(yù)測(cè)分類為1的那些數(shù)據(jù)里預(yù)測(cè)正確的比例,即TP/(TP+FP)。比如我們有一個(gè)分類器可以預(yù)測(cè)一張腫瘤圖片是否為惡性腫瘤,如果100張圖片里面我們預(yù)測(cè)有10張為惡性腫瘤,而其中有2張是錯(cuò)誤的預(yù)測(cè),那精準(zhǔn)率就是0.8。召回率指真實(shí)分類為1的那些數(shù)據(jù)里預(yù)測(cè)正確的比例,即TP/(TP+FN)。還是上一段中的例子,假設(shè)100張圖片里真正是惡性腫瘤的是8張,而這8張惡性腫瘤的圖片都被正確的預(yù)測(cè)出來了,那么召回率就是1。準(zhǔn)確率:準(zhǔn)確率是指所有的預(yù)測(cè)正確的樣本數(shù)占總樣本數(shù)的比例,即(TN+TP)/(TN+FN+TP+FP)。ROC曲線全稱ReceiverOperatingCharacteristiccurve,翻譯成中文是“受試者工作特征曲線”,簡(jiǎn)稱ROC曲線。ROC曲線是二維平面上的曲線,橫坐標(biāo)是誤報(bào)率(FalsePositiveRate,F(xiàn)PR),縱坐標(biāo)是精準(zhǔn)率(TruePositiveRate,TPR)。其中,F(xiàn)PR是FP/(FP+TN),也就是真實(shí)分類為0的樣本中被錯(cuò)誤預(yù)測(cè)為1分類的比例。ROC曲線是怎么來的呢?對(duì)于一個(gè)分類器,我們通過調(diào)整它的參數(shù)可以得到多組(FPR,TPR),將這些(FPR,TPR)分別為橫坐標(biāo)值、縱坐標(biāo)得到一些點(diǎn),將這些點(diǎn)連起來就可以得到一條曲線。ROC曲線能夠幫助我們較好對(duì)分類器進(jìn)行調(diào)優(yōu)。目錄/Contents1.11.2理解機(jī)器學(xué)習(xí)一些相關(guān)概念1.3機(jī)器學(xué)習(xí)的發(fā)展1.4開發(fā)環(huán)境準(zhǔn)備1.3機(jī)器學(xué)習(xí)的發(fā)展階段年份主要成果代表人物人工智能起源1936自動(dòng)機(jī)模型理論阿蘭?圖靈(AlanTuring)1943MP模型沃倫?麥卡洛克(WarrenMcCulloch)、沃特?皮茨(Walter

Pitts)1951符號(hào)演算馮?諾依曼(JohnvonNeumann)1950邏輯主義克勞德?香農(nóng)(Claude

Shannon)1956人工智能約翰?麥卡錫(JohnMcCarthy)、馬文?明斯基(MarvinMinsky

)、克勞德?香農(nóng)(ClaudeShannon)人工智能初期1958LISP約翰?麥卡錫(JohnMcCarthy)1962感知器收斂理論弗蘭克?羅森布拉特(FrankRosenblatt)1972通用問題求解(GPS)艾倫?紐厄爾(AllenNewell)、赫伯特?西蒙(Herbert

Simon)1975框架知識(shí)表示馬文?明斯基(MarvinMinsky)進(jìn)化計(jì)算1965進(jìn)化策略英格?雷森博格(Ingo

Rechenberg

)1975遺傳算法約翰?亨利?霍蘭德(JohnHenryHolland)1992基因計(jì)算約翰?柯扎(JohnKoza)專家系統(tǒng)和知識(shí)工程1965模糊邏輯、模糊集拉特飛?扎德(LotfiZadeh)1969DENDRA、MYCIN費(fèi)根鮑姆(Feigenbaum

)、布坎南(Buchanan

)、萊德伯格(Lederberg)1979ROSPECTOR杜達(dá)(Duda)神經(jīng)網(wǎng)絡(luò)1982自組織網(wǎng)絡(luò)圖沃?科霍寧(Teuvo

Kohonen)1986BP算法魯姆哈特(Rumelhart)、麥克利蘭(McClelland)1989卷積神經(jīng)網(wǎng)絡(luò)樂康(LeCun)1998LeNet樂康(LeCun)1997循環(huán)神經(jīng)網(wǎng)絡(luò)RNN塞普?霍普里特(SeppHochreiter)、尤爾根?施密德胡伯(JurgenSchmidhuber)分類算法1986決策樹ID3算法羅斯?昆蘭(RossQuinlan)1988Boosting

算法弗羅因德(Freund)、米迦勒?卡恩斯(MichaelKearns)1993C4.5算法羅斯?昆蘭(RossQuinlan)1995AdaBoost

算法弗羅因德(Freund)、羅伯特?夏普(Robert

Schapire)1995支持向量機(jī)科林納?科爾特斯(CorinnaCortes)、萬普尼克(Vapnik)2001隨機(jī)森林里奧?布雷曼(LeoBreiman)、阿黛勒?卡特勒(Adele

Cutler

)深度學(xué)習(xí)2006深度信念網(wǎng)絡(luò)杰弗里?希爾頓(Geoffrey

Hinton)2012谷歌大腦吳恩達(dá)(Andrew

Ng)2014生成對(duì)抗網(wǎng)絡(luò)GAN伊恩?古德費(fèi)洛(IanGoodfellow)目錄/Contents1.11.2理解機(jī)器學(xué)習(xí)一些相關(guān)概念1.3機(jī)器學(xué)習(xí)的發(fā)展1.4開發(fā)環(huán)境準(zhǔn)備1.4開發(fā)環(huán)境準(zhǔn)備——Python語言開發(fā)環(huán)境由于針對(duì)各種平臺(tái)的Python解釋器的存在,一份Python代碼可以幾乎不需要修改就能運(yùn)行在不同的平臺(tái)上。1.4開發(fā)環(huán)境準(zhǔn)備——下載Anaconda經(jīng)過合理配置后,常見的Windows、基于Linux的系統(tǒng)(如Ubuntu、CentOS等)、MacOS都可以用于Python語言開發(fā)。常規(guī)方法配置Python環(huán)境對(duì)于初學(xué)者來說較繁瑣,但是Anaconda的出現(xiàn)使得這件事變得簡(jiǎn)單。初學(xué)者可以直接安裝Anaconda個(gè)人版,它是一個(gè)免費(fèi)、易于安裝的包管理器、環(huán)境管理器和Python發(fā)行版,包含1500多個(gè)開源包(Python包的概念將在2.4節(jié)介紹),Anaconda與平臺(tái)無關(guān),在Windows、macOS、Linux上都可使用。1.4開發(fā)環(huán)境準(zhǔn)備——安裝Anaconda對(duì)于Windows操作系統(tǒng),直接下載exe的可執(zhí)行文件安裝即可。以Windows11為例,安裝完成后會(huì)在開始菜單中自動(dòng)新建一個(gè)Anaconda3的應(yīng)用集合,包括AnacondaNavigator(工具導(dǎo)航,如圖110)、AnacondaPowerPrompt(命令行)等。1.4開發(fā)環(huán)境準(zhǔn)備——為Conda添加國(guó)內(nèi)的鏡像源Conda是Python包和環(huán)境管理工具,而Anaconda中集成的Conda默認(rèn)從官網(wǎng)下載各種軟件包,對(duì)于國(guó)內(nèi)用戶來說下載速度較慢,我們需要將它的鏡像源設(shè)置為國(guó)內(nèi)的網(wǎng)站。常用的Conda國(guó)內(nèi)鏡像源由清華、阿里云、豆瓣、中科大等單位提供。以添加清華大學(xué)的鏡像源為例,在開始菜單Anaconda3中選擇“AnacondaPowershellPrompt(anaconda3)”,在隨后彈出的命令行窗口中使用命令“condaconfig--addchannels鏡像源網(wǎng)址”即可。Anaconda鏡像/anaconda/pkgs/free//anaconda/pkgs/main/第三方鏡像/anaconda/cloud/conda-forge//anaconda/cloud/msys2//anaconda/cloud/bioconda//anaconda/cloud/menpo//anaconda/cloud/menpo//anaconda/cloud/pytorch/1.4開發(fā)環(huán)境準(zhǔn)備——安裝各種包Python之所以在機(jī)器學(xué)習(xí)項(xiàng)目開發(fā)中好用得益于其大量免費(fèi)的機(jī)器學(xué)習(xí)相關(guān)的包。而用Conda安裝包很簡(jiǎn)單。例如:要安裝numpy包,直接在“AnacondaPowershellPrompt(anaconda3)”中使用命令“condainstallnumpy”即可自動(dòng)安裝。1.4開發(fā)環(huán)境準(zhǔn)備——安裝Cuda驅(qū)動(dòng)(如果電腦有顯卡)GPU擁有更多ALU(GPU擁有更多ALU,能夠進(jìn)行強(qiáng)大的計(jì)算),能夠進(jìn)行強(qiáng)大的計(jì)算。深度學(xué)習(xí)的訓(xùn)練往往需要更多的矩陣運(yùn)算,使用GPU可以提高訓(xùn)練速度。在安裝了NVIDIA顯卡的Windows或Linux系統(tǒng)的計(jì)算機(jī)上,可以從NVIDIA的官方網(wǎng)站(/cuda-downloads)分別下載并安裝驅(qū)動(dòng)CUDA、CUDAToolkit,注意在下載和安裝的時(shí)候要選擇與自己顯卡對(duì)應(yīng)的版本。PyTorch是由Facebook(現(xiàn)Meta)推出的一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,用于機(jī)器視覺、自然語言處理等應(yīng)用程序,當(dāng)前很多人機(jī)器學(xué)習(xí)領(lǐng)域的科研論文的實(shí)驗(yàn)都是基于Pytorch開發(fā)的。使用Conda安裝Pytorch較為簡(jiǎn)單,直接使用命令“condainstallpytorchtorchvisioncudatoolkit=11.*”即可,其中cudatoolkit要和計(jì)算機(jī)的cudatoolkit一致。如果本機(jī)沒有為顯卡安裝CUDA,使用Conda命令安裝Pytorch,會(huì)自動(dòng)安裝CUDA。1.4開發(fā)環(huán)境準(zhǔn)備——安裝MiniCondaAnaconda雖然簡(jiǎn)單、易用,但是它集成了太多東西,安裝完成大約需要占用3.5G的磁盤空間,對(duì)計(jì)算機(jī)性能要求較高。讀者還可以選擇安裝Miniconda,它是一款小巧的Python環(huán)境管理工具,安裝包大約只有70M左右,它的安裝程序中包含基礎(chǔ)的Conda軟件包管理器和Python。本書后續(xù)用到的練習(xí),讀者可以只安裝Miniconda即可。無論是Anaconda還是Miniconda,安裝成功后在Windows開始菜單中都會(huì)有Anaconda3->AnacondaPowershellPrompt(anaconda3)選項(xiàng),點(diǎn)擊打開AnacondaPowershellPrompt命令行窗口,輸入“conda–version”命令會(huì)顯示conda的版本號(hào),輸入“python”命令可以進(jìn)入Python命令行1.4.2. Python開發(fā)工具——VSCodeVSCode(全稱:VisualStudioCode)是由微軟推出的一款跨平臺(tái)的、免費(fèi)的源代碼編輯器。經(jīng)過合理配置后,該軟件支持語法高亮、代碼自動(dòng)補(bǔ)全(IntelliSense)、代碼重構(gòu)、查看定義等功能,并且內(nèi)置了命令行工具和Git版本控制系統(tǒng)等。VSCode經(jīng)過合理配置后可以作為Python的集成開發(fā)環(huán)境,本書中的案例即使用它作為開發(fā)工具。第一步,安裝VSCode,在官網(wǎng)(/)下載適合本機(jī)操作系統(tǒng)的版本然后按照提示安裝即可。第二步,為VSCode安裝Python擴(kuò)展,打開VSCode點(diǎn)擊左側(cè)邊欄的擴(kuò)展圖標(biāo),在隨后出現(xiàn)的搜索框中輸入“Python”找到Microsoft的Python擴(kuò)展,點(diǎn)擊安裝(Install)即可。需要注意,此處安裝的VSCodePython擴(kuò)展并不是Python解釋器,它的作用只是讓VSCode能夠更好的編輯和調(diào)試Python源文件,包括代碼高亮顯示、自動(dòng)補(bǔ)充、代碼跟蹤調(diào)試等等,如果我們想要運(yùn)行編輯好的Python代碼需要為這些代碼指定Python解釋器。1.4.2. Python開發(fā)工具——VSCode在磁盤上新建一個(gè)文件夾,然后在VSCode中打開這個(gè)文件夾隨后,在文件夾中新建一個(gè)Python文件,可以命名為“Test.py”。在新建的Python文件中輸入一行Python指令(如圖115),接下來就是為此Python文件選擇Python解釋器。在代碼文件中同時(shí)按下鍵盤上的Ctrl+Shift+P三個(gè)按鍵進(jìn)入命令面板,輸入Python:SelectInterpreter,然后點(diǎn)擊“Python:SelectInterpreter”選擇Python解釋器;隨后選擇python解釋器,如果本機(jī)系統(tǒng)安裝了多個(gè)版本的Python,帶星號(hào)是默認(rèn)的python解釋器,這里選擇前面安裝的Anaconda的Python1.4.2. Python開發(fā)工具——VSCode要運(yùn)行Python文件,直接在打開的文件空白位置單擊鼠標(biāo)右鍵然后在彈出菜單中選擇“RunPythonFileinTerminal”即可,運(yùn)行后會(huì)在下方的Terminal中輸出字符串“Hello,I’mmachine”1.4.2. Python開發(fā)工具——PyCharmPyCharm(如圖119)是最受歡迎的Python語言專用集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)之一,它也是一個(gè)跨平臺(tái)的開發(fā)工具,可在Windows、macOS和Linux操作系統(tǒng)上提供一致的體驗(yàn)。PyCharm提供三個(gè)版本:專業(yè)版(Professional)、社區(qū)版(Community)。社區(qū)版是開源項(xiàng)目,免費(fèi)但功能較少。專業(yè)版是收費(fèi)的商業(yè)版,提供了一套出色的工具和功能。如有教育郵箱可以申請(qǐng)專業(yè)版一年的試用。PyCharm提供非常豐富的功能支持用戶進(jìn)行Python開發(fā),它除了具有一般IDE具備的功能(如:調(diào)試、語法高亮、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制)外,還提供了一些很好的功能用于Django開發(fā),同時(shí)支持GoogleAppEngine等等。如若進(jìn)行大型Python工程開發(fā),PyCharm幾乎是不二之選。1.4.2. Python開發(fā)工具——Spyder安裝完整的Anaconda,它集成的工具里面就有Spyder。Spyder是一個(gè)簡(jiǎn)單易用的Python開發(fā)環(huán)境,它的使用與MATLAB、RStudio非常相似,可以很方便地觀察和修改數(shù)值。另外,Spyder還有console控制臺(tái)和變量探索等功能,如果你想用Python語言做數(shù)據(jù)分析任務(wù),那么Spyder是一款比較適用的開發(fā)工具。1.4.2. Python開發(fā)工具——JupyterJupyter的適用場(chǎng)景很多,它是基于網(wǎng)頁形式、結(jié)合了編寫說明文檔、數(shù)學(xué)公式、交互計(jì)算和其他富媒體形式的工具等,基本常用的開發(fā)工具里面都包含了。Jupyter里面編寫的內(nèi)容都可以以文檔形式輸出,默認(rèn)保存的后綴名為.ipynb的JSON格式文件,還可以導(dǎo)出為:HTML、PDF、MarkDown、Python等格式。Anaconda完整版安裝也默認(rèn)集成了Jupyter工具。當(dāng)然在VSCode中安裝Jupyter擴(kuò)展后也可以創(chuàng)建*.ipynb文件實(shí)現(xiàn)Jupyter的功能如果你要寫帶有Python代碼的實(shí)驗(yàn)報(bào)告或者類似帶有大段文字說明和Python代碼的文檔,那么使用Jupyter這種形式就非常合適1.4.3. Python的包為了在Python語言中更好地進(jìn)行模塊化管理,Python中使用了包(package)的概念。Python包本質(zhì)上仍然是程序模塊,它還可以有子模塊。在編程的時(shí)候,創(chuàng)建Python包可以通過創(chuàng)建一個(gè)含有“__init__.py”文件的文件夾實(shí)現(xiàn).Python語言使用包的形式來組織程序模塊,這樣非常方便管理,只要頂層的包名不與別人沖突,那所有模塊都不會(huì)與別人沖突。右圖中,要調(diào)用module1.py只需要使用package.modele1即可,同樣調(diào)用module2.py使用package.child_package.module2即可。使用Python不僅可以方便地創(chuàng)建自己的包,還可以通過conda或pip一類的包管理工具方便、快捷地安裝第三方的免費(fèi)包。機(jī)器學(xué)習(xí)中常用的Python包有TensoFlow、Pythorch、Scipy、Keras、Numpy、Seaborn、Scikit-Learn、Pandas、Matplotlib等,大多數(shù)在安裝Anaconda的時(shí)候都已集成,少數(shù)沒有集成的包在后續(xù)章節(jié)學(xué)習(xí)中需要用到的時(shí)候再做介紹。1.6. 實(shí)驗(yàn)練習(xí)1. 實(shí)驗(yàn)?zāi)康脑谧约旱碾娔X上配置VSCode的Python開發(fā)環(huán)境。2. 實(shí)驗(yàn)內(nèi)容1) 安裝miniconda;2) 安裝VSCode及其對(duì)應(yīng)的插件;3) 新建一個(gè)簡(jiǎn)單*.ipynb文件,體驗(yàn)VSCode上使用jupyter進(jìn)行python開發(fā)。1.6. 實(shí)驗(yàn)練習(xí)3.實(shí)驗(yàn)方法與步驟1)安裝miniconda找到miniconda的下載網(wǎng)址,根據(jù)個(gè)人電腦的操作系統(tǒng)選擇具體的miniconda版本下載,按照提示安裝即可。打開“AnacondaPowershellPrompt(miniconda3)”或“AnacondaPrompt(miniconda3)”命令行窗口,通過“condacreate-n虛擬環(huán)境名稱python=*.*”(其中,*.*表示本機(jī)的python版本號(hào))命令創(chuàng)建python虛擬環(huán)境,再用“condaactivate虛擬環(huán)境名稱”激活創(chuàng)建的python虛擬環(huán)境。2)安裝VSCode及其對(duì)應(yīng)的插件下載并安裝VSCode,下載網(wǎng)址為:/。安裝完成后打開VSCode,接下來要給它安裝必要的擴(kuò)展(Extensions),python擴(kuò)展,Jupyter擴(kuò)展。3)新建一個(gè)簡(jiǎn)單工程新建一個(gè)名為“Chap01”的文件夾,運(yùn)行VSCode選擇File菜單下的OpenFolder子菜單,通過彈出的OpenFolder對(duì)話框選擇剛創(chuàng)建的“Chap01”文件夾,在隨后彈出的“Doyoutrusttheauthorsofthefilesinthisfolder?”對(duì)話框中點(diǎn)擊“Yes,Itrusttheauthors”按鈕。隨后點(diǎn)擊VSCode的File菜單中的NewFile子菜單,然后選擇創(chuàng)建一個(gè)“JupyterNotebook.ipynbsupport”文件,將文件命名為“chap01_main.ipynb”保存到Chap01文件夾中。然后可以在文件中,新建markdown文本或者python代碼的段落。謝謝基礎(chǔ)知識(shí)《機(jī)器學(xué)習(xí)簡(jiǎn)明教程》02本章目標(biāo)?理解向量、矩陣的概念及其相應(yīng)的屬性?理解事件、概率、隨機(jī)變量、條件概率、期望宇方差等概念?了解優(yōu)化的基本概念?掌握Python入門知識(shí)?了解機(jī)器學(xué)習(xí)中常用的包目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計(jì)2.3優(yōu)化2.4Python基礎(chǔ)2.1線性代數(shù)——向量與范數(shù)

2.1線性代數(shù)——向量與范數(shù)

2.1線性代數(shù)——向量與范數(shù)

2.1線性代數(shù)——向量與范數(shù)兩個(gè)向量的夾角:對(duì)于兩個(gè)非零向量x,y∈Rn之間的夾角定義為

該公式表明兩個(gè)向量的內(nèi)積不會(huì)大于這兩個(gè)向量的范數(shù)的乘積.2.1線性代數(shù)——向量與范數(shù)

2.1線性代數(shù)——矩陣

2.1線性代數(shù)——矩陣

矩陣的轉(zhuǎn)置運(yùn)算滿足以下性質(zhì)2.1線性代數(shù)——矩陣

2.1線性代數(shù)——行列式與矩陣的逆

2.1線性代數(shù)——行列式計(jì)算與性質(zhì)

2.1線性代數(shù)——逆矩陣

逆矩陣的性質(zhì):目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計(jì)2.3優(yōu)化2.4Python基礎(chǔ)2.2概率與統(tǒng)計(jì)——事件與概率

2.2概率與統(tǒng)計(jì)——隨機(jī)變量

則稱函數(shù)p為隨機(jī)變量X的概率密度函數(shù)。從幾何角度理解,

Pr(a≤X≤b)表示為以數(shù)軸區(qū)間[a,b]為底,函數(shù)曲線y=p(x)為頂?shù)那吿菪蔚拿娣e;直觀上,Pr(a≤X≤b)表示連續(xù)隨機(jī)變量X在區(qū)間[a,b]中的概率總和,即概率質(zhì)量之和,而概率密度在該區(qū)間上的積分則對(duì)應(yīng)為該區(qū)間的概率質(zhì)量之和.2.2概率與統(tǒng)計(jì)——隨機(jī)變量

則稱X服從正態(tài)分布N(μ,σ2),并稱μ和σ2為隨機(jī)變量的X的期望與方差(期望與方差的概念見2.2.4)。若μ=0,σ=1,則N(0,1)稱為標(biāo)準(zhǔn)正態(tài)分布。多元正態(tài)分布:給定μ∈Rn和Σ∈Rn×n,其中Σ為對(duì)稱正定矩陣,若n維隨機(jī)變量X的概率密度函數(shù)為則稱X服從多元正態(tài)分布Nμ,Σ,并稱μ和Σ為隨機(jī)變量X的期望和協(xié)方差矩陣。2.2概率與統(tǒng)計(jì)——條件概率與獨(dú)立

若離散隨機(jī)變量X,Y相互獨(dú)立,則有:2.2概率與統(tǒng)計(jì)——條件概率與獨(dú)立

則貝葉斯定理(Bayesiantheorem)表示為:

2.2概率與統(tǒng)計(jì)——期望與方差

2.2概率與統(tǒng)計(jì)——期望與方差

若X為離散型隨機(jī)變量,其取值集合為{x1,x2,?,xn},則離散隨機(jī)變量X的方差為:若X為連續(xù)型隨機(jī)變量,則其方差為:隨機(jī)變量X的標(biāo)準(zhǔn)差(standarddeviation)記為σX,定義為:2.2概率與統(tǒng)計(jì)——期望與方差

2.2概率與統(tǒng)計(jì)——期望與方差大數(shù)定理:設(shè)X1,X2,?,Xn為獨(dú)立同分布的隨機(jī)變量序列,對(duì)任一1≤i≤n滿足EXi=μ且VarXi=σ2≤∞,則對(duì)任意的?>0大數(shù)定理表明,在隨機(jī)試驗(yàn)中,每次出現(xiàn)的結(jié)果不同,但是大量重復(fù)試驗(yàn)出現(xiàn)的結(jié)果的頻率趨近于一個(gè)常數(shù),該常數(shù)為該隨機(jī)試驗(yàn)中隨機(jī)變量的期望。2.2概率與統(tǒng)計(jì)——期望與方差

2.2概率與統(tǒng)計(jì)——最大似然估計(jì)與最大后驗(yàn)估計(jì)最大似然估計(jì):假設(shè)有觀測(cè)數(shù)據(jù)集合D={x1,x2,?,xn}是由某個(gè)概率分布p(x;θ)產(chǎn)生,其中θ為確定而待估計(jì)的概率分布參數(shù),并且滿足對(duì)任意的1≤i,j≤n,觀測(cè)數(shù)據(jù)xi和xj相互獨(dú)立。則數(shù)據(jù)集D出現(xiàn)的概率為p(D;θ)=p(x1,x2,?,xn;θ),由觀測(cè)數(shù)據(jù)的獨(dú)立性可得p(x1,x2,?,xn;θ)=(px1;θ)?p(xn;θ),定義

2.2概率與統(tǒng)計(jì)——最大似然估計(jì)與最大后驗(yàn)估計(jì)由于多個(gè)概率值進(jìn)行連乘操作容易引起數(shù)值溢出的問題,通常引入負(fù)對(duì)數(shù)似然函數(shù)(negativeloglikelihood)

2.2概率與統(tǒng)計(jì)——最大似然估計(jì)與最大后驗(yàn)估計(jì)

1.3機(jī)器學(xué)習(xí)的發(fā)展階段年份主要成果代表人物人工智能起源1936自動(dòng)機(jī)模型理論阿蘭?圖靈(AlanTuring)1943MP模型沃倫?麥卡洛克(WarrenMcCulloch)、沃特?皮茨(Walter

Pitts)1951符號(hào)演算馮?諾依曼(JohnvonNeumann)1950邏輯主義克勞德?香農(nóng)(Claude

Shannon)1956人工智能約翰?麥卡錫(JohnMcCarthy)、馬文?明斯基(MarvinMinsky

)、克勞德?香農(nóng)(ClaudeShannon)人工智能初期1958LISP約翰?麥卡錫(JohnMcCarthy)1962感知器收斂理論弗蘭克?羅森布拉特(FrankRosenblatt)1972通用問題求解(GPS)艾倫?紐厄爾(AllenNewell)、赫伯特?西蒙(Herbert

Simon)1975框架知識(shí)表示馬文?明斯基(MarvinMinsky)進(jìn)化計(jì)算1965進(jìn)化策略英格?雷森博格(Ingo

Rechenberg

)1975遺傳算法約翰?亨利?霍蘭德(JohnHenryHolland)1992基因計(jì)算約翰?柯扎(JohnKoza)專家系統(tǒng)和知識(shí)工程1965模糊邏輯、模糊集拉特飛?扎德(LotfiZadeh)1969DENDRA、MYCIN費(fèi)根鮑姆(Feigenbaum

)、布坎南(Buchanan

)、萊德伯格(Lederberg)1979ROSPECTOR杜達(dá)(Duda)神經(jīng)網(wǎng)絡(luò)1982自組織網(wǎng)絡(luò)圖沃?科霍寧(Teuvo

Kohonen)1986BP算法魯姆哈特(Rumelhart)、麥克利蘭(McClelland)1989卷積神經(jīng)網(wǎng)絡(luò)樂康(LeCun)1998LeNet樂康(LeCun)1997循環(huán)神經(jīng)網(wǎng)絡(luò)RNN塞普?霍普里特(SeppHochreiter)、尤爾根?施密德胡伯(JurgenSchmidhuber)分類算法1986決策樹ID3算法羅斯?昆蘭(RossQuinlan)1988Boosting

算法弗羅因德(Freund)、米迦勒?卡恩斯(MichaelKearns)1993C4.5算法羅斯?昆蘭(RossQuinlan)1995AdaBoost

算法弗羅因德(Freund)、羅伯特?夏普(Robert

Schapire)1995支持向量機(jī)科林納?科爾特斯(CorinnaCortes)、萬普尼克(Vapnik)2001隨機(jī)森林里奧?布雷曼(LeoBreiman)、阿黛勒?卡特勒(Adele

Cutler

)深度學(xué)習(xí)2006深度信念網(wǎng)絡(luò)杰弗里?希爾頓(Geoffrey

Hinton)2012谷歌大腦吳恩達(dá)(Andrew

Ng)2014生成對(duì)抗網(wǎng)絡(luò)GAN伊恩?古德費(fèi)洛(IanGoodfellow)目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計(jì)2.3優(yōu)化2.4Python基礎(chǔ)2.3優(yōu)化——導(dǎo)數(shù)和梯度

2.3優(yōu)化——導(dǎo)數(shù)和梯度向量和矩陣的導(dǎo)數(shù)滿足以下性質(zhì):2.3優(yōu)化——導(dǎo)數(shù)和梯度

2.3優(yōu)化——凸函數(shù)與梯度下降凸函數(shù)示意圖

2.3優(yōu)化——凸函數(shù)與梯度下降

則不斷應(yīng)用該過程直至收斂到局部最優(yōu)點(diǎn)。

稱為梯度下降法。

目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計(jì)2.3優(yōu)化2.4Python基礎(chǔ)2.4Python編程基礎(chǔ)——語法基礎(chǔ)標(biāo)識(shí)符,由字母、數(shù)字、下劃線組成,區(qū)分大小寫,不能以數(shù)字開頭。以下劃線開頭的標(biāo)識(shí)符有特殊含義。以單下劃線開頭的(_foo)的代表不能直接訪問的類屬性,以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結(jié)尾的(__foo__)代表Python里特殊方法專用的標(biāo)識(shí),如__init__()代表類的構(gòu)造函數(shù)??s進(jìn),Python的代碼塊不使用大括號(hào)來控制類、函數(shù)、以及其他邏輯判斷,而是使用縮進(jìn)來寫實(shí)現(xiàn)代碼分組。通常用四個(gè)空格來進(jìn)行縮進(jìn)。示例代碼如下:a,b=1,2ifa>b:x=aelse:x=bprint(x)運(yùn)行結(jié)果為:2注釋,python中單行注釋采用#開頭。多行注釋使用三個(gè)單引號(hào)''或三個(gè)雙引號(hào)"""。示例代碼:"""三個(gè)雙引號(hào)注釋(可以換行)""""一個(gè)雙引號(hào)注釋(不能換行)"defmy_abs(x):#絕對(duì)值函數(shù)ifx>=0:return(x)else:return(-x)2.4Python編程基礎(chǔ)——語法基礎(chǔ)一條語句分多行顯示,python語句中一般以新行作為為語句的結(jié)束符。但是我們可以使用斜杠\將一行的語句分為多行顯示。如果有{},[],()跨行則可以不使用\。代碼示例如下:a=1+2+3+4+5+6+7+\7+8+9+10b=[1,2,3,4,5,6,7,8]Python也可以在同一行中使用多條語句,語句之間使用分號(hào)分割。2.4Python編程基礎(chǔ)——語法基礎(chǔ)Python輸出可以直接用print函數(shù)(python3.x中,print為內(nèi)置函數(shù)),示例代碼如下:print("Hello,Python.")x=1234print(x)#直接打印輸出變量y=5678print('x=%d,y=%d'%(x,y))#格式化輸出代碼運(yùn)行結(jié)果為:Hello,Python.1234x=1234,y=5678Python3.x中,input()函數(shù)接受一個(gè)標(biāo)準(zhǔn)輸入數(shù)據(jù),返回為string類型。示例代碼如下:height

=

float(input('請(qǐng)輸入你的身高(單位:米):'))

print('你的身高是:%f米'%height)

代碼執(zhí)行到第一行的時(shí)候,程序等待用戶輸入,若用戶輸入1.7,,則代碼運(yùn)行結(jié)果為:你的身高是:1.700000米輸入輸出2.4Python編程基礎(chǔ)——語法基礎(chǔ)基本變量類型變量就是存儲(chǔ)在內(nèi)存中的值,在創(chuàng)建變量時(shí),解釋器會(huì)分配內(nèi)存,并決定什么數(shù)據(jù)可以被存儲(chǔ)在內(nèi)存中。Python語言中,變量不需要聲明,但在使用前都必須賦值,解釋器會(huì)根據(jù)賦值自動(dòng)指定變量類型。每個(gè)變量用“=”號(hào)進(jìn)行賦值,“=”號(hào)左邊為變量名,右邊為存儲(chǔ)在變量中的值,變量賦值以后該變量才會(huì)被創(chuàng)建。示例代碼如下:message="Helloworld"#將字符串"Helloworld"賦值給變量messagea=1#將整形1賦值給變量ab=1.234#將浮點(diǎn)型1.234賦值給變量bMax_CONNECTIONS=5000#將整型5000賦值給常量Max_CONNECTIONS由于Python沒有內(nèi)置的常量類型的關(guān)鍵字,Python程序員默認(rèn)用全大寫來指出某個(gè)變量為常量,在編程過程中不去改變它的值。2.4Python編程基礎(chǔ)——語法基礎(chǔ)基本變量類型Python還可以用一條語句對(duì)多個(gè)變量進(jìn)行賦值,示例代碼如下:a,b,c,d=20,5.5,True,4+3jprint(type(a),type(b),type(c),type(d))代碼運(yùn)行結(jié)果為:<class'int'><class'float'><class'bool'><class'complex'>2.4Python編程基礎(chǔ)——語法基礎(chǔ)基本變量類型Python3中的標(biāo)準(zhǔn)數(shù)據(jù)類型有六種:Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Set(集合)、Dictionary(字典)。其中,Number(數(shù)字)、String(字符串)、Tuple(元組)不可變;List(列表)、Dictionary(字典)、Set(集合)可變。Number(數(shù)字)類型中,Python3支持int、float、bool、complex(復(fù)數(shù)),解釋器會(huì)根據(jù)值來自動(dòng)匹配數(shù)具體的類型(type)。示例代碼如下:a,b,c,d=20,5.5,True,4+3jprint(type(a),type(b),type(c),type(d))運(yùn)行結(jié)果為:<class'int'><class'float'><class'bool'><class'complex'>2.4Python編程基礎(chǔ)——語法基礎(chǔ)基本變量類型字符串或串(String)是由數(shù)字、字母、下劃線組成的一串字符。在python中用引號(hào)括起的都是字符串,引號(hào)可以是雙引號(hào)也可以是單引號(hào)。Python中,String也是一種對(duì)象類型,有內(nèi)部的方法和屬性可以調(diào)用。字符串常用的方法示例代碼如下:name="houyueen"lower_name=name.lower()upper_name=name.upper()title_name=name.title()print(f"lower_nameis{lower_name},upper_nameis{upper_name},\title_nameis{title_name}")代碼運(yùn)行結(jié)果為:lower_nameishouyueen,upper_nameisHOUYUEEN,title_nameisHouYueen2.4Python編程基礎(chǔ)——語法基礎(chǔ)有序數(shù)據(jù)結(jié)構(gòu):列表list、元組tuple列表是有序集合,列表中可以放任何變量,沒有類型限制,列表通常放有多個(gè)元素,由方括號(hào)“[]”表示列表。示例代碼如下:list1=[1,'python',3,3.14]print(f"list1[0]is:{list1[0]}")list1[0]='new'print(f"Now,list1is:{list1}")代碼運(yùn)行結(jié)果為:list1[0]is:1Now,list1is:['new','python',3,3.14]列表內(nèi)置了一些方法可以調(diào)用,append方法在列表后面添加元素、pop方法刪除列表的最后一個(gè)元素、sort方法對(duì)列表進(jìn)行永久地修改排序,還可以使用冒號(hào):對(duì)列表進(jìn)行切片操作。示例代碼:bicycles=["trek","connondale","redline","specialized"]bicycles.append("giant")print(f"appendedbicyclesis:{bicycles}")bicycles.pop()print(f"poppedbicyclesis:{bicycles}")bicycles.sort()print(f"sortedbicyclesis:{bicycles}")print(f"bicycles[1:3]isf{bicycles[1:3]}")運(yùn)行結(jié)果為:appendedbicyclesis:['trek','connondale','redline','specialized','giant']poppedbicyclesis:['trek','connondale','redline','specialized']sortedbicyclesis:['connondale','redline','specialized','trek']bicycles[1:3]isf['redline','specialized']2.4Python編程基礎(chǔ)——語法基礎(chǔ)有序數(shù)據(jù)結(jié)構(gòu):列表list、元組tupletuple(元組),是有序集合,是不可變的,但可以進(jìn)行組合和復(fù)制運(yùn)算后會(huì)生成一個(gè)新的元組。示例代碼如下:tuple_var1=(1,3,5,'xyz')tuple_var2=(3,4,5)tuple_var3=tuple_var1+tuple_var2print(f"tuple_var3is:{tuple_var3}")tuple_var1[1]=3上述代碼1~4行運(yùn)行沒有問題,但第5行試圖改變tuple_var1的值就會(huì)報(bào)錯(cuò),因?yàn)閠uple類型一旦聲明則不可改變。代碼運(yùn)行結(jié)果為(第3行開始的報(bào)錯(cuò)信息會(huì)因代碼運(yùn)行環(huán)境有所不同):1 tuple_var3is:(1,3,5,'xyz',3,4,5)2 ---------------------------------------------------------------------------3 TypeErrorTraceback(mostrecentcalllast)4 d:\LocalDocs\ai_textbook_demos\demos\Chap02\chap02_Python_tutorial.ipynbCell62in<cellline:5>()5 3tuple_var3=tuple_var1+tuple_var26 4print(f"tuple_var3is:{tuple_var3}")7 ---->5tuple_var1[1]=38 TypeError:'tuple'objectdoesnotsupportitemassignment2.4Python編程基礎(chǔ)——語法基礎(chǔ)無序數(shù)據(jù)結(jié)構(gòu):集合set、字典dict集合是一個(gè)無序不重復(fù)元素的集,基本功能包括關(guān)系運(yùn)算和消除重復(fù)元素。集合的基本形式如{'apple','orange','banana'}。集合是無序的,因此您無法確定項(xiàng)目的顯示順序,但可以通過for循環(huán)來遍歷一個(gè)集合。不同的集合之間可以進(jìn)行交(&)、并(|)、差(-)、對(duì)稱差集(^)等運(yùn)算,示例代碼如下:set_var1={"apple","banana","cherry"}set_var1.add("grape")set_var2={"apple","banana","orange"}set_var3=set_var1&set_var2set_var4=set_var1|set_var2print(f"set_var1is:{set_var1}")print(f"set_var2is:{set_var2}")print(f"set_var3is:{set_var3}")print(f"set_var4is:{set_var4}")代碼運(yùn)行結(jié)果為:set_var1is:{'banana','cherry','apple','grape'}set_var2is:{'orange','banana','apple'}set_var3is:{'banana','apple'}set_var4is:{'orange','grape','banana','cherry','apple'}2.4Python編程基礎(chǔ)——語法基礎(chǔ)無序數(shù)據(jù)結(jié)構(gòu):集合set、字典dict字典是一系列鍵值對(duì),每個(gè)鍵都與一個(gè)值相關(guān)聯(lián),可以使用鍵來訪問其相關(guān)聯(lián)的值。與鍵相關(guān)聯(lián)的值可以是整數(shù)、浮點(diǎn)數(shù)、列表、字典等任何Python對(duì)象。字典用放在花括號(hào)“{}”中的鍵值對(duì)來表示,鍵和值用冒號(hào)“:”分開,鍵值對(duì)之間用逗號(hào)“,”分開。示例代碼如下:ict_var={"color":"red","points":5}print(f"dict_var[\'color\']is:{dict_var['color']}.")代碼運(yùn)行結(jié)果為:dict_var['color']is:red.為字典添加鍵值對(duì)、修改字典中已有鍵的值的方法類似;另外,可以使用del語句刪除字典中的鍵值對(duì)。示例代碼:dict_var={"color":"red","points":5}print(f"olddict_varis:{dict_var}")dict_var['color']='blue'dict_var['x_point']=100print(f"newdict_varis:{dict_var}")deldict_var['points']print(f"dict_vardeletedis:{dict_var}")代碼運(yùn)行結(jié)果為:olddict_varis:{'color':'red','points':5}newdict_varis:{'color':'blue','points':5,'x_point':100}dict_vardeletedis:{'color':'blue','x_point':100}2.4Python編程基礎(chǔ)——語法基礎(chǔ)無序數(shù)據(jù)結(jié)構(gòu):集合set、字典dict使用get方法訪問字典中某個(gè)鍵的值,還可以指定被訪問的字典中不存在該鍵時(shí)的返回內(nèi)容,示例代碼如下:dict_var={"color":"red","points":5,"x_point":100,"y_point":50}color=dict_var.get("color","Nocolorvalueassigned.")z_point=dict_var.get("z_point","Noz_pointvalueassigned.")print(color)print(z_point)代碼運(yùn)行結(jié)果為:redNoz_pointvalueassigned.可以使用for循環(huán)來遍歷字典,示例代碼:dict_var={"color":"red","points":5,"x_point":100,"y_point":50}fork,vindict_var.items():print(f"keyis:{k},valueis:{v}.")代碼運(yùn)行結(jié)果如下:keyis:color,valueis:red.keyis:points,valueis:5.keyis:x_point,valueis:100.keyis:y_point,valueis:50.2.4Python編程基礎(chǔ)——語法基礎(chǔ)條件語句if在編程過程中,通常需要通過對(duì)一些條件進(jìn)行判斷,進(jìn)而決定程序執(zhí)行符合條件的相應(yīng)語句。和其他語言一樣,python的if語句可以檢查程序當(dāng)前的狀態(tài),并采取相應(yīng)的措施。if語句一般有if結(jié)構(gòu)、if-else結(jié)構(gòu)、if-elif-else結(jié)構(gòu)三種,示例代碼如下:age=int(input("inputyourageplease:"))ifage<2:print("Youareababy")elifage<12:print("Youareakid")elifage<30:print("Youareayoungpeople")elifage<60:print("Youareamiddle-agedpeople")else:print("Youareanoldpeople")運(yùn)行上面的代碼,若在第1行input函數(shù)時(shí)執(zhí)行時(shí)輸入10,代碼運(yùn)行結(jié)果為:Youareakidif后面跟著的是條件判斷語句,如果是True,則執(zhí)行if后面的語句塊,如果是False則跳過if后面的語句塊,對(duì)elif進(jìn)行判斷,如上例中的3個(gè)elif都為False,則執(zhí)行else后面的語句塊。這里需要注意的是,無論是if還是elif后面不能跟賦值語句(如ifa=1:),否則解釋器會(huì)報(bào)錯(cuò)。2.4Python編程基礎(chǔ)——語法基礎(chǔ)循環(huán)語句for、whilefor循環(huán)用于迭代序列(即列表,元組,字典,集合或字符串)。這與其他編程語言中的for關(guān)鍵字不太相似,而是更像其他面向?qū)ο缶幊陶Z言中的迭代器方法。通過使用for循環(huán),我們可以為列表、元組、集合中的每個(gè)項(xiàng)目執(zhí)行一組語句。示例代碼:fruits=["apple","banana","cherry"]forxinfruits:print(x)ifx=="banana":break上例中,依次取出列表fruits中的元素,并打印,當(dāng)拿到字符串"banana"時(shí),則執(zhí)行break語句,即退出for循環(huán)。如果沒有拿到字符串"banana",則在拿完列表fruits中的所有元素時(shí),將退出for循環(huán)。因此,代碼運(yùn)行結(jié)果為:applebanana2.4Python編程基礎(chǔ)——語法基礎(chǔ)循環(huán)語句for、while如需循環(huán)一組代碼指定的次數(shù),可以使用range()函數(shù),range()函數(shù)返回一個(gè)數(shù)字序列,默認(rèn)情況下從0開始,并遞增1(默認(rèn)地),并以指定的數(shù)字結(jié)束。示例代碼如下:foriinrange(3):print(i)代碼運(yùn)行結(jié)果為:012for循環(huán)將對(duì)集合中的每個(gè)元素都執(zhí)行一個(gè)代碼塊,當(dāng)遍歷完所有元素后將退出循環(huán),而while循環(huán)則不斷運(yùn)行,直到指定的條件不滿足為止。示例代碼如下:number=0whilenumber<3: number+=1 print(number)代碼運(yùn)行結(jié)果為:1232.4Python編程基礎(chǔ)——Python運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算也即數(shù)學(xué)運(yùn)算,Python通過算術(shù)運(yùn)算符對(duì)數(shù)字或變量等進(jìn)行數(shù)學(xué)運(yùn)算,比如加減乘除對(duì)應(yīng)的算術(shù)運(yùn)算符分別為:+、-、*、/。Python常用的算術(shù)運(yùn)算符如表:運(yùn)算符說明實(shí)例結(jié)果+加12.45+1527.45-減4.56-0.26 4.3*乘5*3.618.0/除法(和數(shù)學(xué)中的規(guī)則一樣)7/23.5//整除(只保留商的整數(shù)部分)7//23%取余,即返回除法的余數(shù)7%21**冪(次方)運(yùn)算,即返回x的y次方2**416,即24result1=1+(100-20)/4+5*2#四則運(yùn)算print("result1=",result1)

importmathfrommathimportpi#引入常量piresult2=math.sin(pi/2)#三角函數(shù)print("result2=",result2)執(zhí)行結(jié)果如下:result1=31.0result2=1.02.4Python編程基礎(chǔ)——Python運(yùn)算符賦值運(yùn)算符賦值運(yùn)算符用來把右側(cè)的值傳遞給左側(cè)的變量(或者常量);可以直接將右側(cè)的值交給左側(cè)的變量,也可以進(jìn)行某些運(yùn)算后再交給左側(cè)的變量,比如加減乘除、函數(shù)調(diào)用、邏輯運(yùn)算等。Python中最基本的賦值運(yùn)算符是等號(hào)“=”,結(jié)合其它運(yùn)算符,“=”還能擴(kuò)展出更強(qiáng)大的賦值運(yùn)算符,如表:val1_int=100val2_f=25.5val1_int-=80#等價(jià)于n1=n1-80val2_f*=val1_int-10#等價(jià)于f1=f1*(n1-10)print("val1_int=%d"%val1_int)print("val2_f=%.2f"%val2_f)運(yùn)行結(jié)果如下:val1_int=20val2_f=255.00運(yùn)算符說明用法舉例等價(jià)形式=最基本的賦值運(yùn)算x=yx=y+=加賦值x+=yx=x+y-=減賦值x-=yx=x-y*=乘賦值x*=yx=x*y/=除賦值x/=yx=x/y%=取余數(shù)賦值x%=yx=x%y**=冪賦值x**=yx=x**y//=取整數(shù)賦值x//=yx=x//y&=按位與賦值x&=yx=x&y|=按位或賦值x|=yx=x|y^=按位異或賦值x^=yx=x^y<<=左移賦值x<<=yx=x<<y,這里的y指的是左移的位數(shù)>>=右移賦值x>>=yx=x>>y,這里的y指的是右移的位數(shù)2.4Python編程基礎(chǔ)——Python運(yùn)算符位運(yùn)算符Python位運(yùn)算按照數(shù)據(jù)在內(nèi)存中的二進(jìn)制位(Bit)進(jìn)行操作,它一般用于底層開發(fā)(算法設(shè)計(jì)、驅(qū)動(dòng)、圖像處理、單片機(jī)等),在應(yīng)用層開發(fā)(Web開發(fā)、Linux運(yùn)維等)中并不常見。Python位運(yùn)算符只能用來操作整數(shù)類型,它按照整數(shù)在內(nèi)存中的二進(jìn)制形式進(jìn)行計(jì)算。Python支持的位運(yùn)算符如表:位運(yùn)算符說明使用形式舉例&按位與a&b4&5|按位或a|b4|5^按位異或a^b4^5~按位取反~a~4<<

按位左移a<<b4<<2,表示整數(shù)4按位左移2位>>

按位右移a>>b4>>2,表示整數(shù)

4按位右移2位result=9|5print("9|5=",result)代碼運(yùn)行結(jié)果如下:9|5=132.4Python編程基礎(chǔ)——Python運(yùn)算符比較運(yùn)算符比較運(yùn)算符,也稱關(guān)系運(yùn)算符,用于對(duì)常量、變量或表達(dá)式的結(jié)果進(jìn)行大小比較。如果這種比較是成立的,則返回True(真),反之則返回False(假)。Python支持的比較運(yùn)算符如表:比較運(yùn)算符說明>

大于,如果>前面的值大于后面的值,則返回True,否則返回False。<

小于,如果<前面的值小于后面的值,則返回True,否則返回False。==等于,如果==兩邊的值相等,則返回True,否則返回False。>=大于等于(等價(jià)于數(shù)學(xué)中的≥),如果>=前面的值大于或者等于后面的值,則返回True,否則返回False。<=小于等于(等價(jià)于數(shù)學(xué)中的≤),如果<=前面的值小于或者等于后面的值,則返回True,否則返回False。!=不等于(等價(jià)于數(shù)學(xué)中的≠),如果!=兩邊的值不相等,則返回True,否則返回False。is判斷兩個(gè)變量所引用的對(duì)象是否相同,如果相同則返回True,否則返回False。isnot判斷兩個(gè)變量所引用的對(duì)象是否不相同,如果不相同則返回True,否則返回False。print("89是否大于100:",89>100)print("24*5是否大于等于76:",24*5>=76)print("86.5是否等于86.5:",86.5==86.5)print("34是否等于34.0:",34==34.0)print("False是否小于True:",False<True)print("True是否等于True:",True<True)代碼運(yùn)行結(jié)果如下:89是否大于100:False24*5是否大于等于76:True86.5是否等于86.5:True34是否等于34.0:TrueFalse是否小于True:TrueTrue是否等于True:False2.4Python編程基礎(chǔ)——Python運(yùn)算符邏輯運(yùn)算符用于對(duì)布爾型變量進(jìn)行運(yùn)算,其結(jié)果也是布爾型的(注意:若邏輯運(yùn)算用于非布爾型變量,得到的結(jié)果也可能是非布爾型的),只有and、or、not三種,如表:邏輯運(yùn)算符含義基本格式說明and邏輯與運(yùn)算,等價(jià)于數(shù)學(xué)中的“且”aandb當(dāng)a和b兩個(gè)表達(dá)式都為真時(shí),aandb的結(jié)果才為真,否則為假。or邏輯或運(yùn)算,等價(jià)于數(shù)學(xué)中的“或”aorb當(dāng)a和b兩個(gè)表達(dá)式都為假時(shí),aorb的結(jié)果才是假,否則為真。not邏輯非運(yùn)算,等價(jià)于數(shù)學(xué)中的“非”nota如果a為真,那么nota的結(jié)果為假;如果a為假,那么nota的結(jié)果為真。相當(dāng)于對(duì)a取反。邏輯運(yùn)算的示例代碼如下:print(2>0and3<0or3<0)print(2>0or3<0and3<0)print(('test'=='Test')or1!=1.0and2==2.0)代碼運(yùn)行結(jié)果如下:FalseTrueFalse2.4Python編程基礎(chǔ)——Python運(yùn)算符三目運(yùn)算符使用ifelse實(shí)現(xiàn)三目運(yùn)算符(條件運(yùn)算符)的格式為:“exp1ifcontionelseexp2”。a=3b=4max=aifa>belsebprint("max=",max)示例代碼運(yùn)行結(jié)果為:max=42.4Python編程基礎(chǔ)——Python運(yùn)算符運(yùn)算符優(yōu)先級(jí)和結(jié)合性當(dāng)多個(gè)運(yùn)算符同時(shí)出現(xiàn)在一個(gè)表達(dá)式中時(shí),先執(zhí)行哪個(gè)運(yùn)算符由運(yùn)算符的優(yōu)先級(jí)決定。Python支持的運(yùn)算符有幾十種之多,被劃分成將近二十個(gè)優(yōu)先級(jí),有的運(yùn)算符優(yōu)先級(jí)不同,有的運(yùn)算符優(yōu)先級(jí)相同。一個(gè)表達(dá)式中有多個(gè)優(yōu)先級(jí)時(shí)按優(yōu)先級(jí)從高到低先后執(zhí)行,如果優(yōu)先級(jí)相同,則大多數(shù)服從左結(jié)合性(即相同優(yōu)先級(jí)的運(yùn)算符按從左到右依次執(zhí)行);有兩個(gè)例外,乘方(**)運(yùn)算符、單目運(yùn)算符(如邏輯非運(yùn)算not)服從右結(jié)合性。運(yùn)算符說明Python運(yùn)算符優(yōu)先級(jí)結(jié)合性小括號(hào)()19無索引運(yùn)算符x[i]或x[i1:i2[:i3]]18左屬性訪問x.attribute17左乘方**16右按位取反~15右符號(hào)運(yùn)算符+(正號(hào))、-(負(fù)號(hào))14右乘除*、/、//、%13左加減+、-12左位移>>、<<11左按位與&10右按位異或^9左按位或|8左比較運(yùn)算符==、!=、>、>=、<、<=

7左is運(yùn)算符is、isnot6左in運(yùn)算符in、notin5左邏輯非not4右邏輯與and3左邏輯或or2左逗號(hào)運(yùn)算符exp1,exp21左2.4Python編程基礎(chǔ)——Python函數(shù)函數(shù)是帶名字的代碼塊,用于完成具體的任務(wù)def函數(shù)名(參數(shù)列表)://實(shí)現(xiàn)特定功能的多行代碼[return[返回值]]用[]括起來的為可選擇部分,即可以使用,也可以省略。defhello_user(first_name,last_name,middle_name=""):print(f"Hello{first_name.title()}{middle_name.title()}{last_name.title()}")函數(shù)定義代碼示例hello_user("william","clinton")#位置參數(shù)hello_user("william","clinton","jafferson")#位置參數(shù)+關(guān)鍵字參數(shù)hello_user("William","Clinton",middle_name="Jafferson")函數(shù)調(diào)用示例HelloWilliamClintonHelloWilliamJaffersonClintonHelloWilliamJaffersonClinton代碼運(yùn)行結(jié)果2.4Python編程基礎(chǔ)——Python函數(shù)Python的函數(shù)還支持可變長(zhǎng)度參數(shù)??勺冮L(zhǎng)參數(shù)主要有兩種形式,即*parameter和**parameter。前者用來接收多個(gè)位置參數(shù)并將其放在一個(gè)元組中,后者接收多個(gè)關(guān)鍵參數(shù)并將其放入字典中。defdemo(*p):print(p)

de

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論