Python機(jī)器學(xué)習(xí)項(xiàng)目化教程(微課視頻版)課件全套 陳銳 第1-16章 機(jī)器學(xué)習(xí)概述- 深度學(xué)習(xí)垃圾郵件分類_第1頁
Python機(jī)器學(xué)習(xí)項(xiàng)目化教程(微課視頻版)課件全套 陳銳 第1-16章 機(jī)器學(xué)習(xí)概述- 深度學(xué)習(xí)垃圾郵件分類_第2頁
Python機(jī)器學(xué)習(xí)項(xiàng)目化教程(微課視頻版)課件全套 陳銳 第1-16章 機(jī)器學(xué)習(xí)概述- 深度學(xué)習(xí)垃圾郵件分類_第3頁
Python機(jī)器學(xué)習(xí)項(xiàng)目化教程(微課視頻版)課件全套 陳銳 第1-16章 機(jī)器學(xué)習(xí)概述- 深度學(xué)習(xí)垃圾郵件分類_第4頁
Python機(jī)器學(xué)習(xí)項(xiàng)目化教程(微課視頻版)課件全套 陳銳 第1-16章 機(jī)器學(xué)習(xí)概述- 深度學(xué)習(xí)垃圾郵件分類_第5頁
已閱讀5頁,還剩387頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章機(jī)器學(xué)習(xí)概述目錄CONTENTS1.1什么是機(jī)器學(xué)習(xí)1.2

機(jī)器學(xué)習(xí)簡史1.3機(jī)器學(xué)習(xí)、人工智能與深度學(xué)習(xí)的關(guān)系1.4機(jī)器學(xué)習(xí)相關(guān)概念1.5機(jī)器學(xué)習(xí)的任務(wù)1.6機(jī)器學(xué)習(xí)的一般步驟1.7本章小結(jié)1.1什么是機(jī)器學(xué)習(xí)學(xué)習(xí)基礎(chǔ)信息素養(yǎng)高1948年,計(jì)算機(jī)科學(xué)家阿蘭?圖靈(AlanTuring)在《Mind》上發(fā)表的論文“ComputingMachineryandIntelligence”中提出了著名的“圖靈測試”。1956年,塞繆爾(ArthurSamuel)設(shè)計(jì)了一個(gè)具有自學(xué)習(xí)能力的跳棋程序,可以在不斷人機(jī)對弈的過程中提升自己的棋藝。1959年,他提出了“機(jī)器學(xué)習(xí)”的概念,此研究領(lǐng)域是計(jì)算機(jī)在不被明確編程的情況下,賦予它學(xué)習(xí)能力。010203信息素養(yǎng)高2016年3月谷歌的AlphaGo年度圍棋挑戰(zhàn)賽,AlphaGo以4:1的絕對優(yōu)勢戰(zhàn)勝圍棋世界冠軍李世石九段。041.1機(jī)器學(xué)習(xí)概述機(jī)器學(xué)習(xí)的任務(wù)就是研究機(jī)器模擬人類智能的高效算法,使其能像人類一樣思考、解決實(shí)際問題。手寫數(shù)字識別011.1機(jī)器學(xué)習(xí)概述正常郵件和垃圾郵件的詞云識別好瓜和壞瓜02031.1機(jī)器學(xué)習(xí)概述除了分類問題,機(jī)器學(xué)習(xí)還可以進(jìn)行預(yù)測。1.2機(jī)器學(xué)習(xí)簡史1

萌芽期1943年,心理學(xué)家麥W?Mcculloch和數(shù)理邏輯學(xué)家W?Pitts在發(fā)表的論文中提出了MP模型。MP模型是模仿神經(jīng)元的結(jié)構(gòu)和工作原理,MP模型作為人工神經(jīng)網(wǎng)絡(luò)的起源,開創(chuàng)了人工神經(jīng)網(wǎng)絡(luò)的新時(shí)代。1958年,美國科學(xué)家P.Rosenblatt提出了由兩層神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò)──Perceptron,即感知機(jī),可解決輸入的數(shù)據(jù)線性二分類問題,從而激發(fā)科學(xué)家對人工神經(jīng)網(wǎng)絡(luò)研究的興趣,對神經(jīng)網(wǎng)絡(luò)的發(fā)展起到了里程碑的意義。1.2機(jī)器學(xué)習(xí)簡史2發(fā)展期1963年,層次聚類算法被提出,這是一種非常符合人的直觀思維的算法。1967年,J.B.MacQueen在1967年提出的k均值聚類算法。1983年,著名物理學(xué)家J.J.Hopfield提出了神經(jīng)網(wǎng)絡(luò)模型,它可模擬人類的記憶,并利用該算法求解“流動(dòng)推銷員問題”這個(gè)NP難題。但由于該算法存在容易陷入局部最小值的缺陷,因此并未在當(dāng)時(shí)引起很大的轟動(dòng)。1983年,TerrenceSejnowski和Hinton等人發(fā)明了玻爾茲曼機(jī)(BoltzmannMachines),它本質(zhì)是一種無監(jiān)督模型,首次提出的多層網(wǎng)絡(luò)的學(xué)習(xí)算法,用于對輸入數(shù)據(jù)進(jìn)行重構(gòu)以提取數(shù)據(jù)特征做預(yù)測分析。1.2機(jī)器學(xué)習(xí)簡史2發(fā)展期1986年,人工智能專家J.RossQuinlan提出著名的ID3算法,通過減少樹的深度加快算法的運(yùn)行速度。同年,D.E.Rumelhart等人提出了BP算法,BP算法一直是被應(yīng)用得最廣泛的機(jī)器學(xué)習(xí)算法之一。這期間,決策樹的3種典型算法ID3、CART、C4.5陸續(xù)被提出。1995年,支持向量機(jī)(SVM算法)和AdaBoost算法被提出,SVM以統(tǒng)計(jì)學(xué)為基礎(chǔ),解決了非線性問題的分類問題。AdaBoost通過將一些簡單的弱分類器集成起來使用,構(gòu)建強(qiáng)分類器,使精度獲得很大提升。代表了集成學(xué)習(xí)算法的勝利。1.2機(jī)器學(xué)習(xí)簡史3蓬勃期2006年,GeoffreyHinton團(tuán)隊(duì)在《科學(xué)》雜志上發(fā)表了一篇關(guān)于“梯度消失”問題解決方案的論文,提出了深度學(xué)習(xí)概念,產(chǎn)生了巨大影響。GeoffreyHinton也因此被稱為深度學(xué)習(xí)之父。2016年,由Google基于深度學(xué)習(xí)開發(fā)的AlphaGo以4:1擊敗世界圍棋冠軍李世石,隨后,該程序與中日韓數(shù)十位圍棋高手進(jìn)行快棋對決,連續(xù)60局無一敗績。2017年,基于強(qiáng)化學(xué)習(xí)算法的AlphaGo升級版AlphaGoZero橫空出世,無一敗績地輕松擊敗了之前的AlphaGo。1.3機(jī)器學(xué)習(xí)、人工智能與深度學(xué)習(xí)的關(guān)系1人工智能是一門科學(xué)與工程,是研究、開發(fā)用于模擬、延伸和擴(kuò)展人的智能的理論、方法、技術(shù)及應(yīng)用系統(tǒng)的一門新的技術(shù)科學(xué),研究內(nèi)容涵蓋語音識別、圖像識別、自然語言處理、智能搜索和專家系統(tǒng)等。2機(jī)器學(xué)習(xí)是人工智能的一個(gè)分支,是實(shí)現(xiàn)人工智能的方法之一。機(jī)器學(xué)習(xí)是對人類生活中學(xué)習(xí)過程的一個(gè)模擬,而在這整個(gè)過程中,最關(guān)鍵的是數(shù)據(jù)。kNN、K-means、DecisionTrees、SVM、樸素貝葉斯、感知機(jī)、EM算法、邏輯回歸及ANN(ArtificialNeuralNetworks,人工神經(jīng)網(wǎng)絡(luò))都是常見的機(jī)器學(xué)習(xí)算法。1.3機(jī)器學(xué)習(xí)、人工智能與深度學(xué)習(xí)的關(guān)系3深度學(xué)習(xí)是一種機(jī)器學(xué)習(xí)方法,發(fā)展于人工智能的聯(lián)結(jié)主義學(xué)派,其概念源于人工神經(jīng)網(wǎng)絡(luò),它通過組合低層特征形成更加抽象的高層特征,其動(dòng)機(jī)在于建立、模擬人腦進(jìn)行分析學(xué)習(xí)。在2010年之后,各種深度學(xué)習(xí)框架的發(fā)布及在各領(lǐng)域的突出表現(xiàn),更進(jìn)一步促進(jìn)了深度學(xué)習(xí)算法的發(fā)展。1.4機(jī)器學(xué)習(xí)相關(guān)概念1數(shù)據(jù)集(DataSet):數(shù)據(jù)的集合,每一條單獨(dú)的數(shù)據(jù)被稱為樣本(Sample)。對于每個(gè)樣本,它通常具有一些屬性(Attribute)或者特征(Feature),特征所具體取得值被稱為特征值(FeatureValue)。訓(xùn)練集(TrainingSet)和測試集(TestingSet):在建立機(jī)器學(xué)習(xí)模型過程中,通常將數(shù)據(jù)集分為兩部分:訓(xùn)練集和測試集,其中,訓(xùn)練集用于對模型參數(shù)進(jìn)行訓(xùn)練,另一部分用于對訓(xùn)練好的模型進(jìn)行測試,驗(yàn)證模型的性能好壞,包括準(zhǔn)確率、泛化能力。23驗(yàn)證集(ValidationSet):用于在訓(xùn)練過程中檢驗(yàn)?zāi)P偷男阅埽哉{(diào)整參超參數(shù)。1.4機(jī)器學(xué)習(xí)相關(guān)概念4評估:在訓(xùn)練出算法模型后,為了驗(yàn)證算法模型的好壞,需要對該算法在數(shù)據(jù)集上根據(jù)評價(jià)指標(biāo)進(jìn)行測試,這個(gè)測試過程就是算法的評估。模型(Model):模型是一種算法的表達(dá),模型用于在海量數(shù)據(jù)中查找模式或進(jìn)行預(yù)測。從數(shù)據(jù)中使用算法得到模型的過程稱為學(xué)習(xí)(Learning)或訓(xùn)練(Training)。過擬合(Overfitting)和欠擬合(Underfitting):過擬合是指模型在訓(xùn)練集上表現(xiàn)很好,但在測試集上卻表現(xiàn)很差。欠擬合是模型在訓(xùn)練集上就表現(xiàn)很差,不能獲得足夠低的誤差,無法學(xué)到數(shù)據(jù)背后的規(guī)律。561.5機(jī)器學(xué)習(xí)的任務(wù)1監(jiān)督學(xué)習(xí)。監(jiān)督學(xué)習(xí)是從給定的訓(xùn)練數(shù)據(jù)集中學(xué)習(xí)出一個(gè)模型參數(shù),然后根據(jù)這個(gè)模型對未知樣本進(jìn)行預(yù)測。在監(jiān)督學(xué)習(xí)中,樣本同時(shí)包含特征(輸入)和標(biāo)簽(輸出)。根據(jù)預(yù)測結(jié)果輸出的類別,可分為分類和回歸。1.5機(jī)器學(xué)習(xí)的任務(wù)2無監(jiān)督學(xué)習(xí)。無監(jiān)督學(xué)習(xí)也稱為非監(jiān)督學(xué)習(xí),輸入的樣本只包含特征,而不包含標(biāo)簽。學(xué)習(xí)模型是數(shù)據(jù)內(nèi)在結(jié)構(gòu)的推斷,并不知道分類結(jié)果是否正確。常見的無監(jiān)督學(xué)習(xí)算法有k均值聚類、層次聚類、GMM聚類。利用層次聚類算法對西瓜數(shù)據(jù)集進(jìn)行聚類的散點(diǎn)圖如圖所示。1.3機(jī)器學(xué)習(xí)的任務(wù)3半監(jiān)督學(xué)習(xí)。半監(jiān)督學(xué)習(xí)(Semi-supervisedLearning)是一種介于監(jiān)督和無監(jiān)督學(xué)習(xí)之間的學(xué)習(xí)方式,通過使用帶標(biāo)簽數(shù)據(jù)及大量不帶標(biāo)簽的數(shù)據(jù)進(jìn)行模型學(xué)習(xí)。在監(jiān)督學(xué)習(xí)中,樣本的類別標(biāo)簽是已知的,對于無監(jiān)督學(xué)習(xí),樣本是無標(biāo)簽的。4強(qiáng)化學(xué)習(xí)(ReinforcementLearning,RL)是一種比較復(fù)雜的機(jī)器學(xué)習(xí)方法,強(qiáng)調(diào)系統(tǒng)與外界不斷的交互反饋,通過不斷與環(huán)境交互、試錯(cuò),最終完成特定目的或使整體行動(dòng)的收益最大化。強(qiáng)化學(xué)習(xí)不需要訓(xùn)練數(shù)據(jù)的標(biāo)簽,但需要每一步行動(dòng)需要環(huán)境給予反饋,基于反饋不斷調(diào)整訓(xùn)練對象的行為。AlghaGo、無人駕駛汽車就是強(qiáng)化學(xué)習(xí)的的訓(xùn)練對象。1.6機(jī)器學(xué)習(xí)的一般步驟機(jī)器學(xué)習(xí)專注于讓機(jī)器從大量的數(shù)據(jù)中模擬人類思考和歸納總結(jié)的過程,獲得計(jì)算模型并自動(dòng)判斷和推測相應(yīng)的輸出結(jié)果。機(jī)器學(xué)習(xí)的處理流程如圖所示。1.7本章小結(jié)本章主要介紹了機(jī)器學(xué)習(xí)的基本知識,涵蓋相關(guān)概念、發(fā)展簡史、機(jī)器學(xué)習(xí)的任務(wù)、機(jī)器學(xué)習(xí)的一般步驟。機(jī)器學(xué)習(xí)算法可分為監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和半監(jiān)督學(xué)習(xí),根據(jù)處理任務(wù)的性質(zhì),可分為分類、回歸兩大類。要想學(xué)好機(jī)器學(xué)習(xí),首先應(yīng)該熟練掌握Python語言開發(fā)工具和相關(guān)的各種工具庫。其次,理解各種算法思想和推導(dǎo)過程,能使用Python內(nèi)置語法實(shí)現(xiàn)該算法。機(jī)器學(xué)習(xí)作為人工智能的一個(gè)重要實(shí)現(xiàn)工具和分支,已被成功應(yīng)用于各個(gè)領(lǐng)域,其技術(shù)仍在快速發(fā)展,并在很多方面取得了很大成就。第2章機(jī)器學(xué)習(xí)基礎(chǔ)及Python常用庫目錄CONTENTS2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境2.2機(jī)器學(xué)習(xí)基礎(chǔ)2.3本章小結(jié)2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境學(xué)習(xí)基礎(chǔ)學(xué)習(xí)認(rèn)知能力信息素養(yǎng)高2.1.1Python開發(fā)環(huán)境簡介Spyder是一款強(qiáng)大的交互式Python語言開發(fā)工具,提供高級的代碼編輯、交互測試、調(diào)試等特性,它主要用于數(shù)據(jù)科學(xué)領(lǐng)域,具有高級編輯、分析、數(shù)據(jù)可視化和調(diào)試等功能,開發(fā)界面設(shè)計(jì)類似于MATLAB。Spyder開發(fā)環(huán)境如圖2-1所示。PyCharm、Anaconda是Python常見的開發(fā)環(huán)境,其中Anaconda包含了Python常用的庫,自帶有JupyterNoteBook、Spyder開發(fā)工具,且具有強(qiáng)大的版本管理功能,對不同版本的工具包的安裝有很好的支持。2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境JupyterNotebook以網(wǎng)頁的形式呈現(xiàn),可在網(wǎng)頁頁面中直接編寫代碼和運(yùn)行代碼,支持使用LaTeX編寫數(shù)學(xué)性說明。JupterNoteBook開發(fā)環(huán)境如圖2-2所示。2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境近鄰算法原理PyCharm是由著名的軟件開發(fā)公司JetBrains專門為Python開發(fā)人員打造的一款功能強(qiáng)大的Python集成開發(fā)環(huán)境,它包含智能提示、語法高亮、程序調(diào)試、Project管理、代碼跳轉(zhuǎn)、版本控制等功能。2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境Python是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,擁有int、float、byte、bool等基本數(shù)據(jù)類型,以及l(fā)ist(列表)、tuple(元組)、dict(字典)等功能強(qiáng)大、使用靈活的序列類型。#計(jì)算前n個(gè)數(shù)的和sum=0foriinrange(11):sum+=iprint("sum=",sum)sum=552.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境(1)range()函數(shù)的作用是返回一個(gè)迭代對象,其語法格式如下:range(start,stop[,step])(2)in是成員測試運(yùn)算符,用于測試一個(gè)對象是否是另一個(gè)對象中的元素。#成員測試flag=5in[1,2,3,4,5]print(flag)foriin(10,11,12,13,14):print(i,end='')True10111213142.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境(3)map()函數(shù)根據(jù)提供的函數(shù)對指定序列進(jìn)行映射,其語法格式如下:map(function,iterable,...)其中,參數(shù)function表示函數(shù),參數(shù)iterable表示序列,可以為多個(gè)序列。#計(jì)算每個(gè)數(shù)的平方x=[1,2,3,4,5]res=map(lambdai:i**2,x)print(list(res))[1,4,9,16,25]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境defdiv2(x):#函數(shù)定義,將x除以2returnx/2defsum(x,y):#函數(shù)定義,求兩個(gè)數(shù)的和returnx+yprint(list(map(div2,[10,20,30,40,50])))#將列表中各元素除以2print(list(map(sum,[1,2,3,4,5],[6,7,8,9,10])))#計(jì)算兩個(gè)列表中對應(yīng)元素之和[5.0,10.0,15.0,20.0,25.0][7,9,11,13,15]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境1.列表列表是一種可變序列,用于存儲(chǔ)若干元素,其地址空間是連續(xù)的,類似于Java、C++中的數(shù)組。x=[1,2,'a',"b","abc",23.56,(10,20,30),[60,70,80]]foriinx:print(i)程序運(yùn)行結(jié)果如下:2ababc23.56(10,20,30)[60,70,80]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境x=[1,2,'a',"b","abc",23.56]foriinrange(len(x)):print(x[i],end='')程序運(yùn)行結(jié)果如下:12ababc23.56x=[1,2,3]x=x+[5]print(x)x.append(10)print(x)x.extend([10,20,30])print(x)x.insert(5,100)print(x)x.remove(20)print(x)print(x.pop())print(x)[1,2,3,5][1,2,3,5,10][1,2,3,5,10,10,20,30][1,2,3,5,10,100,10,20,30][1,2,3,5,10,100,10,30]30[1,2,3,5,10,100,10]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境Python與Java、C++語言最大的區(qū)別就是序列的切片操作,列表、元組、字符串、range對象都支持切片操作。切片由兩個(gè)冒號分隔的3個(gè)數(shù)字組成,其語法格式為:[start:stop:step]start表示切片的開始位置,stop表示切片的結(jié)束位置,但不包含該結(jié)束位置,step表示步長(默認(rèn)為1),當(dāng)步長省略時(shí),最后一個(gè)冒號也可以省略。例如:m=[10,20,30,40,50,60]print(m[2:len(m)])print(m[::])print(m[::-1])[30,40,50,60][10,20,30,40,50,60][60,50,40,30,20,10]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境在數(shù)據(jù)處理過程中,經(jīng)常會(huì)遇到嵌套列表,如果要取嵌套列表中的某一行元素或某一列元素,則需要列表推導(dǎo)式。例如:a=[[1,2,3],[4,5,6]]print(a[0])#取一行#print(a[:,0])#這樣寫會(huì)產(chǎn)生錯(cuò)誤TypeError:listindicesmustbeintegersorslices,nottupleb=[x[0]forxina]#取嵌套列表中的第1列元素print(b)程序運(yùn)行結(jié)果如下:[1,2,3][1,4]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境元組與列表類似,其區(qū)別在于元組是不可變的序列。列表支持元素引用,但不支持修改、增加與刪除操作。a=(1,2,3,4,5)#創(chuàng)建元組aprint(a)foriina:print(i,end='')程序運(yùn)行結(jié)果如下:(1,2,3,4,5)123452.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境zip()函數(shù)可將多個(gè)可迭代對象按照相應(yīng)位置上的元素組合為元組,然后返回由這些元組組成的zip對象。如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長度與最短的對象相同。a=('name','age','grade','tel')b=('張三',25,'大三'fori,jinzip(a,b):print(i,j,end=';')c=(i*2foriinrange(10))print(tuple(c))name張三;age25;grade大三;te(0,2,4,6,8,10,12,14,16,18)2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境字典是由若干“鍵-值”對構(gòu)成的無序序列,字典中每個(gè)元素由兩部分組成:鍵和值。其中,鍵的取值可以是任意不變的數(shù)據(jù)類型,如整數(shù)、浮點(diǎn)數(shù)、字符串、元組等,但不能是列表、字典、集合等可變的數(shù)據(jù)類型。key=['101','102','103','104','105']value=[10,9,8,7,6]dic=dict(zip(key,value))print(dic)print(dic['102'])dic['106']=10dic['101']=5fori,jindic.items():print(i,j,sep=':'){'101':10,'102':9,'103':8,'104':7,'105':6}9101:5102:9103:8104:7105:6106:102.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境集合也是一個(gè)無序的可變序列,同一個(gè)集合中的對象不能重復(fù)出現(xiàn),這與數(shù)學(xué)中的集合具有同樣的性質(zhì)。集合運(yùn)算包括并集、交集、差集和子集等。例如:x=set(range(10))y={-1,-2,-3,5,6}z=x|y#并集print("x=",x)print("y=",y)print("并集操作:",z)z=x&y#交集print("交集操作:",z)z=x-y#差集print("差集操作:",z)z.pop()print(z)z.remove(3)print(z)x={0,1,2,3,4,5,6,7,8,9}y={5,6,-2,-3,-1}并集操作:{0,1,2,3,4,5,6,7,8,9,-1,-3,-2}交集操作:{5,6}差集操作:{0,1,2,3,4,7,8,9}{1,2,3,4,7,8,9}{1,2,4,7,8,9}2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境1.函數(shù)Python中的函數(shù)定義是以def關(guān)鍵詞開頭,后面是函數(shù)名稱和圓括號,圓括號后面要加一個(gè)冒號,表示函數(shù)聲明結(jié)束。圓括號內(nèi)是傳遞的參數(shù)列表。函數(shù)體中的語句以縮進(jìn)格式書寫,函數(shù)是否有返回值是根據(jù)函數(shù)體內(nèi)部是否有return語句決定的,如果有return語句,則表示該函數(shù)有返回值,否則表示沒有返回值。Accuracy:96.66666666666667%defmax_min_value(mylist):#定義函數(shù)

returnmylist.index(max(mylist)),mylist.index(min(mylist))#調(diào)用函數(shù)mylist=[36,16,33,52,68,100,70,85,6,75]max_min=max_min_value(mylist)print('最大值元素下標(biāo)和最小值元素下標(biāo):',max_min)最大值元素下標(biāo)和最小值元素下標(biāo):(5,8)2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境deffind(table,e):foriinrange(len(table)):iftable[i]==e:returnTrue,ielse:returnFalse,Nonemylist=[36,16,33,52,68,100,70,85,6,75]flag,value=find(mylist,85)print(flag,value)程序運(yùn)行結(jié)果如下:True72.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境2.類Python是一門面向?qū)ο蟪绦蛟O(shè)計(jì)語言,在一個(gè)模塊功能較多且考慮到系統(tǒng)的可維護(hù)性和可復(fù)用性,選擇類來管理更為合適。#定義一個(gè)矩形類classRectangle:def__init__(self,width,height):self.width=widthself.height=heightdefarea(self):returnself.width*self.height2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境創(chuàng)建矩形類對象并調(diào)用成員方法area()的方法如下:#創(chuàng)建一個(gè)矩形對象并調(diào)用它的area()方法rectangle=Rectangle(6,9)print("矩形的面積為:",rectangle.area())運(yùn)行程序會(huì)輸出結(jié)果:矩形的面積為:542.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境在矩形類定義的基礎(chǔ)上,還可以對矩形類進(jìn)行繼承,假如定義一個(gè)立方體類,立方體是在矩形類的基礎(chǔ)上,增加一個(gè)高構(gòu)成的,類的定義如下:#定義一個(gè)立方體類,繼承自矩形類classCube(Rectangle):def__init__(self,high):self.high=high#實(shí)現(xiàn)立方體類的volume()方法

defvolume(self,rect):returnself.high*rect.area()2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境這樣就構(gòu)造了一個(gè)簡單的立方體類Cube,其中類名Cube后面括號中的Rectangle就是要繼承的類名,作為當(dāng)前類Cube的父類。#創(chuàng)建一個(gè)立方體對象并調(diào)用它的volume()方法cube=Cube(10)print("立方體的體積為:",cube.volume(rectangle))程序運(yùn)行結(jié)果如下:立方體的體積為:5402.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境同一個(gè)列表可存放不同類型的數(shù)據(jù),而同一個(gè)array數(shù)組中存放的數(shù)據(jù)類型必須全部相同。對于使用列表和array數(shù)組存儲(chǔ)的矩陣,如果想要取出同一列的元素,對于列表,需要使用列表推導(dǎo)式才能完成;對于array,直接使用切片即可。例如:importnumpyasnpa=np.array([[5,6,7],[8,9,10]])print(a[:,0])如果要獲取二維數(shù)組中某一行的均值或某一列的均值,可使用means()函數(shù)實(shí)現(xiàn),其語法格式如下:numpy.mean(a,axis=None,dtype=None,out=None,keepdims=<novalue>)2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境a=np.array([[1,2,3],[4,5,6]])print(a)m=np.mean(a)print(m)m=np.mean(a,axis=0)#axis=0,計(jì)算每一列的平均值print(m)m=np.mean(a,axis=1)#axis=1,計(jì)算每一行的平均值print(m)[[123][456]]3.5[2.53.54.5][2.5.]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境a=np.array([[1,2,3],[4,5,6],[7,8,9]])b=np.mat(a)print(b)print(np.mean(b)) #對所有元素求平均值print(np.mean(b,0)) #對各列求平均值print(np.mean(b,1)) #對各行求平均值

[[123][456][789]]5.0[[4.5.6.]][[2.][5.][8.]]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境#矩陣轉(zhuǎn)換為數(shù)組mat=np.mat([[1,2,3,4]])print(mat,type(mat))mat_arr=mat.Aprint(mat_arr,type(mat_arr))程序運(yùn)行結(jié)果如下:[[1234]]<class'numpy.matrix'>[[1234]]<class'numpy.ndarray'>2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境DataFrame是由多種類型的列構(gòu)成的二維標(biāo)簽數(shù)據(jù)結(jié)構(gòu),類似于Excel、SQL表、Series對象構(gòu)成的字典。DataFrame是最常用的Pandas對象,DataFrame支持ndarray、列表、字典、Series字典、DataFrame等多種數(shù)據(jù)類型的輸入。DataFrame還可為數(shù)據(jù)自動(dòng)增加index(行標(biāo)簽)和columns(列標(biāo)簽)參數(shù),這樣就使生成的DataFrame數(shù)據(jù)包含行和列索引。利用字典生成DataFrame數(shù)據(jù),代碼如下:importpandasaspdstu_dict={'姓名':['張曉','許東燕'],'性別':['男','女'],'分?jǐn)?shù)':[86,95]}print(stu_dict)stu_df=pd.DataFrame(stu_dict)print(stu_df)程序運(yùn)行結(jié)果如下:{'姓名':['張曉','許東燕'],'性別':['男','女'],'分?jǐn)?shù)':[86,95]}

姓名性別分?jǐn)?shù)0張曉男861許東燕女952.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境利用Series字典生成DataFrame數(shù)據(jù),代碼如下:d={'姓名':pd.Series(['吳小倩','劉娜','許友林','李小婷'],index=['A','B','C','D']),'分?jǐn)?shù)':pd.Series([87,90,93],index=['A','B','D'])}df=pd.DataFrame(d)print(df)姓名分?jǐn)?shù)A吳小倩87.0B劉娜90.0C許友林NaND李小婷93.02.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境利用numpy多維數(shù)組生成DataFrame數(shù)據(jù),代碼如下:data=np.zeros((3,),dtype=[('A','i8'),('B','f8'),('C','S8')])df=pd.DataFrame(data)print(df)程序運(yùn)行結(jié)果如下:

ABC000.0b''100.0b''200.0b''2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境創(chuàng)建一個(gè)3行4列的隨機(jī)整數(shù)構(gòu)成的二維數(shù)組,然后將其轉(zhuǎn)換為DataFrame格式,代碼如下:data=np.random.randint(1,50,size=(3,4))df=pd.DataFrame(data,columns=['A','B','C','D'])print(df)輸出結(jié)果如下:

ABCD04613354134107222353342.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境若想要在第3列插入一組元素,則代碼如下:df.insert(2,'E',[10,20,30])#插入一列print(df)輸出結(jié)果如下:

ABECD04613103541341020722235303342.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境假設(shè)data.xlsx文件中有兩個(gè)工作表:Sheet1和Sheet2,其內(nèi)容如圖2-4所示。讀取data.xlsx文件中的數(shù)據(jù)代碼如下:importpandasaspdx=pd.read_excel('data.xlsx')輸出結(jié)果如下:序號姓名性別年齡職業(yè)01劉艷女26會(huì)計(jì)12劉娜女27會(huì)計(jì)23張旭剛男36工程師34吳甜甜女40教師45王剛男32醫(yī)生2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境假設(shè)data.xlsx文件中有兩個(gè)工作表:Sheet1和Sheet2,其內(nèi)容如圖2-4所示。讀取Excel文件時(shí),可以指定要讀取的工作表和列號,代碼如下:x=pd.read_excel(r'data.xlsx',sheet_name=1,usecols="B,E")print(x)輸出結(jié)果如下:姓名職稱0李闖工程師1趙剛高級工程師2王鵬飛教授級高級工程師2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境importpandasaspdimportnumpyasnp#創(chuàng)建寫入器對象writer=pd.ExcelWriter('data.xlsx')start_row=0#指定從第幾行開始寫入data=np.random.randint(1,50,size=(3,4))data=pd.DataFrame(data,columns=['C1','C2','C3','C4'])data.to_excel(writer,sheet_name='Sheet1',startrow=start_row, header=True,index=False)#丟棄DataFrame對象的行標(biāo)簽#保存數(shù)據(jù),關(guān)閉文件writer.save()writer.close()2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境1.散點(diǎn)圖importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-5,5,50,endpoint=True)y=x**2plt.scatter(x,y,s=20,alpha=1,linewidths=0.1)plt.xlabel('X軸')plt.ylabel('Y軸')plt.title('散點(diǎn)圖')plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文字體plt.rcParams['axes.unicode_minus']=False #顯示負(fù)號plt.show()2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境1.散點(diǎn)圖#生成數(shù)據(jù)1,具有兩維特征x_Attr1和x_Attr2num=500#數(shù)量x_Mean1=4x_Var1=0.5x_Attr1=np.zeros((num,1))x_Attr1=x_Mean1+np.sqrt(x_Var1)*np.random.randn(num,1)x_Mean2=2x_Var2=1x_Attr2=np.zeros((num,1))x_Attr2=x_Mean2+np.sqrt(x_Var2)*np.random.randn(num,1)x=np.c_[x_Attr1,x_Attr2]2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境折線圖可以顯示隨時(shí)間而變化的連續(xù)數(shù)據(jù),適用于顯示在相等時(shí)間間隔下數(shù)據(jù)的趨勢。x=[1,2,3,4,5,6,7,8]y=[0.62,0.68,0.76,0.81,0.815,0.814,0.816,0.815]plt.plot(x,y)plt.xlim(0,9)plt.ylim(0.6,0.85)plt.title('折線圖')plt.xlabel('X')plt.ylabel('Y')plt.rcParams['font.sans-serif']=['SimHei']#如果要顯示中文字體,則在此處設(shè)為SimHeiplt.rcParams['axes.unicode_minus']=Falseplt.show()2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境通過直方圖可繪制連續(xù)性的數(shù)據(jù),展示一組或多組數(shù)據(jù)的分布狀況x=np.random.standard_normal(100)bins=20n,bins,patches=plt.hist(x,bins,color='#0a6caa',alpha=0.7,rwidth=0.85)plt.grid(axis='y',alpha=0.75)plt.xlabel('區(qū)間')plt.ylabel('頻率')plt.title('直方圖')maxfreq=n.max()plt.ylim(ymax=np.ceil(maxfreq/10)*10ifmaxfreq%10elsemaxfreq+10)plt.show()2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境餅圖反映某個(gè)部分占整體的比重。labels=['第1季度','第2季度','第2季度','第2季度']#各部分標(biāo)簽percent=[20,45,20,15]#各部分比例color=['red','yellow','green','blue']#各部分顏色plode=[0,0.05,0,0]#各部分突出值plt.pie(percent,explode=plode,colors=color,labels=labels,labeldistance=1.1,autopct="%1.1f%%",shadow=False)plt.axis("equal")#設(shè)置橫軸和縱軸大小相等,這樣餅才是圓的plt.legend()plt.rcParams['font.sans-serif']=['SimHei']#如果要顯示中文字體,則在此處設(shè)為:SimHeiplt.rcParams['axes.unicode_minus']=False#顯示負(fù)號plt.show()2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境scikit-learn,也稱為sklearn,是針對Python編程語言的免費(fèi)軟件機(jī)器學(xué)習(xí)庫,于2007年由Google開發(fā),是目前使用最為廣泛的機(jī)器學(xué)習(xí)庫。2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境scikit-learn庫提供的6個(gè)模塊介紹如下:分類(classification):目前Scikit-learn已包含的算法:支持向量機(jī)(SVM)、最近鄰、邏輯回歸、隨機(jī)森林、決策樹以及多層感知器(MLP)神經(jīng)網(wǎng)絡(luò)等?;貧w(regression):通過分析相關(guān)屬性特征與目標(biāo)之間的關(guān)系,給出一組連續(xù)的預(yù)測值。目前Scikit-learn已包含的算法:支持向量回歸(SVR)、Lasso回歸、貝葉斯回歸、隨機(jī)森林回歸等。聚類(clustering):自動(dòng)識別具有相似屬性的對象,并劃分為一類,屬于無監(jiān)督學(xué)習(xí)范疇,一般可用于輔助決策。目前Scikit-Learn包含的算法:k-均值聚類、譜聚類、均值偏移、層次聚類、DBSCAN聚類等。數(shù)據(jù)降維(dimensionalityreduction):主成分分析(PCA)、非矩陣分解(NMF)、奇異值分解(SVD)等。模型選擇(modelselection):對給定參數(shù)和模型的比較、驗(yàn)證和選擇,調(diào)整模型和參數(shù)以提升精度。目前Scikit-learn包括的算法:網(wǎng)格搜索、交叉驗(yàn)證和各種評估函數(shù)。數(shù)據(jù)預(yù)處理(preprocessing):數(shù)據(jù)的離散化、特征提取、歸一化、二值化。2.1機(jī)器學(xué)習(xí)Python基礎(chǔ)與開發(fā)環(huán)境importseabornassnscolors=sns.color_palette("colorblind")plt.figure()foriinrange(len(y_pred)):ify_pred[i]==0:s1=plt.scatter(X_test[i,1],X_test[i,2],marker='o',color=colors[0])elify_pred[i]==1:s2=plt.scatter(X_test[i,1],X_test[i,2],marker='s',color=colors[1])else:s3=plt.scatter(X_test[i,1],X_test[i,2],marker='*',color=colors[2])plt.xlabel("X")plt.ylabel("Y")plt.title("貝葉斯分類器")plt.rcParams['font.family']=['sans-serif']plt.rcParams['font.sans-serif']=['SimHei']plt.legend((s1,s2,s3),('0','1','2'),loc='best')plt.show()2.2機(jī)器學(xué)習(xí)基礎(chǔ)張量(Tensor)就是多維數(shù)組(MultidimensionalArray),是深度學(xué)習(xí)的基礎(chǔ)。其作用是為了表達(dá)更高維度的矩陣、向量。張量可分為標(biāo)量、向量、矩陣、3D張量及更高維的張量。2.2機(jī)器學(xué)習(xí)基礎(chǔ)importnumpyasnpx=np.array(5)print('x:',x,'x的維度:',x.ndim)x=np.array([1,2,3,4,5,6])print('x:',x,'x的維度:',x.ndim)x=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]])print('x:',x,'x的維度:',x.ndim)x=np.array([[[1,2,3,4,5],[6,7,8,9,10]],[[11,12,13,14,15],[16,17,18,19,20]]])print('x:',x,'x的維度:',x.ndim)x:5x的維度:0x:[123456]x的維度:1x:[[12345][678910][1112131415][1617181920]]x的維度:2x:[[[12345][678910]][[1112131415][1617181920]]]x的維度:32.2機(jī)器學(xué)習(xí)基礎(chǔ)所謂梯度,是一個(gè)矢量,表示某一函數(shù)在該點(diǎn)處的方向?qū)?shù)沿著該方向取得最大值,即函數(shù)在該點(diǎn)處沿著該方向(梯度的方向)變化最快,變化率最大。梯度可以理解為函數(shù)的導(dǎo)數(shù),導(dǎo)數(shù)是增長的方向,所以梯度其實(shí)是增長的方向,那么,梯度的反方向就是下降的方向。2.2機(jī)器學(xué)習(xí)基礎(chǔ)梯度下降可用數(shù)學(xué)公式去表述,如果是凸函數(shù),表示山的形狀,那么梯度下降公式可以表示為這里的表示當(dāng)前的坐標(biāo)位置,是學(xué)習(xí)因子,表示每次向上走一步的步長,x是更新后的坐標(biāo)位置,就是走一步后的位置。2.2機(jī)器學(xué)習(xí)基礎(chǔ)不同的領(lǐng)域有不同的評估方法,這里注意介紹一些常見的機(jī)器學(xué)習(xí)評估方法:召回率(recall/查全率)、精確率(Precission)、F1-score?;煜仃嚕–onfusionMatrix)。對于二分類來說,其混淆矩陣為二行二列的,如表2-1所示。(1)TP,即TruePostive,為真正例,樣本的真實(shí)類別是正例,且模型預(yù)測的結(jié)果也是正例。(2)FP,即FalsePositive,為假正例,樣本的真實(shí)類別是負(fù)例,但模型預(yù)測的結(jié)果為正例。(3)FN,即FalseNegative,為假負(fù)例,樣本的真實(shí)類別是正例,但模型預(yù)測的結(jié)果為負(fù)例。(4)TN,即TrueNegative,為真負(fù)例,樣本的真實(shí)類別是負(fù)例,且模型預(yù)測的結(jié)果也是負(fù)例。2.2機(jī)器學(xué)習(xí)基礎(chǔ)精確率是指分類正確的正樣本占預(yù)測為正的樣本個(gè)數(shù)的比例,在信息檢索領(lǐng)域稱為查準(zhǔn)率。計(jì)算方法為:召回率是指分類正確的正樣本占真正的正樣本個(gè)數(shù)的比例,在信息檢索領(lǐng)域稱為查全率。計(jì)算方法為:準(zhǔn)確率是指分類正確的樣本占總樣本個(gè)數(shù)的比例。計(jì)算方法為:2.2機(jī)器學(xué)習(xí)基礎(chǔ)F1-score是綜合考慮精確率和召回率的一個(gè)評價(jià)指標(biāo)。計(jì)算方法為::可得精確率,召回率,準(zhǔn)確率,。真實(shí)值 預(yù)測值

0 01 95 20 1 22.2機(jī)器學(xué)習(xí)基礎(chǔ)數(shù)據(jù)集是在學(xué)習(xí)機(jī)器學(xué)習(xí)中非常寶貴的資源,沒有數(shù)據(jù),即使設(shè)計(jì)出來的模型再好也無法得到訓(xùn)練和驗(yàn)證。例如,用于圖像處理的mnist手寫數(shù)字、鳶尾花數(shù)據(jù)集,推薦系統(tǒng)中的Douban電影數(shù)據(jù)集、MovieLens數(shù)據(jù)集,trec06c郵件數(shù)據(jù)集、imdb電影評論數(shù)據(jù)集。TREC06是一個(gè)公開的垃圾郵件語料庫。該語料庫由國際文本檢索會(huì)議提供,分為英文數(shù)據(jù)集(trec06p)和中文數(shù)據(jù)集(trec06c)。文件內(nèi)容和標(biāo)簽以目錄形式存放,data文件夾中是郵件內(nèi)容,full文件夾下是郵件分類結(jié)果,即標(biāo)簽。2.2機(jī)器學(xué)習(xí)基礎(chǔ)MNIST數(shù)據(jù)集共有70000張圖像,其中訓(xùn)練集60000張,測試集10000張。所有圖像都是28×28的灰度圖像,每張圖像包含一個(gè)手寫數(shù)字。每張圖像均有標(biāo)注,共10個(gè)類別,每個(gè)類別代表0~9之間的一個(gè)數(shù)字,每張圖像只有一個(gè)類別。2.2機(jī)器學(xué)習(xí)基礎(chǔ)Iris(鳶尾花)數(shù)據(jù)集是常用的分類實(shí)驗(yàn)數(shù)據(jù)集,是機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)中的一個(gè)經(jīng)典數(shù)據(jù)集,數(shù)據(jù)包含每朵鳶尾花花瓣的長度(PetalLength)和寬度(PetalWidth)、花萼的長度(SepalLength)和寬度(SepalWidth)四個(gè)屬性,以及每朵花對應(yīng)的種類(target),還有對數(shù)據(jù)的一些說明(DESCR)、種類名(target_names)、特征名(feature_names)。2.2機(jī)器學(xué)習(xí)基礎(chǔ)MovieLens數(shù)據(jù)集是推薦系統(tǒng)領(lǐng)域最經(jīng)典的數(shù)據(jù)集之一。MovieLens數(shù)據(jù)集合包含了多個(gè)電影評分?jǐn)?shù)據(jù)集:MovieLens1M、MovieLens100K、MovieLens25M、MovieLens20M、MovieLens10M、MovieLens1B。每個(gè)數(shù)據(jù)集的格式、大小、用途均有所差異。MovieLens1M數(shù)據(jù)集包含4個(gè)文件:movies.dat、ratings.dat、user.dat、README。ratings是6040位用戶對3900部電影的評分?jǐn)?shù)據(jù),包含UserID、MovieID、Rating、Timestamp(時(shí)間戳),users.dat文件存放的是用戶的相關(guān)信息,包括性別、年齡、職業(yè),movies包含了電影id、電影標(biāo)題、電影類型。2.3本章小結(jié)本章主要介紹了Python語言基礎(chǔ)、開發(fā)環(huán)境及機(jī)器學(xué)習(xí)基礎(chǔ)知識,包括Numpy、Pandas、scikit-learn庫、數(shù)據(jù)可視化、張量、梯度下降、評估方法及常用數(shù)據(jù)集。在學(xué)習(xí)機(jī)器學(xué)習(xí)的過程中,經(jīng)常需要調(diào)用一些庫中的函數(shù),如Numpy、Pandas、scikit-learn,通過使用這些庫,可極大提高開發(fā)效率。數(shù)據(jù)可視化也是常用的工具,方便觀察數(shù)據(jù)的特征和分布情況。張量是深度學(xué)習(xí)經(jīng)常用的數(shù)據(jù)類型,梯度下降是傳統(tǒng)的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法優(yōu)化的常用方法。第3章樸素貝葉斯分類器目錄CONTENTS3.1貝葉斯分類器理論基礎(chǔ)3.2樸素貝葉斯分類器原理與設(shè)計(jì)3.3樸素貝葉斯分類器算法實(shí)現(xiàn)3.4正態(tài)貝葉斯分類器3.5貝葉斯網(wǎng)絡(luò)3.6本章小結(jié)3.1貝葉斯分類器理論基礎(chǔ)學(xué)習(xí)基礎(chǔ)學(xué)習(xí)認(rèn)知能力信息素養(yǎng)高先驗(yàn)概率(PriorProbability):在沒有訓(xùn)練樣本數(shù)據(jù)前,根據(jù)以往經(jīng)驗(yàn)和分析得到的概率,初始時(shí)假設(shè)樣本h的初始概率,用P(h)表示。后驗(yàn)概率(PosteriorProbability):當(dāng)下事件由因及果發(fā)生的概率,求導(dǎo)致該事件發(fā)生的原因是由某個(gè)因素引起的可能性的大小。由樣本屬性x導(dǎo)致分類為c的概率P(c|x)就稱為后驗(yàn)概率。后驗(yàn)概率(PosteriorProbability):后驗(yàn)概率也是一種條件概率,它是根據(jù)事件結(jié)果求事件發(fā)生原因的概率。例如,上課又遲到了,這是事件的結(jié)果,而造成這個(gè)結(jié)果的原因可能是早上起床晚了,或感冒發(fā)燒需要先去看病,P(起床晚了|上課遲到)和P(感冒發(fā)燒|上課遲到)就是后驗(yàn)概率。0102033.1貝葉斯分類器理論基礎(chǔ)學(xué)習(xí)基礎(chǔ)信息素養(yǎng)高類條件概率(ClassConditionalProbability):當(dāng)下事件由果及因發(fā)生的概率。樣本x相對于類標(biāo)簽c的概率,也稱為似然,記作P(x|c)。注意區(qū)分幾個(gè)概念:(1)先驗(yàn)概率是不依賴觀測數(shù)據(jù)的概率分布,在樸素貝葉斯中,類別的概率就是先驗(yàn)概率,記為p(c)。(2)事情已經(jīng)發(fā)生,計(jì)算這件事情發(fā)生的原因是由某個(gè)因素引起的可能性的大小,是后驗(yàn)概率。后驗(yàn)概率的計(jì)算要以先驗(yàn)概率為基礎(chǔ)。(3)“似然”描述的是在給定了特定觀測值的條件下,模型參數(shù)的合理性。通常用于建模過程中,選取合適的參數(shù)使模型更好地?cái)M合數(shù)據(jù)。043.1貝葉斯分類器理論基礎(chǔ)如果A和B是樣本空間Ω的兩個(gè)事件,在給定A條件下B的概率為:推廣到一般形式,設(shè)A是樣本空間Ω上的事件,B是樣本空間Ω上的一個(gè)劃分,3.1貝葉斯分類器理論基礎(chǔ)【例3-1】某地區(qū)Y病毒的感染率為0.05,在實(shí)際檢查過程中,可能會(huì)由于技術(shù)及操作等原因使病毒攜帶者未必能檢查出陽性反應(yīng),同樣不帶病毒也可能會(huì)檢查出陽性。假設(shè)P(陽性|攜帶病毒)=0.98,P(陽性|不攜帶病毒)=0.04,假設(shè)某人檢查出陽性,他帶病毒的概率是多少?由于P(陽性|攜帶病毒)=0.98,P(陽性|不攜帶病毒)=0.04,則P(陰性|攜帶病毒)=0.02,P(陰性|不攜帶病毒)=0.96。根據(jù)貝葉斯公式和全概率公式,有3.1貝葉斯分類器理論基礎(chǔ)3.1貝葉斯決策理論基礎(chǔ)

極大似然估計(jì)為了估計(jì)類條件概率,可以先假設(shè)其服從某種確定的概率分布,再利用訓(xùn)練樣本對概率分布的參數(shù)進(jìn)行估計(jì)。這就是極大似然估計(jì)(MaximumLikelihoodEstimation,MLE)的算法思想,極大似然估計(jì)提供了一種給定觀察數(shù)據(jù)來評估模型參數(shù)的方法,即:模型已定,參數(shù)未知。通過若干次實(shí)驗(yàn),觀察其結(jié)果,利用實(shí)驗(yàn)結(jié)果得到某個(gè)參數(shù)值能夠使樣本出現(xiàn)的概率為最大,則稱為極大似然估計(jì)。假設(shè)Tc表示訓(xùn)練集T中第c類樣本集合,且這些樣本是獨(dú)立同分布的,則參數(shù)對于數(shù)據(jù)集Tc的似然為:3.1貝葉斯決策理論基礎(chǔ)找出參數(shù)空間中能使取最大參數(shù)值的,其實(shí)就是求解:假設(shè)樣本服從均值為、方差為的正態(tài)分布,對其求對數(shù):3.1貝葉斯決策理論基礎(chǔ)求最大似然估計(jì)量的一般步驟如下:(1)寫出似然函數(shù)(2)對似然函數(shù)取對數(shù),并整理(3)對的相應(yīng)參數(shù)求偏導(dǎo)(4)解似然方程,得到參數(shù)的值。3.1貝葉斯定理相關(guān)概念一個(gè)單變量正態(tài)分布密度函數(shù)為:其正態(tài)分布的概率密度函數(shù)如圖所示。與μ越近的值,其概率越大,反之,其概率值越小。σ描述數(shù)據(jù)分布的離散程度,σ越大,數(shù)據(jù)分布越分散,曲線越扁平;σ越小,數(shù)據(jù)分布越集中,曲線越瘦高。3.1貝葉斯決策理論基礎(chǔ)對于多變量的正態(tài)分布,假設(shè)特征向量是服從均值向量為、協(xié)方差矩陣為的n維正態(tài)分布,其中,類條件概率密度函數(shù)為:3.2樸素貝葉斯分類器原理與設(shè)計(jì)西瓜數(shù)據(jù)集如表3-1所示。3.2樸素貝葉斯分類器原理與設(shè)計(jì)假設(shè)我們要判斷第3條西瓜數(shù)據(jù)是否為好瓜,即:根據(jù)表3-1的西瓜數(shù)據(jù)集,有好瓜和壞瓜的先驗(yàn)概率:假設(shè)各特征是相互獨(dú)立的,則有3.2樸素貝葉斯分類器原理與設(shè)計(jì)dataTrain=np.array(dataTrain)y=dataTrain[:,-1]good=np.sum(y=='好瓜') #好瓜的數(shù)量bad=np.sum(y=='壞瓜') #壞瓜的數(shù)量#好瓜和壞瓜的先驗(yàn)概率prior_good=good/len(y)prior_bad=bad/len(y)3.2樸素貝葉斯分類器原理與設(shè)計(jì)3.2樸素貝葉斯分類器原理與設(shè)計(jì)顏色概率0.3750.333敲聲概率0.750.444紋路概率0.8750.222顏色概率0.50.222敲聲概率0.250.333紋路概率0.8750.222顏色概率0.50.222敲聲概率0.750.444紋路概率0.8750.222準(zhǔn)確率88.24%3.2樸素貝葉斯分類器原理與設(shè)計(jì)為了解決零概率的問題,法國數(shù)學(xué)家拉普拉斯最早提出用加1的方法估計(jì)沒有出現(xiàn)過的現(xiàn)象的概率,因此這種平滑(Smoothing)方法也稱為拉普拉斯平滑(LaplacianSmoothing)。引入拉普拉斯平滑技術(shù)后,修正后的類先驗(yàn)概率和類條件概率可表示為:樸素貝葉斯分類器的優(yōu)點(diǎn):(1)對小規(guī)模數(shù)據(jù)表現(xiàn)很好,能處理多分類任務(wù);(2)算法比較簡單,常用于文本分類;(3)有穩(wěn)定的分類效率,對缺失數(shù)據(jù)不太敏感;(4)適合增量式訓(xùn)練,當(dāng)數(shù)據(jù)量超出內(nèi)存時(shí),可一批一批讀取數(shù)據(jù)進(jìn)行增量訓(xùn)練。3.3樸素貝葉斯分類器算法實(shí)現(xiàn)從fish.xlsx文件中讀取鱸魚和三文魚的長度、亮度數(shù)據(jù),其中,前n/2條數(shù)據(jù)為鱸魚,后n/2為三文魚,分別從鱸魚和三文魚數(shù)據(jù)中隨機(jī)取出50%作為訓(xùn)練集,其余的50%作為測試集。13.3樸素貝葉斯分類器算法實(shí)現(xiàn)2生成三文魚和鱸魚的概率密度。根據(jù)生成長度和亮度數(shù)據(jù),利用均值和方差公式直接計(jì)算長度和亮度特征的均值和方差。3.3樸素貝葉斯分類器算法實(shí)現(xiàn)3計(jì)算三文魚和鱸魚的后驗(yàn)概率。根據(jù)得到三文魚和鱸魚的長度、亮度特征類條件概率,利用樸素貝葉斯公式計(jì)算出它們的后驗(yàn)概率。3.3樸素貝葉斯分類器算法實(shí)現(xiàn)計(jì)算分類正確率。#假設(shè)長度和亮度是互相完全獨(dú)立的,根據(jù)樸素貝葉斯公式和聯(lián)合概率密度公式計(jì)算出鱸魚和三文魚的類條件概率,計(jì)算分類的正確率和錯(cuò)誤率count1=0count2=0foriinrange(n//4):#長度特征post_length_pred1=stats.norm(perch_Mean_Length,perch_Variance_Length).pdf(perch_test[i,0])#將鱸魚分為鱸魚post_length_pred2=stats.norm(salmon_Mean_Length,salmon_Variance_Length).pdf(perch_test[i,0])#將鱸魚分為三文魚

precision_salmon:1.0precision_perch:0.834precision_bayes:0.91743.4正態(tài)貝葉斯分類器假設(shè)樣本的特征向量服從正態(tài)分布,則這樣的貝葉斯分類器就稱為正態(tài)貝葉斯分類器或高斯貝葉斯分類器。更一般地,樣本的特征并不是相互獨(dú)立的。根據(jù)分類判決規(guī)則,在預(yù)測時(shí)需要尋找具有最大條件概率值的那個(gè)類,即最大化后驗(yàn)概率,等價(jià)于求每個(gè)類中最大的那個(gè)。對取對數(shù),公式為:3.5貝葉斯網(wǎng)絡(luò)貝葉斯網(wǎng)絡(luò)(BayesianNetwork),又稱信念網(wǎng)絡(luò)(BeliefNetwork),是一種概率圖模型(ProbabilisticGraphicalModel,PGD),它是一種模擬人類推理過程中因果關(guān)系的不確定性處理模型,可通過有向無環(huán)圖(DirectedAcyclicGraph,DAG)來表示。3.5貝葉斯網(wǎng)絡(luò)假設(shè):隨機(jī)變量w(weather):天氣隨機(jī)變量m(mood):心情隨機(jī)變量p(play):打羽毛球隨機(jī)變量r(restaurant):下餐館吃飯隨機(jī)變量f(film):看電影變量S對變量L和變量E有因果影響,而變量C對變量E也有因果影響。3.5貝葉斯網(wǎng)絡(luò)

#驗(yàn)證模型:檢查網(wǎng)絡(luò)結(jié)構(gòu)和CPD,并驗(yàn)證CPD是否正確定義和總和為1model.check_model()#獲取結(jié)點(diǎn)“w(天氣情況)”的概率表:

print(model.get_cpds("w"))#獲取整個(gè)貝葉斯網(wǎng)絡(luò)的局部依賴:print(model.local_independencies(['p','r','f']))#推測“f(是否看電影)”的節(jié)點(diǎn)概率,在pgmpy中我們只需要省略額外參數(shù)即可計(jì)算出條件分布概率

infer=VariableElimination(model)print(infer.query(['f'],evidence={'p':1,'p':0}))#變量消除法是精確推斷的一種方法

asia_infer=VariableElimination(model)q=asia_infer.query(variables=['r'],evidence={'p':0})print(q)q=asia_infer.query(variables=['r'],evidence={'m':0})print(q)3.6本章小結(jié)貝葉斯分類是以貝葉斯定理為基礎(chǔ)的分類方法。樸素貝葉斯分類是貝葉斯分類中最簡單、最常見的一種分類方法,它假設(shè)樣本特征之間是相互獨(dú)立的。理論上,樸素貝葉斯分類與其他分類方法相比具有最小的誤差率,但在實(shí)際應(yīng)用中樣本特征個(gè)數(shù)比較多或者特征之間相關(guān)性較大時(shí),分類效果表現(xiàn)不好。為了避免零概率情況,在構(gòu)造樸素貝葉斯分類器時(shí),還需要利用數(shù)據(jù)平滑方法進(jìn)行處理。第4章k近鄰算法與非參數(shù)估計(jì)目錄CONTENTS4.1k近鄰算法原理4.2k近鄰算法的應(yīng)用4.3非參數(shù)估計(jì)4.5本章小結(jié)4.4非參數(shù)估計(jì)算法的實(shí)現(xiàn)4.1k近鄰算法原理學(xué)習(xí)基礎(chǔ)學(xué)習(xí)認(rèn)知能力信息素養(yǎng)高假設(shè)X_test為待標(biāo)記的樣本,X_train為已標(biāo)記的數(shù)據(jù)集,算法原理描述如下:(2)對數(shù)組D[]進(jìn)行排序,取距離最近的k個(gè)點(diǎn),記為X_knn。在X_knn中統(tǒng)計(jì)每個(gè)類別的個(gè)數(shù),即class0在X_knn中有幾個(gè)樣本,class1在X_knn中有幾個(gè)樣本等。010203(1)遍歷X_train中的所有樣本,計(jì)算每個(gè)樣本與X_test的距離,并把距離保存在數(shù)組D[]中。待標(biāo)記樣本的類別,就是在X_knn中樣本個(gè)數(shù)最多的那個(gè)類別。4.2k近鄰算法應(yīng)用學(xué)習(xí)基礎(chǔ)學(xué)習(xí)認(rèn)知能力信息素養(yǎng)高Iris鳶尾花數(shù)據(jù)集(iris_training.csv)的數(shù)據(jù)可分為3類(iris-setosa,iris-versicolour,iris-virginica),共150條記錄,每類各50個(gè)數(shù)據(jù),每條記錄有4個(gè)屬性:花萼長度(SepalLength)、花萼寬度(SepalWidth)、花瓣長度(PetalLength)、花瓣寬度(PetalWidth),可以通過這4個(gè)特征預(yù)測鳶尾花屬于哪一類。column_names=['SepalLength','SepalWidth','PetalLength','PetalWidth','Species']iris_data=pd.read_csv("iris_training.csv",header=0,names=column_names)print(df_iris.head())4.2k近鄰算法應(yīng)用學(xué)習(xí)基礎(chǔ)學(xué)習(xí)認(rèn)知能力信息素養(yǎng)高Iris鳶尾花數(shù)據(jù)集(iris_training.csv)的數(shù)據(jù)可分為3類(iris-setosa,iris-versicolour,iris-virginica),共150條記錄,每類各50個(gè)數(shù)據(jù),每條記錄有4個(gè)屬性:花萼長度(SepalLength)、花萼寬度(SepalWidth)、花瓣長度(PetalLength)、花瓣寬度(PetalWidth),可以通過這4個(gè)特征預(yù)測鳶尾花屬于哪一類。4.2k近鄰算法應(yīng)用學(xué)習(xí)基礎(chǔ)學(xué)習(xí)認(rèn)知能力信息素養(yǎng)高Iris鳶尾花數(shù)據(jù)集(iris_training.csv)的預(yù)測類別:[1.0,2.0,0.0,1.0,1.0,1.0,0.0,2.0,1.0,2.0,2.0,0.0,2.0,1.0,1.0,0.0,1.0,0.0,0.0,2.0,0.0,1.0,2.0,2.0,1.0,1.0,0.0,1.0,2.0,1.0]Accuracy:96.66666666666667%4.3非參數(shù)估計(jì)4.3.1非參數(shù)估計(jì)與參數(shù)估計(jì)1.直方圖估計(jì)法對于隨機(jī)變量X的一組抽樣,即使X的值是連續(xù)的,我們也可以劃分出若干寬度相同的區(qū)間,統(tǒng)計(jì)這組樣本在各個(gè)區(qū)間的頻率,并畫出直方圖。4.3非參數(shù)估計(jì)4.3.1非參數(shù)估計(jì)與參數(shù)估計(jì)2.Parzen矩形窗估計(jì)Parzen矩形窗是以目標(biāo)樣本x作為中心點(diǎn),根據(jù)窗口大小h,判斷樣本落入以x為中心的窗口內(nèi)的樣本數(shù),從而得到x的概率。Parzen矩形窗估計(jì)與直方圖估計(jì)的區(qū)別:Parzen矩形窗是根據(jù)目標(biāo)樣本點(diǎn)x確定矩形窗,直方圖估計(jì)是先確定矩形窗,然后根據(jù)樣本點(diǎn)找相應(yīng)的矩形窗。4.3非參數(shù)估計(jì)4.3.1非參數(shù)估計(jì)與參數(shù)估計(jì)3.Parzen正態(tài)核窗估計(jì)當(dāng)滿足以下條件時(shí),一維情況:4.3非參數(shù)估計(jì)4.3.2非參數(shù)估計(jì)的一般推導(dǎo)假設(shè)p(x’)是x’的密度函數(shù),向量x落在區(qū)域R的概率為:N個(gè)向量中k個(gè)向量落在R內(nèi)的概率為:k/N的均值和方差分別為:當(dāng)N→∞時(shí),頻率與概率的取值趨于相等,有:4.4基于k近鄰算法的實(shí)現(xiàn)下面我們對給定的魚類數(shù)據(jù),分別利用直方圖估計(jì)、Parzen矩形窗估計(jì)和Parzen正態(tài)核估計(jì)實(shí)現(xiàn)kNN分類。給定的魚類數(shù)據(jù)存放在文件fish.xls中,包含一維數(shù)據(jù)和二維數(shù)據(jù)兩種類型,各2000條,一維數(shù)據(jù)的前6條如下:4.4基于k近鄰算法的實(shí)現(xiàn)1利用直方圖估計(jì)概率密度、分類數(shù)據(jù)預(yù)處理importxlrdfromoperatorimportitemgetterimportmatplotlib.pyplotaspltimportnumpyasnpreadbook=xlrd.open_workbook(r'Fish.xls')sheet=readbook.sheet_by_index(1)#索引的方式,從0開始sheet=readbook.sheet_by_name('long')#以名字的方式讀取工作表nrows=sheet.nrows#行ncols=sheet.ncols#列fish=[]4.2基于k近鄰算法的實(shí)現(xiàn)1利用直方圖估計(jì)概率密度、分類數(shù)據(jù)預(yù)處理

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論