版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
概述《機器學習簡明教程》01目錄/Contents1.11.2理解機器學習一些相關概念1.3機器學習的發(fā)展1.4開發(fā)環(huán)境準備1.1理解機器學習——一個例子網(wǎng)站怎樣在海量的電影庫中找出少數(shù)幾部你可能喜歡的電影呢?這背后的推薦邏輯是什么?1.1理解機器學習——一個例子預先對影片庫里的電影進行處理,給它們設計一些特征,能夠用這些特征來描述電影;對網(wǎng)站的用戶進行數(shù)據(jù)標注;記錄歷史數(shù)據(jù),包括所有電影被觀看情況、所有用戶觀看電影的情況等。收集、記錄數(shù)據(jù)只是第一步,還需要大量的數(shù)據(jù)處理工作,才能更好利用這些數(shù)據(jù)中蘊藏的大量信息。機器學習并不是預先定義好的固定代碼,而是從歷史數(shù)據(jù)中推導出來的。1.1理解機器學習——計算電影相似性的方法示例如何衡量電影、用戶的相似性?問題簡化,假設每部電影只有兩個特征(評分、時長)分別作為橫、縱坐標,那每一部電影都可以對應到二維直角坐標系上的一個點。1.1理解機器學習——One-hot編碼示意電影名是否國產(chǎn)是否歐美是否動畫是否喜劇大鬧天宮1010阿甘正傳0101我不是藥神1001數(shù)機器學習算法能夠處理的特征都是數(shù)值型的,這就需要將非數(shù)值型特征轉換為數(shù)值型特征,這種信息形式的轉換過程又叫編碼(encoding)。較常用的編碼方式是One-hot編碼(獨熱編碼),One-hot編碼又稱一位有效編碼,其方法是使用N位狀態(tài)寄存器來對N個狀態(tài)進行編碼,One-Hot編碼是使用二進制來表示非數(shù)值特征的取值。1.1理解機器學習——機器學習解決問題的流程目錄/Contents1.11.2理解機器學習一些相關概念1.3機器學習的發(fā)展1.4開發(fā)環(huán)境準備1.2相關概念——基礎術語模型:它是機器學習中的核心概念。你可以把它看做一種映射關系(和函數(shù)類似),我們給模型一些輸入(特征)模型會將這些特征映射成結果。比如一個圖像分類模型,我們給它一張圖片,它能夠將圖片分類。擬合:假設平面坐標系中有一系列散落的點,擬合就是指用一條光滑的曲線來表征這些點的規(guī)律曲線擬合示意1.2相關概念——基礎術語特征(屬性)反映事件或對象在某方面的表現(xiàn)或性質的事項,數(shù)據(jù)所有能輸入到計算機并被計算機程序處理的符號介質的總稱。數(shù)據(jù)集機器學習流程中所需要的所有數(shù)據(jù)的集合。訓練集用于生成預測模型。模型生成之后,再用測試集評估模型的預測準確度。測試集用于對訓練集中的最終模型擬合進行無偏評估。樣本是觀測或調查的一部分個體,總體是研究對象的全部??傮w中抽取的所要考查的元素總稱,樣本中個體的多少叫樣本容量。預測是基于以前收集的數(shù)據(jù)來預測未來的結果。整個預測流程可分為訓練和預測兩個階段,訓練階段從訓練數(shù)據(jù)中學習一個模型,預測階段使用模型預測未知或未來的結果。分類一個有監(jiān)督的學習過程,即訓練數(shù)據(jù)庫中數(shù)據(jù)的類別是已知的,由此得到一個分類器。聚類按照某個特定標準(如距離)把一個數(shù)據(jù)集分割成不同的類或簇,使得同一個簇內(nèi)的數(shù)據(jù)對象的相似性盡可能大,同時不在同一個簇中的數(shù)據(jù)對象的差異性也盡可能地大。也即聚類后同一類的數(shù)據(jù)盡可能聚集到一起,不同類數(shù)據(jù)盡量分離。聚類是一種無監(jiān)督學習算法。分類器實現(xiàn)分類的算法。回歸指的是從一組數(shù)據(jù)出發(fā),確定某些變量之間的定量關系式,即建立數(shù)學模型并估計未知參數(shù)。回歸和分類都可以看成一種預測手段,如果預測離散的值可以使用分類、如果預測連續(xù)的值可以使用回歸。1.2相關概念——一些常用算法1.2相關概念——一些常用算法傳統(tǒng)機器學習算法中,最基礎、最具代表性的就是回歸算法(詳見第3章)。決策樹(詳見第5章)作為一種簡單、易理解的算法常被用于分類問題中。KNN(K近鄰,KNearestNeighbors)是一種基于距離度量的算法(詳見第4章)。SVM(支持向量機,SupportVectorMachines)是一種分類器,它使用升維的方法將低維度上非線性可分的問題變得線性可分,同時又巧妙地利用核技巧使得維度增加也不需要太大的運算量(詳見第7章)。還可以將多種弱學習器集成使用,通過一定的規(guī)則揉和多個弱學習器結果得到一個結果,從而達到媲美強學習器的算法效果(祥見第6章)。1.2相關概念——一些常用算法強化學習示意伴隨著數(shù)據(jù)大爆炸,以深度學習(詳見第9章)、遷移學習、強化學習為代表的機器學習算法大放異彩。深度學習基于深度神經(jīng)網(wǎng)絡,以卷積網(wǎng)絡、循環(huán)網(wǎng)絡、殘差網(wǎng)絡結合自注意力機制等,在海量訓練集加持下在語音、圖像等任務領域甚至可以超過人類的水平。遷移學習利用數(shù)據(jù)、任務或模型之間的相似性,將在舊領域學習過的模型和知識應用與新的領域,這樣可以提升模型的訓練效率,并且還可以在小樣本場景下取得較好的效果。強化學習主要由智能體(Agent)、環(huán)境(Environment)、狀態(tài)(State)、動作(Action)、獎勵(Reward)組成,如圖17。智能體執(zhí)行了某個動作后,環(huán)境將會轉換到一個新的狀態(tài),對于該新的狀態(tài)環(huán)境會給出獎勵信號(正獎勵或者負獎勵);智能體再根據(jù)反饋的獎勵,按照一定的策略執(zhí)行新的動作。上述過程為智能體和環(huán)境通過狀態(tài)、動作、獎勵進行交互的方式。智能體通過強化學習,可以知道自己在什么狀態(tài)下,應該采取什么樣的動作使得自身獲得最大獎勵。由于智能體與環(huán)境的交互方式與人類與環(huán)境的交互方式類似,可以認為強化學習是一套通用的學習框架,可用來解決通用人工智能的問題。因此強化學習也被稱為通用人工智能的機器學習方法。1.2相關概念——算法效果
預測分類為0預測分類為1真實分類為0TNFP真實分類為1FNTP混淆矩陣精確率和召回率都是二分類算法的評價指標,二分類的分類結果只有兩種可能,分別以0和1表示。使用算法對而分類問題進行分類預測的時候存在幾種可能:實際為0的分類,可能被正確預測為0(個數(shù)為TN)也可能被錯誤預測為1(個數(shù)為FP);實際為1的分類,可能被正確預測為1(個數(shù)為TP)也可能被錯誤預測為0(個數(shù)為FN)。1.2相關概念——算法效果精準率指預測分類為1的那些數(shù)據(jù)里預測正確的比例,即TP/(TP+FP)。比如我們有一個分類器可以預測一張腫瘤圖片是否為惡性腫瘤,如果100張圖片里面我們預測有10張為惡性腫瘤,而其中有2張是錯誤的預測,那精準率就是0.8。召回率指真實分類為1的那些數(shù)據(jù)里預測正確的比例,即TP/(TP+FN)。還是上一段中的例子,假設100張圖片里真正是惡性腫瘤的是8張,而這8張惡性腫瘤的圖片都被正確的預測出來了,那么召回率就是1。準確率:準確率是指所有的預測正確的樣本數(shù)占總樣本數(shù)的比例,即(TN+TP)/(TN+FN+TP+FP)。ROC曲線全稱ReceiverOperatingCharacteristiccurve,翻譯成中文是“受試者工作特征曲線”,簡稱ROC曲線。ROC曲線是二維平面上的曲線,橫坐標是誤報率(FalsePositiveRate,F(xiàn)PR),縱坐標是精準率(TruePositiveRate,TPR)。其中,F(xiàn)PR是FP/(FP+TN),也就是真實分類為0的樣本中被錯誤預測為1分類的比例。ROC曲線是怎么來的呢?對于一個分類器,我們通過調整它的參數(shù)可以得到多組(FPR,TPR),將這些(FPR,TPR)分別為橫坐標值、縱坐標得到一些點,將這些點連起來就可以得到一條曲線。ROC曲線能夠幫助我們較好對分類器進行調優(yōu)。目錄/Contents1.11.2理解機器學習一些相關概念1.3機器學習的發(fā)展1.4開發(fā)環(huán)境準備1.3機器學習的發(fā)展階段年份主要成果代表人物人工智能起源1936自動機模型理論阿蘭?圖靈(AlanTuring)1943MP模型沃倫?麥卡洛克(WarrenMcCulloch)、沃特?皮茨(Walter
Pitts)1951符號演算馮?諾依曼(JohnvonNeumann)1950邏輯主義克勞德?香農(nóng)(Claude
Shannon)1956人工智能約翰?麥卡錫(JohnMcCarthy)、馬文?明斯基(MarvinMinsky
)、克勞德?香農(nóng)(ClaudeShannon)人工智能初期1958LISP約翰?麥卡錫(JohnMcCarthy)1962感知器收斂理論弗蘭克?羅森布拉特(FrankRosenblatt)1972通用問題求解(GPS)艾倫?紐厄爾(AllenNewell)、赫伯特?西蒙(Herbert
Simon)1975框架知識表示馬文?明斯基(MarvinMinsky)進化計算1965進化策略英格?雷森博格(Ingo
Rechenberg
)1975遺傳算法約翰?亨利?霍蘭德(JohnHenryHolland)1992基因計算約翰?柯扎(JohnKoza)專家系統(tǒng)和知識工程1965模糊邏輯、模糊集拉特飛?扎德(LotfiZadeh)1969DENDRA、MYCIN費根鮑姆(Feigenbaum
)、布坎南(Buchanan
)、萊德伯格(Lederberg)1979ROSPECTOR杜達(Duda)神經(jīng)網(wǎng)絡1982自組織網(wǎng)絡圖沃?科霍寧(Teuvo
Kohonen)1986BP算法魯姆哈特(Rumelhart)、麥克利蘭(McClelland)1989卷積神經(jīng)網(wǎng)絡樂康(LeCun)1998LeNet樂康(LeCun)1997循環(huán)神經(jīng)網(wǎng)絡RNN塞普?霍普里特(SeppHochreiter)、尤爾根?施密德胡伯(JurgenSchmidhuber)分類算法1986決策樹ID3算法羅斯?昆蘭(RossQuinlan)1988Boosting
算法弗羅因德(Freund)、米迦勒?卡恩斯(MichaelKearns)1993C4.5算法羅斯?昆蘭(RossQuinlan)1995AdaBoost
算法弗羅因德(Freund)、羅伯特?夏普(Robert
Schapire)1995支持向量機科林納?科爾特斯(CorinnaCortes)、萬普尼克(Vapnik)2001隨機森林里奧?布雷曼(LeoBreiman)、阿黛勒?卡特勒(Adele
Cutler
)深度學習2006深度信念網(wǎng)絡杰弗里?希爾頓(Geoffrey
Hinton)2012谷歌大腦吳恩達(Andrew
Ng)2014生成對抗網(wǎng)絡GAN伊恩?古德費洛(IanGoodfellow)目錄/Contents1.11.2理解機器學習一些相關概念1.3機器學習的發(fā)展1.4開發(fā)環(huán)境準備1.4開發(fā)環(huán)境準備——Python語言開發(fā)環(huán)境由于針對各種平臺的Python解釋器的存在,一份Python代碼可以幾乎不需要修改就能運行在不同的平臺上。1.4開發(fā)環(huán)境準備——下載Anaconda經(jīng)過合理配置后,常見的Windows、基于Linux的系統(tǒng)(如Ubuntu、CentOS等)、MacOS都可以用于Python語言開發(fā)。常規(guī)方法配置Python環(huán)境對于初學者來說較繁瑣,但是Anaconda的出現(xiàn)使得這件事變得簡單。初學者可以直接安裝Anaconda個人版,它是一個免費、易于安裝的包管理器、環(huán)境管理器和Python發(fā)行版,包含1500多個開源包(Python包的概念將在2.4節(jié)介紹),Anaconda與平臺無關,在Windows、macOS、Linux上都可使用。1.4開發(fā)環(huán)境準備——安裝Anaconda對于Windows操作系統(tǒng),直接下載exe的可執(zhí)行文件安裝即可。以Windows11為例,安裝完成后會在開始菜單中自動新建一個Anaconda3的應用集合,包括AnacondaNavigator(工具導航,如圖110)、AnacondaPowerPrompt(命令行)等。1.4開發(fā)環(huán)境準備——為Conda添加國內(nèi)的鏡像源Conda是Python包和環(huán)境管理工具,而Anaconda中集成的Conda默認從官網(wǎng)下載各種軟件包,對于國內(nèi)用戶來說下載速度較慢,我們需要將它的鏡像源設置為國內(nèi)的網(wǎng)站。常用的Conda國內(nèi)鏡像源由清華、阿里云、豆瓣、中科大等單位提供。以添加清華大學的鏡像源為例,在開始菜單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)境準備——安裝各種包Python之所以在機器學習項目開發(fā)中好用得益于其大量免費的機器學習相關的包。而用Conda安裝包很簡單。例如:要安裝numpy包,直接在“AnacondaPowershellPrompt(anaconda3)”中使用命令“condainstallnumpy”即可自動安裝。1.4開發(fā)環(huán)境準備——安裝Cuda驅動(如果電腦有顯卡)GPU擁有更多ALU(GPU擁有更多ALU,能夠進行強大的計算),能夠進行強大的計算。深度學習的訓練往往需要更多的矩陣運算,使用GPU可以提高訓練速度。在安裝了NVIDIA顯卡的Windows或Linux系統(tǒng)的計算機上,可以從NVIDIA的官方網(wǎng)站(/cuda-downloads)分別下載并安裝驅動CUDA、CUDAToolkit,注意在下載和安裝的時候要選擇與自己顯卡對應的版本。PyTorch是由Facebook(現(xiàn)Meta)推出的一個開源的Python機器學習庫,用于機器視覺、自然語言處理等應用程序,當前很多人機器學習領域的科研論文的實驗都是基于Pytorch開發(fā)的。使用Conda安裝Pytorch較為簡單,直接使用命令“condainstallpytorchtorchvisioncudatoolkit=11.*”即可,其中cudatoolkit要和計算機的cudatoolkit一致。如果本機沒有為顯卡安裝CUDA,使用Conda命令安裝Pytorch,會自動安裝CUDA。1.4開發(fā)環(huán)境準備——安裝MiniCondaAnaconda雖然簡單、易用,但是它集成了太多東西,安裝完成大約需要占用3.5G的磁盤空間,對計算機性能要求較高。讀者還可以選擇安裝Miniconda,它是一款小巧的Python環(huán)境管理工具,安裝包大約只有70M左右,它的安裝程序中包含基礎的Conda軟件包管理器和Python。本書后續(xù)用到的練習,讀者可以只安裝Miniconda即可。無論是Anaconda還是Miniconda,安裝成功后在Windows開始菜單中都會有Anaconda3->AnacondaPowershellPrompt(anaconda3)選項,點擊打開AnacondaPowershellPrompt命令行窗口,輸入“conda–version”命令會顯示conda的版本號,輸入“python”命令可以進入Python命令行1.4.2. Python開發(fā)工具——VSCodeVSCode(全稱:VisualStudioCode)是由微軟推出的一款跨平臺的、免費的源代碼編輯器。經(jīng)過合理配置后,該軟件支持語法高亮、代碼自動補全(IntelliSense)、代碼重構、查看定義等功能,并且內(nèi)置了命令行工具和Git版本控制系統(tǒng)等。VSCode經(jīng)過合理配置后可以作為Python的集成開發(fā)環(huán)境,本書中的案例即使用它作為開發(fā)工具。第一步,安裝VSCode,在官網(wǎng)(/)下載適合本機操作系統(tǒng)的版本然后按照提示安裝即可。第二步,為VSCode安裝Python擴展,打開VSCode點擊左側邊欄的擴展圖標,在隨后出現(xiàn)的搜索框中輸入“Python”找到Microsoft的Python擴展,點擊安裝(Install)即可。需要注意,此處安裝的VSCodePython擴展并不是Python解釋器,它的作用只是讓VSCode能夠更好的編輯和調試Python源文件,包括代碼高亮顯示、自動補充、代碼跟蹤調試等等,如果我們想要運行編輯好的Python代碼需要為這些代碼指定Python解釋器。1.4.2. Python開發(fā)工具——VSCode在磁盤上新建一個文件夾,然后在VSCode中打開這個文件夾隨后,在文件夾中新建一個Python文件,可以命名為“Test.py”。在新建的Python文件中輸入一行Python指令(如圖115),接下來就是為此Python文件選擇Python解釋器。在代碼文件中同時按下鍵盤上的Ctrl+Shift+P三個按鍵進入命令面板,輸入Python:SelectInterpreter,然后點擊“Python:SelectInterpreter”選擇Python解釋器;隨后選擇python解釋器,如果本機系統(tǒng)安裝了多個版本的Python,帶星號是默認的python解釋器,這里選擇前面安裝的Anaconda的Python1.4.2. Python開發(fā)工具——VSCode要運行Python文件,直接在打開的文件空白位置單擊鼠標右鍵然后在彈出菜單中選擇“RunPythonFileinTerminal”即可,運行后會在下方的Terminal中輸出字符串“Hello,I’mmachine”1.4.2. Python開發(fā)工具——PyCharmPyCharm(如圖119)是最受歡迎的Python語言專用集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)之一,它也是一個跨平臺的開發(fā)工具,可在Windows、macOS和Linux操作系統(tǒng)上提供一致的體驗。PyCharm提供三個版本:專業(yè)版(Professional)、社區(qū)版(Community)。社區(qū)版是開源項目,免費但功能較少。專業(yè)版是收費的商業(yè)版,提供了一套出色的工具和功能。如有教育郵箱可以申請專業(yè)版一年的試用。PyCharm提供非常豐富的功能支持用戶進行Python開發(fā),它除了具有一般IDE具備的功能(如:調試、語法高亮、項目管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制)外,還提供了一些很好的功能用于Django開發(fā),同時支持GoogleAppEngine等等。如若進行大型Python工程開發(fā),PyCharm幾乎是不二之選。1.4.2. Python開發(fā)工具——Spyder安裝完整的Anaconda,它集成的工具里面就有Spyder。Spyder是一個簡單易用的Python開發(fā)環(huán)境,它的使用與MATLAB、RStudio非常相似,可以很方便地觀察和修改數(shù)值。另外,Spyder還有console控制臺和變量探索等功能,如果你想用Python語言做數(shù)據(jù)分析任務,那么Spyder是一款比較適用的開發(fā)工具。1.4.2. Python開發(fā)工具——JupyterJupyter的適用場景很多,它是基于網(wǎng)頁形式、結合了編寫說明文檔、數(shù)學公式、交互計算和其他富媒體形式的工具等,基本常用的開發(fā)工具里面都包含了。Jupyter里面編寫的內(nèi)容都可以以文檔形式輸出,默認保存的后綴名為.ipynb的JSON格式文件,還可以導出為:HTML、PDF、MarkDown、Python等格式。Anaconda完整版安裝也默認集成了Jupyter工具。當然在VSCode中安裝Jupyter擴展后也可以創(chuàng)建*.ipynb文件實現(xiàn)Jupyter的功能如果你要寫帶有Python代碼的實驗報告或者類似帶有大段文字說明和Python代碼的文檔,那么使用Jupyter這種形式就非常合適1.4.3. Python的包為了在Python語言中更好地進行模塊化管理,Python中使用了包(package)的概念。Python包本質上仍然是程序模塊,它還可以有子模塊。在編程的時候,創(chuàng)建Python包可以通過創(chuàng)建一個含有“__init__.py”文件的文件夾實現(xiàn).Python語言使用包的形式來組織程序模塊,這樣非常方便管理,只要頂層的包名不與別人沖突,那所有模塊都不會與別人沖突。右圖中,要調用module1.py只需要使用package.modele1即可,同樣調用module2.py使用package.child_package.module2即可。使用Python不僅可以方便地創(chuàng)建自己的包,還可以通過conda或pip一類的包管理工具方便、快捷地安裝第三方的免費包。機器學習中常用的Python包有TensoFlow、Pythorch、Scipy、Keras、Numpy、Seaborn、Scikit-Learn、Pandas、Matplotlib等,大多數(shù)在安裝Anaconda的時候都已集成,少數(shù)沒有集成的包在后續(xù)章節(jié)學習中需要用到的時候再做介紹。1.6. 實驗練習1. 實驗目的在自己的電腦上配置VSCode的Python開發(fā)環(huán)境。2. 實驗內(nèi)容1) 安裝miniconda;2) 安裝VSCode及其對應的插件;3) 新建一個簡單*.ipynb文件,體驗VSCode上使用jupyter進行python開發(fā)。1.6. 實驗練習3.實驗方法與步驟1)安裝miniconda找到miniconda的下載網(wǎng)址,根據(jù)個人電腦的操作系統(tǒng)選擇具體的miniconda版本下載,按照提示安裝即可。打開“AnacondaPowershellPrompt(miniconda3)”或“AnacondaPrompt(miniconda3)”命令行窗口,通過“condacreate-n虛擬環(huán)境名稱python=*.*”(其中,*.*表示本機的python版本號)命令創(chuàng)建python虛擬環(huán)境,再用“condaactivate虛擬環(huán)境名稱”激活創(chuàng)建的python虛擬環(huán)境。2)安裝VSCode及其對應的插件下載并安裝VSCode,下載網(wǎng)址為:/。安裝完成后打開VSCode,接下來要給它安裝必要的擴展(Extensions),python擴展,Jupyter擴展。3)新建一個簡單工程新建一個名為“Chap01”的文件夾,運行VSCode選擇File菜單下的OpenFolder子菜單,通過彈出的OpenFolder對話框選擇剛創(chuàng)建的“Chap01”文件夾,在隨后彈出的“Doyoutrusttheauthorsofthefilesinthisfolder?”對話框中點擊“Yes,Itrusttheauthors”按鈕。隨后點擊VSCode的File菜單中的NewFile子菜單,然后選擇創(chuàng)建一個“JupyterNotebook.ipynbsupport”文件,將文件命名為“chap01_main.ipynb”保存到Chap01文件夾中。然后可以在文件中,新建markdown文本或者python代碼的段落。謝謝基礎知識《機器學習簡明教程》02本章目標?理解向量、矩陣的概念及其相應的屬性?理解事件、概率、隨機變量、條件概率、期望宇方差等概念?了解優(yōu)化的基本概念?掌握Python入門知識?了解機器學習中常用的包目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計2.3優(yōu)化2.4Python基礎2.1線性代數(shù)——向量與范數(shù)
2.1線性代數(shù)——向量與范數(shù)
2.1線性代數(shù)——向量與范數(shù)
2.1線性代數(shù)——向量與范數(shù)兩個向量的夾角:對于兩個非零向量x,y∈Rn之間的夾角定義為
該公式表明兩個向量的內(nèi)積不會大于這兩個向量的范數(shù)的乘積.2.1線性代數(shù)——向量與范數(shù)
2.1線性代數(shù)——矩陣
2.1線性代數(shù)——矩陣
矩陣的轉置運算滿足以下性質2.1線性代數(shù)——矩陣
2.1線性代數(shù)——行列式與矩陣的逆
2.1線性代數(shù)——行列式計算與性質
2.1線性代數(shù)——逆矩陣
逆矩陣的性質:目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計2.3優(yōu)化2.4Python基礎2.2概率與統(tǒng)計——事件與概率
2.2概率與統(tǒng)計——隨機變量
則稱函數(shù)p為隨機變量X的概率密度函數(shù)。從幾何角度理解,
Pr(a≤X≤b)表示為以數(shù)軸區(qū)間[a,b]為底,函數(shù)曲線y=p(x)為頂?shù)那吿菪蔚拿娣e;直觀上,Pr(a≤X≤b)表示連續(xù)隨機變量X在區(qū)間[a,b]中的概率總和,即概率質量之和,而概率密度在該區(qū)間上的積分則對應為該區(qū)間的概率質量之和.2.2概率與統(tǒng)計——隨機變量
則稱X服從正態(tài)分布N(μ,σ2),并稱μ和σ2為隨機變量的X的期望與方差(期望與方差的概念見2.2.4)。若μ=0,σ=1,則N(0,1)稱為標準正態(tài)分布。多元正態(tài)分布:給定μ∈Rn和Σ∈Rn×n,其中Σ為對稱正定矩陣,若n維隨機變量X的概率密度函數(shù)為則稱X服從多元正態(tài)分布Nμ,Σ,并稱μ和Σ為隨機變量X的期望和協(xié)方差矩陣。2.2概率與統(tǒng)計——條件概率與獨立
若離散隨機變量X,Y相互獨立,則有:2.2概率與統(tǒng)計——條件概率與獨立
則貝葉斯定理(Bayesiantheorem)表示為:
2.2概率與統(tǒng)計——期望與方差
2.2概率與統(tǒng)計——期望與方差
若X為離散型隨機變量,其取值集合為{x1,x2,?,xn},則離散隨機變量X的方差為:若X為連續(xù)型隨機變量,則其方差為:隨機變量X的標準差(standarddeviation)記為σX,定義為:2.2概率與統(tǒng)計——期望與方差
2.2概率與統(tǒng)計——期望與方差大數(shù)定理:設X1,X2,?,Xn為獨立同分布的隨機變量序列,對任一1≤i≤n滿足EXi=μ且VarXi=σ2≤∞,則對任意的?>0大數(shù)定理表明,在隨機試驗中,每次出現(xiàn)的結果不同,但是大量重復試驗出現(xiàn)的結果的頻率趨近于一個常數(shù),該常數(shù)為該隨機試驗中隨機變量的期望。2.2概率與統(tǒng)計——期望與方差
2.2概率與統(tǒng)計——最大似然估計與最大后驗估計最大似然估計:假設有觀測數(shù)據(jù)集合D={x1,x2,?,xn}是由某個概率分布p(x;θ)產(chǎn)生,其中θ為確定而待估計的概率分布參數(shù),并且滿足對任意的1≤i,j≤n,觀測數(shù)據(jù)xi和xj相互獨立。則數(shù)據(jù)集D出現(xiàn)的概率為p(D;θ)=p(x1,x2,?,xn;θ),由觀測數(shù)據(jù)的獨立性可得p(x1,x2,?,xn;θ)=(px1;θ)?p(xn;θ),定義
2.2概率與統(tǒng)計——最大似然估計與最大后驗估計由于多個概率值進行連乘操作容易引起數(shù)值溢出的問題,通常引入負對數(shù)似然函數(shù)(negativeloglikelihood)
2.2概率與統(tǒng)計——最大似然估計與最大后驗估計
1.3機器學習的發(fā)展階段年份主要成果代表人物人工智能起源1936自動機模型理論阿蘭?圖靈(AlanTuring)1943MP模型沃倫?麥卡洛克(WarrenMcCulloch)、沃特?皮茨(Walter
Pitts)1951符號演算馮?諾依曼(JohnvonNeumann)1950邏輯主義克勞德?香農(nóng)(Claude
Shannon)1956人工智能約翰?麥卡錫(JohnMcCarthy)、馬文?明斯基(MarvinMinsky
)、克勞德?香農(nóng)(ClaudeShannon)人工智能初期1958LISP約翰?麥卡錫(JohnMcCarthy)1962感知器收斂理論弗蘭克?羅森布拉特(FrankRosenblatt)1972通用問題求解(GPS)艾倫?紐厄爾(AllenNewell)、赫伯特?西蒙(Herbert
Simon)1975框架知識表示馬文?明斯基(MarvinMinsky)進化計算1965進化策略英格?雷森博格(Ingo
Rechenberg
)1975遺傳算法約翰?亨利?霍蘭德(JohnHenryHolland)1992基因計算約翰?柯扎(JohnKoza)專家系統(tǒng)和知識工程1965模糊邏輯、模糊集拉特飛?扎德(LotfiZadeh)1969DENDRA、MYCIN費根鮑姆(Feigenbaum
)、布坎南(Buchanan
)、萊德伯格(Lederberg)1979ROSPECTOR杜達(Duda)神經(jīng)網(wǎng)絡1982自組織網(wǎng)絡圖沃?科霍寧(Teuvo
Kohonen)1986BP算法魯姆哈特(Rumelhart)、麥克利蘭(McClelland)1989卷積神經(jīng)網(wǎng)絡樂康(LeCun)1998LeNet樂康(LeCun)1997循環(huán)神經(jīng)網(wǎng)絡RNN塞普?霍普里特(SeppHochreiter)、尤爾根?施密德胡伯(JurgenSchmidhuber)分類算法1986決策樹ID3算法羅斯?昆蘭(RossQuinlan)1988Boosting
算法弗羅因德(Freund)、米迦勒?卡恩斯(MichaelKearns)1993C4.5算法羅斯?昆蘭(RossQuinlan)1995AdaBoost
算法弗羅因德(Freund)、羅伯特?夏普(Robert
Schapire)1995支持向量機科林納?科爾特斯(CorinnaCortes)、萬普尼克(Vapnik)2001隨機森林里奧?布雷曼(LeoBreiman)、阿黛勒?卡特勒(Adele
Cutler
)深度學習2006深度信念網(wǎng)絡杰弗里?希爾頓(Geoffrey
Hinton)2012谷歌大腦吳恩達(Andrew
Ng)2014生成對抗網(wǎng)絡GAN伊恩?古德費洛(IanGoodfellow)目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計2.3優(yōu)化2.4Python基礎2.3優(yōu)化——導數(shù)和梯度
2.3優(yōu)化——導數(shù)和梯度向量和矩陣的導數(shù)滿足以下性質:2.3優(yōu)化——導數(shù)和梯度
2.3優(yōu)化——凸函數(shù)與梯度下降凸函數(shù)示意圖
2.3優(yōu)化——凸函數(shù)與梯度下降
則不斷應用該過程直至收斂到局部最優(yōu)點。
稱為梯度下降法。
目錄/Contents2.12.2線性代數(shù)概率與統(tǒng)計2.3優(yōu)化2.4Python基礎2.4Python編程基礎——語法基礎標識符,由字母、數(shù)字、下劃線組成,區(qū)分大小寫,不能以數(shù)字開頭。以下劃線開頭的標識符有特殊含義。以單下劃線開頭的(_foo)的代表不能直接訪問的類屬性,以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結尾的(__foo__)代表Python里特殊方法專用的標識,如__init__()代表類的構造函數(shù)??s進,Python的代碼塊不使用大括號來控制類、函數(shù)、以及其他邏輯判斷,而是使用縮進來寫實現(xiàn)代碼分組。通常用四個空格來進行縮進。示例代碼如下:a,b=1,2ifa>b:x=aelse:x=bprint(x)運行結果為:2注釋,python中單行注釋采用#開頭。多行注釋使用三個單引號''或三個雙引號"""。示例代碼:"""三個雙引號注釋(可以換行)""""一個雙引號注釋(不能換行)"defmy_abs(x):#絕對值函數(shù)ifx>=0:return(x)else:return(-x)2.4Python編程基礎——語法基礎一條語句分多行顯示,python語句中一般以新行作為為語句的結束符。但是我們可以使用斜杠\將一行的語句分為多行顯示。如果有{},[],()跨行則可以不使用\。代碼示例如下:a=1+2+3+4+5+6+7+\7+8+9+10b=[1,2,3,4,5,6,7,8]Python也可以在同一行中使用多條語句,語句之間使用分號分割。2.4Python編程基礎——語法基礎Python輸出可以直接用print函數(shù)(python3.x中,print為內(nèi)置函數(shù)),示例代碼如下:print("Hello,Python.")x=1234print(x)#直接打印輸出變量y=5678print('x=%d,y=%d'%(x,y))#格式化輸出代碼運行結果為:Hello,Python.1234x=1234,y=5678Python3.x中,input()函數(shù)接受一個標準輸入數(shù)據(jù),返回為string類型。示例代碼如下:height
=
float(input('請輸入你的身高(單位:米):'))
print('你的身高是:%f米'%height)
代碼執(zhí)行到第一行的時候,程序等待用戶輸入,若用戶輸入1.7,,則代碼運行結果為:你的身高是:1.700000米輸入輸出2.4Python編程基礎——語法基礎基本變量類型變量就是存儲在內(nèi)存中的值,在創(chuàng)建變量時,解釋器會分配內(nèi)存,并決定什么數(shù)據(jù)可以被存儲在內(nèi)存中。Python語言中,變量不需要聲明,但在使用前都必須賦值,解釋器會根據(jù)賦值自動指定變量類型。每個變量用“=”號進行賦值,“=”號左邊為變量名,右邊為存儲在變量中的值,變量賦值以后該變量才會被創(chuàng)建。示例代碼如下:message="Helloworld"#將字符串"Helloworld"賦值給變量messagea=1#將整形1賦值給變量ab=1.234#將浮點型1.234賦值給變量bMax_CONNECTIONS=5000#將整型5000賦值給常量Max_CONNECTIONS由于Python沒有內(nèi)置的常量類型的關鍵字,Python程序員默認用全大寫來指出某個變量為常量,在編程過程中不去改變它的值。2.4Python編程基礎——語法基礎基本變量類型Python還可以用一條語句對多個變量進行賦值,示例代碼如下:a,b,c,d=20,5.5,True,4+3jprint(type(a),type(b),type(c),type(d))代碼運行結果為:<class'int'><class'float'><class'bool'><class'complex'>2.4Python編程基礎——語法基礎基本變量類型Python3中的標準數(shù)據(jù)類型有六種:Number(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Set(集合)、Dictionary(字典)。其中,Number(數(shù)字)、String(字符串)、Tuple(元組)不可變;List(列表)、Dictionary(字典)、Set(集合)可變。Number(數(shù)字)類型中,Python3支持int、float、bool、complex(復數(shù)),解釋器會根據(jù)值來自動匹配數(shù)具體的類型(type)。示例代碼如下:a,b,c,d=20,5.5,True,4+3jprint(type(a),type(b),type(c),type(d))運行結果為:<class'int'><class'float'><class'bool'><class'complex'>2.4Python編程基礎——語法基礎基本變量類型字符串或串(String)是由數(shù)字、字母、下劃線組成的一串字符。在python中用引號括起的都是字符串,引號可以是雙引號也可以是單引號。Python中,String也是一種對象類型,有內(nèi)部的方法和屬性可以調用。字符串常用的方法示例代碼如下: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}")代碼運行結果為:lower_nameishouyueen,upper_nameisHOUYUEEN,title_nameisHouYueen2.4Python編程基礎——語法基礎有序數(shù)據(jù)結構:列表list、元組tuple列表是有序集合,列表中可以放任何變量,沒有類型限制,列表通常放有多個元素,由方括號“[]”表示列表。示例代碼如下:list1=[1,'python',3,3.14]print(f"list1[0]is:{list1[0]}")list1[0]='new'print(f"Now,list1is:{list1}")代碼運行結果為:list1[0]is:1Now,list1is:['new','python',3,3.14]列表內(nèi)置了一些方法可以調用,append方法在列表后面添加元素、pop方法刪除列表的最后一個元素、sort方法對列表進行永久地修改排序,還可以使用冒號:對列表進行切片操作。示例代碼: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]}")運行結果為:appendedbicyclesis:['trek','connondale','redline','specialized','giant']poppedbicyclesis:['trek','connondale','redline','specialized']sortedbicyclesis:['connondale','redline','specialized','trek']bicycles[1:3]isf['redline','specialized']2.4Python編程基礎——語法基礎有序數(shù)據(jù)結構:列表list、元組tupletuple(元組),是有序集合,是不可變的,但可以進行組合和復制運算后會生成一個新的元組。示例代碼如下: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行運行沒有問題,但第5行試圖改變tuple_var1的值就會報錯,因為tuple類型一旦聲明則不可改變。代碼運行結果為(第3行開始的報錯信息會因代碼運行環(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編程基礎——語法基礎無序數(shù)據(jù)結構:集合set、字典dict集合是一個無序不重復元素的集,基本功能包括關系運算和消除重復元素。集合的基本形式如{'apple','orange','banana'}。集合是無序的,因此您無法確定項目的顯示順序,但可以通過for循環(huá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}")代碼運行結果為:set_var1is:{'banana','cherry','apple','grape'}set_var2is:{'orange','banana','apple'}set_var3is:{'banana','apple'}set_var4is:{'orange','grape','banana','cherry','apple'}2.4Python編程基礎——語法基礎無序數(shù)據(jù)結構:集合set、字典dict字典是一系列鍵值對,每個鍵都與一個值相關聯(lián),可以使用鍵來訪問其相關聯(lián)的值。與鍵相關聯(lián)的值可以是整數(shù)、浮點數(shù)、列表、字典等任何Python對象。字典用放在花括號“{}”中的鍵值對來表示,鍵和值用冒號“:”分開,鍵值對之間用逗號“,”分開。示例代碼如下:ict_var={"color":"red","points":5}print(f"dict_var[\'color\']is:{dict_var['color']}.")代碼運行結果為:dict_var['color']is:red.為字典添加鍵值對、修改字典中已有鍵的值的方法類似;另外,可以使用del語句刪除字典中的鍵值對。示例代碼: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}")代碼運行結果為:olddict_varis:{'color':'red','points':5}newdict_varis:{'color':'blue','points':5,'x_point':100}dict_vardeletedis:{'color':'blue','x_point':100}2.4Python編程基礎——語法基礎無序數(shù)據(jù)結構:集合set、字典dict使用get方法訪問字典中某個鍵的值,還可以指定被訪問的字典中不存在該鍵時的返回內(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)代碼運行結果為: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}.")代碼運行結果如下:keyis:color,valueis:red.keyis:points,valueis:5.keyis:x_point,valueis:100.keyis:y_point,valueis:50.2.4Python編程基礎——語法基礎條件語句if在編程過程中,通常需要通過對一些條件進行判斷,進而決定程序執(zhí)行符合條件的相應語句。和其他語言一樣,python的if語句可以檢查程序當前的狀態(tài),并采取相應的措施。if語句一般有if結構、if-else結構、if-elif-else結構三種,示例代碼如下:age=int(input("inputyourageplease:"))ifage<2:print("Youareababy")elifage<12:print("Youareakid")elifage<30:print("Youareayoungpeople")elifage<60:print("Youareamiddle-agedpeople")else:print("Youareanoldpeople")運行上面的代碼,若在第1行input函數(shù)時執(zhí)行時輸入10,代碼運行結果為:Youareakidif后面跟著的是條件判斷語句,如果是True,則執(zhí)行if后面的語句塊,如果是False則跳過if后面的語句塊,對elif進行判斷,如上例中的3個elif都為False,則執(zhí)行else后面的語句塊。這里需要注意的是,無論是if還是elif后面不能跟賦值語句(如ifa=1:),否則解釋器會報錯。2.4Python編程基礎——語法基礎循環(huán)語句for、whilefor循環(huán)用于迭代序列(即列表,元組,字典,集合或字符串)。這與其他編程語言中的for關鍵字不太相似,而是更像其他面向對象編程語言中的迭代器方法。通過使用for循環(huán),我們可以為列表、元組、集合中的每個項目執(zhí)行一組語句。示例代碼:fruits=["apple","banana","cherry"]forxinfruits:print(x)ifx=="banana":break上例中,依次取出列表fruits中的元素,并打印,當拿到字符串"banana"時,則執(zhí)行break語句,即退出for循環(huán)。如果沒有拿到字符串"banana",則在拿完列表fruits中的所有元素時,將退出for循環(huán)。因此,代碼運行結果為:applebanana2.4Python編程基礎——語法基礎循環(huán)語句for、while如需循環(huán)一組代碼指定的次數(shù),可以使用range()函數(shù),range()函數(shù)返回一個數(shù)字序列,默認情況下從0開始,并遞增1(默認地),并以指定的數(shù)字結束。示例代碼如下:foriinrange(3):print(i)代碼運行結果為:012for循環(huán)將對集合中的每個元素都執(zhí)行一個代碼塊,當遍歷完所有元素后將退出循環(huán),而while循環(huán)則不斷運行,直到指定的條件不滿足為止。示例代碼如下:number=0whilenumber<3: number+=1 print(number)代碼運行結果為:1232.4Python編程基礎——Python運算符算術運算符算術運算也即數(shù)學運算,Python通過算術運算符對數(shù)字或變量等進行數(shù)學運算,比如加減乘除對應的算術運算符分別為:+、-、*、/。Python常用的算術運算符如表:運算符說明實例結果+加12.45+1527.45-減4.56-0.26 4.3*乘5*3.618.0/除法(和數(shù)學中的規(guī)則一樣)7/23.5//整除(只保留商的整數(shù)部分)7//23%取余,即返回除法的余數(shù)7%21**冪(次方)運算,即返回x的y次方2**416,即24result1=1+(100-20)/4+5*2#四則運算print("result1=",result1)
importmathfrommathimportpi#引入常量piresult2=math.sin(pi/2)#三角函數(shù)print("result2=",result2)執(zhí)行結果如下:result1=31.0result2=1.02.4Python編程基礎——Python運算符賦值運算符賦值運算符用來把右側的值傳遞給左側的變量(或者常量);可以直接將右側的值交給左側的變量,也可以進行某些運算后再交給左側的變量,比如加減乘除、函數(shù)調用、邏輯運算等。Python中最基本的賦值運算符是等號“=”,結合其它運算符,“=”還能擴展出更強大的賦值運算符,如表:val1_int=100val2_f=25.5val1_int-=80#等價于n1=n1-80val2_f*=val1_int-10#等價于f1=f1*(n1-10)print("val1_int=%d"%val1_int)print("val2_f=%.2f"%val2_f)運行結果如下:val1_int=20val2_f=255.00運算符說明用法舉例等價形式=最基本的賦值運算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編程基礎——Python運算符位運算符Python位運算按照數(shù)據(jù)在內(nèi)存中的二進制位(Bit)進行操作,它一般用于底層開發(fā)(算法設計、驅動、圖像處理、單片機等),在應用層開發(fā)(Web開發(fā)、Linux運維等)中并不常見。Python位運算符只能用來操作整數(shù)類型,它按照整數(shù)在內(nèi)存中的二進制形式進行計算。Python支持的位運算符如表:位運算符說明使用形式舉例&按位與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)代碼運行結果如下:9|5=132.4Python編程基礎——Python運算符比較運算符比較運算符,也稱關系運算符,用于對常量、變量或表達式的結果進行大小比較。如果這種比較是成立的,則返回True(真),反之則返回False(假)。Python支持的比較運算符如表:比較運算符說明>
大于,如果>前面的值大于后面的值,則返回True,否則返回False。<
小于,如果<前面的值小于后面的值,則返回True,否則返回False。==等于,如果==兩邊的值相等,則返回True,否則返回False。>=大于等于(等價于數(shù)學中的≥),如果>=前面的值大于或者等于后面的值,則返回True,否則返回False。<=小于等于(等價于數(shù)學中的≤),如果<=前面的值小于或者等于后面的值,則返回True,否則返回False。!=不等于(等價于數(shù)學中的≠),如果!=兩邊的值不相等,則返回True,否則返回False。is判斷兩個變量所引用的對象是否相同,如果相同則返回True,否則返回False。isnot判斷兩個變量所引用的對象是否不相同,如果不相同則返回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)代碼運行結果如下:89是否大于100:False24*5是否大于等于76:True86.5是否等于86.5:True34是否等于34.0:TrueFalse是否小于True:TrueTrue是否等于True:False2.4Python編程基礎——Python運算符邏輯運算符用于對布爾型變量進行運算,其結果也是布爾型的(注意:若邏輯運算用于非布爾型變量,得到的結果也可能是非布爾型的),只有and、or、not三種,如表:邏輯運算符含義基本格式說明and邏輯與運算,等價于數(shù)學中的“且”aandb當a和b兩個表達式都為真時,aandb的結果才為真,否則為假。or邏輯或運算,等價于數(shù)學中的“或”aorb當a和b兩個表達式都為假時,aorb的結果才是假,否則為真。not邏輯非運算,等價于數(shù)學中的“非”nota如果a為真,那么nota的結果為假;如果a為假,那么nota的結果為真。相當于對a取反。邏輯運算的示例代碼如下:print(2>0and3<0or3<0)print(2>0or3<0and3<0)print(('test'=='Test')or1!=1.0and2==2.0)代碼運行結果如下:FalseTrueFalse2.4Python編程基礎——Python運算符三目運算符使用ifelse實現(xiàn)三目運算符(條件運算符)的格式為:“exp1ifcontionelseexp2”。a=3b=4max=aifa>belsebprint("max=",max)示例代碼運行結果為:max=42.4Python編程基礎——Python運算符運算符優(yōu)先級和結合性當多個運算符同時出現(xiàn)在一個表達式中時,先執(zhí)行哪個運算符由運算符的優(yōu)先級決定。Python支持的運算符有幾十種之多,被劃分成將近二十個優(yōu)先級,有的運算符優(yōu)先級不同,有的運算符優(yōu)先級相同。一個表達式中有多個優(yōu)先級時按優(yōu)先級從高到低先后執(zhí)行,如果優(yōu)先級相同,則大多數(shù)服從左結合性(即相同優(yōu)先級的運算符按從左到右依次執(zhí)行);有兩個例外,乘方(**)運算符、單目運算符(如邏輯非運算not)服從右結合性。運算符說明Python運算符優(yōu)先級結合性小括號()19無索引運算符x[i]或x[i1:i2[:i3]]18左屬性訪問x.attribute17左乘方**16右按位取反~15右符號運算符+(正號)、-(負號)14右乘除*、/、//、%13左加減+、-12左位移>>、<<11左按位與&10右按位異或^9左按位或|8左比較運算符==、!=、>、>=、<、<=
7左is運算符is、isnot6左in運算符in、notin5左邏輯非not4右邏輯與and3左邏輯或or2左逗號運算符exp1,exp21左2.4Python編程基礎——Python函數(shù)函數(shù)是帶名字的代碼塊,用于完成具體的任務def函數(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ù)+關鍵字參數(shù)hello_user("William","Clinton",middle_name="Jafferson")函數(shù)調用示例HelloWilliamClintonHelloWilliamJaffersonClintonHelloWilliamJaffersonClinton代碼運行結果2.4Python編程基礎——Python函數(shù)Python的函數(shù)還支持可變長度參數(shù)??勺冮L參數(shù)主要有兩種形式,即*parameter和**parameter。前者用來接收多個位置參數(shù)并將其放在一個元組中,后者接收多個關鍵參數(shù)并將其放入字典中。defdemo(*p):print(p)
de
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級英語上冊語法(可數(shù)名詞復數(shù)變化規(guī)律)
- 龍巖市武平縣十方中學九年級英語 初中語法梳理和提高學案 新人教版
- DB34T 1268-2024油茶營造林技術規(guī)程
- 廣東省廣州市2024年中考歷史真題試卷
- 寧波七中重點達標名校2024年中考數(shù)學最后一模試卷含解析
- 廣西壯族自治區(qū)欽州市浦北縣2024-2025學年八年級上學期10月期中考試數(shù)學試題(無答案)
- 養(yǎng)牛基礎知識題庫單選題100道及答案解析
- 湘教版五年級科學下冊全冊教案湘教版
- 蜻蜓飛飛課件教學課件
- 店轉讓欠款合同模板
- DB44∕T 1591-2015 小檔口、小作坊、小娛樂場所消防安全整治技術要求
- 第二講民事法律關系ppt課件
- 通用版:法定代表人信息登記表格(董事長、執(zhí)行董事、經(jīng)理)
- 醫(yī)療美容主診醫(yī)師備案申請表(通用版)
- 棕色偵探推理劇本殺活動方案項目介紹ppt模板
- 城鎮(zhèn)地籍調查規(guī)程(TD1001-1993)
- 騰訊公司績效管理制度-騰訊公司績效管理制度
- 新概念英語第一冊55課到60課測試題(共4頁)
- 國家重點研發(fā)計劃內(nèi)部管理制度模板
- 汽車維修工時定額與收費標準精編版
- 師范生實習證明模板(共1頁)
評論
0/150
提交評論