機(jī)器學(xué)習(xí)從入門到精通PPT完整全套教學(xué)課件_第1頁
機(jī)器學(xué)習(xí)從入門到精通PPT完整全套教學(xué)課件_第2頁
機(jī)器學(xué)習(xí)從入門到精通PPT完整全套教學(xué)課件_第3頁
機(jī)器學(xué)習(xí)從入門到精通PPT完整全套教學(xué)課件_第4頁
機(jī)器學(xué)習(xí)從入門到精通PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩182頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

機(jī)器學(xué)習(xí)從入門到精通第1章機(jī)器學(xué)習(xí)概述第2章Tensorflow基礎(chǔ)第3章數(shù)據(jù)分析的基礎(chǔ)第4章模型的評價與評估第5章數(shù)據(jù)準(zhǔn)備第6章回歸第7章分類第8章聚類第9章支持向量機(jī)第10章神經(jīng)網(wǎng)絡(luò)第11章卷積神經(jīng)網(wǎng)絡(luò)

第1章機(jī)器學(xué)習(xí)概述1.1人工智能1.2機(jī)器學(xué)習(xí)1.3機(jī)器學(xué)習(xí)流程1.4發(fā)展歷程1.5應(yīng)用現(xiàn)狀1.1人工智能早在上世紀(jì)50年代,計算機(jī)科學(xué)家們就提出了“人工智能”的概念現(xiàn)在,人工智能已經(jīng)發(fā)展為一門廣泛的交叉和前沿科學(xué),涉及到計算機(jī)科學(xué)、心理學(xué)、哲學(xué)和語言學(xué)等學(xué)科,也廣泛的應(yīng)用到語音識別、圖像識別、自然語言處理等領(lǐng)域。國際、國內(nèi)各大公司都有自己的人工智能項目1.2機(jī)器學(xué)習(xí)1.2.1機(jī)器學(xué)習(xí)的發(fā)展1.2.2機(jī)器學(xué)習(xí)分類1.2.3機(jī)器學(xué)習(xí)經(jīng)典算法1.2.4機(jī)器學(xué)習(xí)的入門1.2.1機(jī)器學(xué)習(xí)的發(fā)展在機(jī)器學(xué)習(xí)領(lǐng)域,計算機(jī)科學(xué)家不斷探索,基于不同的理論創(chuàng)造出不同的機(jī)器學(xué)習(xí)模型。從發(fā)展歷程來說,大致已經(jīng)經(jīng)歷了三個階段:符號主義時代、概率論時代以及聯(lián)結(jié)主義時代符號主義時代,即1980年代。是使用符號、規(guī)則和邏輯來表征知識和進(jìn)行邏輯推理的概率論時代,1990年代到2000年。以概率論為主要理論依據(jù),通過獲取發(fā)生的可能性來進(jìn)行概率推理聯(lián)結(jié)時代,2010年代早期到中期。以神經(jīng)科學(xué)和概率為主要理論依據(jù),使用云計算架構(gòu),通過使用概率矩陣和加權(quán)神經(jīng)元來動態(tài)地識別和歸納模式,常用的算法是神經(jīng)網(wǎng)絡(luò)1.2.2機(jī)器學(xué)習(xí)分類1.有監(jiān)督學(xué)習(xí)有監(jiān)督學(xué)習(xí)(SupervisedLearning)就是在樣本數(shù)據(jù)集中的數(shù)據(jù),包括了樣本數(shù)據(jù)以及樣本數(shù)據(jù)的標(biāo)簽。2.無監(jiān)督學(xué)習(xí)無監(jiān)督學(xué)習(xí)(UnsupervisedLearning)就是在樣本數(shù)據(jù)中只有數(shù)據(jù)沒有對數(shù)據(jù)進(jìn)行標(biāo)簽。無監(jiān)督學(xué)習(xí)的就是讓計算機(jī)對這些原始數(shù)據(jù)數(shù)據(jù)進(jìn)行分析,讓計算機(jī)自己去學(xué)習(xí)、找到數(shù)據(jù)之間的某種關(guān)系。3.半監(jiān)督學(xué)習(xí)半監(jiān)督學(xué)習(xí)輸入的數(shù)據(jù)樣本中,存在一部分進(jìn)行了標(biāo)記的數(shù)據(jù),但是大量存在的是沒有進(jìn)行標(biāo)記的數(shù)據(jù)。1.2.3機(jī)器學(xué)習(xí)經(jīng)典算法1.2.4機(jī)器學(xué)習(xí)的入門對一個領(lǐng)域進(jìn)行學(xué)習(xí)的第一步就是盡快的了解全貌搭建出整體的知識體系,然后在實踐中不斷提升對該領(lǐng)域的認(rèn)識。1.?dāng)?shù)學(xué)知識2.編程語言3.經(jīng)典機(jī)器學(xué)習(xí)理論和基本算法4.動手實踐機(jī)器學(xué)習(xí)1.3機(jī)器學(xué)習(xí)的工作流程1.3.1準(zhǔn)備數(shù)據(jù)集1.3.2進(jìn)行模型訓(xùn)練1.3.3模型評估1.3.1準(zhǔn)備數(shù)據(jù)集1、數(shù)據(jù)集數(shù)據(jù)集,又稱為資料集、數(shù)據(jù)集合或資料集合,是一種由數(shù)據(jù)所組成的集合。Dataset(或dataset)是一個數(shù)據(jù)的集合,通常以表格形式出現(xiàn)。每一列代表一個特定變量。每一行都對應(yīng)于某一成員的數(shù)據(jù)集的問題。它列出的價值觀為每一個變量,如身高和體重的一個物體或價值的隨機(jī)數(shù)。1.3.1準(zhǔn)備數(shù)據(jù)集2、怎樣定義“好”的數(shù)據(jù)集要準(zhǔn)備的數(shù)據(jù)集不能夠顯的太過于混亂。減少缺失內(nèi)容的數(shù)據(jù)出現(xiàn),以及邏輯相關(guān)度不高的數(shù)據(jù)出現(xiàn)。數(shù)據(jù)集最好不要有太多列。找出相關(guān)系數(shù)比較高的列,減少冗余列的出現(xiàn)。數(shù)據(jù)集越“干凈”越好。這里的“干凈”則是指清除一些重復(fù)的數(shù)據(jù)、缺失的數(shù)據(jù)、異常的數(shù)據(jù)。1.3.1準(zhǔn)備數(shù)據(jù)集3、要怎么“準(zhǔn)備”數(shù)據(jù)集當(dāng)把“好的”數(shù)據(jù)集準(zhǔn)備完成后,需要把整個數(shù)據(jù)集分為訓(xùn)練集和測試集,如下圖1-2所示。1.3.2進(jìn)行模型訓(xùn)練1、有監(jiān)督式的學(xué)習(xí)是指訓(xùn)練的數(shù)據(jù)是有標(biāo)簽的數(shù)據(jù),判斷出來的輸出也是有預(yù)計的輸出1.3.2進(jìn)行模型訓(xùn)練2、無監(jiān)督式的學(xué)習(xí)無監(jiān)督式學(xué)習(xí)(UnsupervisedLearning),和有監(jiān)督式學(xué)習(xí)非常相似,但是不同的是,有監(jiān)督式學(xué)習(xí)訓(xùn)練的數(shù)據(jù)集是含有標(biāo)簽的,而無監(jiān)督式學(xué)習(xí)的數(shù)據(jù)集是沒有標(biāo)簽的。1.3.2進(jìn)行模型訓(xùn)練3、半監(jiān)督式的學(xué)習(xí)介于監(jiān)督式學(xué)習(xí)與無監(jiān)督式學(xué)習(xí)之間的一種機(jī)器學(xué)習(xí)的方式,稱之為半監(jiān)督式學(xué)習(xí)。在半監(jiān)督式的學(xué)習(xí)中,主要考慮的是如何利用少量的標(biāo)注樣本和大量的未標(biāo)注樣本進(jìn)行訓(xùn)練和分類的問題。這些算法首先試圖對未標(biāo)識數(shù)據(jù)進(jìn)行建模,在此模型的基礎(chǔ)上再對標(biāo)識的數(shù)據(jù)進(jìn)行預(yù)測。常見的應(yīng)用場景包括少標(biāo)簽數(shù)據(jù)系統(tǒng)的分析、分類及預(yù)測。1.3.2進(jìn)行模型訓(xùn)練4、強(qiáng)化學(xué)習(xí)強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個單獨的分類,它是通過觀察來完成學(xué)習(xí)動作,每個動作都會對環(huán)境有所影響,學(xué)習(xí)對象根據(jù)觀察到的周圍環(huán)境的反饋來做出判斷。在強(qiáng)化學(xué)習(xí)下,輸入數(shù)據(jù)直接反饋到模型,模型必須對此立刻做出調(diào)整。常見的應(yīng)用場景包括動態(tài)系統(tǒng)以及機(jī)器人控制等。1.3.3模型評估1、模型的訓(xùn)練過程評估在模型的訓(xùn)練過程中,首先要防止的是出現(xiàn)過擬合和欠擬合的現(xiàn)象。擬合就是把平面上一系列的點,用一條光滑的曲線連接起來。而這條光滑的曲線就應(yīng)該是之前訓(xùn)練出來的模型曲線。如下圖1-5所示,下圖中中間圖形是理想的算法模型,左邊展示的則是欠擬合的模型,模型并沒有將每個數(shù)據(jù)都覆蓋完全,最右邊的圖像則是過擬合模型,模型擬合過程中參數(shù)設(shè)置太為細(xì)化導(dǎo)致預(yù)測曲線發(fā)生變化。1.3.3模型評估2、模型的訓(xùn)練結(jié)果評價當(dāng)訓(xùn)練完模型后,就要評價模型的好壞程度。通常會通過模型的靈敏度、準(zhǔn)確度等其它方面綜合考慮,當(dāng)然不同類型模型的評價方式是不同的,在本書的第3章中會有更加詳細(xì)的介紹。1.4發(fā)展歷程機(jī)器學(xué)習(xí)是人工智能應(yīng)用研究比較重要的分支,它的發(fā)展依賴于早期數(shù)學(xué)貝葉斯定理,尋求根據(jù)以前的信息尋找最可能發(fā)生的事件。它的發(fā)展過程大體上可以分為4個階段。第一個階段大約是在50年代中期到60年代中期,屬于熱烈時期。第二個階段是在60年代中期到70年代中期,隨著人們對機(jī)器學(xué)習(xí)的期望越來越大,但機(jī)器學(xué)習(xí)又因為缺少大量的數(shù)據(jù),計算能力受限,而并沒有產(chǎn)生較大的作為。第三個階段也是第二次的發(fā)展期,從70年代中期到80年代中期,稱為復(fù)興時期;當(dāng)時專家系統(tǒng)的出現(xiàn)。第四個階段低迷期,經(jīng)過一些挫折后,1981年的多層感知(MLP)神經(jīng)網(wǎng)絡(luò)的提出1.5應(yīng)用現(xiàn)狀第2章Tensorflow2.1認(rèn)識Tensorflow2.2TensorFlow的安裝與工作原理2.3常量、變量和占位符2.4操作矩陣2.5使用激活函數(shù)2.6讀取數(shù)據(jù)源2.1認(rèn)識TensorFlow2.1.1系統(tǒng)框架Tensorflow系統(tǒng)框架分為三層,由上而下依次是應(yīng)用層、接口層和Tensorflow核心層2.1.2系統(tǒng)的特性六大特性:深度靈活性(DeepFlexibility)真正的可移植性(TruePortability)連接研究與產(chǎn)品(ConnectResearchandProduction)自動微分(Auto-Differentiation)多語言選擇(LanguageOptions)最大化性能(MaximizePerformance)2.2Tensorflow的安裝與工作原理2.2.1系統(tǒng)框架Tensorflow代碼在GitHub上進(jìn)行了開源以1.6版本為例,看看Tensorflow的代碼結(jié)構(gòu)——tensorflow #主目錄,核心文件夾——third_party #第三方庫,主要包括了eigen3、gpus、hadoop、jpeg等——tools #工具,最新增加功能——util/python ——ACKNOWLEDGMENTS #版權(quán)說明——ADOPTERS.md #使用Tensorflow的人員或組織列表——AUTHORS #Tensorflow作者的官方列表——BUILD——CODEOWNERS #代碼貢獻(xiàn)者——CODE_OF_CONDUCT.md #行為準(zhǔn)則——CONTRIBUTING.md #貢獻(xiàn)指南——ISSUE_TEMPLATE.md #ISSUE模板——LICENSE #版權(quán)許可——README.md——RELEASE.md #版本更新說明——WORKSPACE ——arm_compiler.BUILD

——configure ——configure.py

——models.BUILD

2.2.2工作原理設(shè)計理念是以數(shù)據(jù)流為核心,當(dāng)構(gòu)建了相應(yīng)的機(jī)器學(xué)習(xí)模型后,使用訓(xùn)練數(shù)據(jù)在模型中進(jìn)行數(shù)據(jù)流動,同時將結(jié)果以反向傳播的方式反饋給模型中的參數(shù)進(jìn)行調(diào)整,使用調(diào)整后的參數(shù)對訓(xùn)練數(shù)據(jù)再次進(jìn)行迭代計算計算圖會話張量2.2.3編程特點Tensorflow除了以數(shù)據(jù)流為核心外,在編程實現(xiàn)過程中它還具備兩大特點:

1、將圖的定義和圖的運行完全分開2、圖的計算在會話(Session)中執(zhí)行2.3常量、變量和占位符2.3.1基本概念TensorTensorflow張量,是Tensorflow中最基礎(chǔ)的概念,也是最主要的數(shù)據(jù)結(jié)構(gòu)VariableTensorflow變量,一般用來表示圖中的各計算參數(shù),包括矩陣,向量等,它在計算圖中有固定的位置。placeholderTensorflow占位符,用于表示輸入輸出數(shù)據(jù)的格式,允許傳入指定類型和形狀的數(shù)據(jù)。2.3.1Tensorflow基礎(chǔ)概念(續(xù))SessionTensorflow會話,在Tensorflow中是計算圖的具體執(zhí)行者,與圖進(jìn)行實際的交互。OperationTensorflow操作,是TensorFlow圖中的節(jié)點,它的輸入和輸出都是Tensor。它是作用都是完成各種操作,包括算數(shù)操作、矩陣操作、神經(jīng)網(wǎng)絡(luò)構(gòu)建操作等。QueueTensorflow隊列,也是圖中的一個節(jié)點,是一種有狀態(tài)的節(jié)點。2.3.1Tensorflow基礎(chǔ)概念(續(xù))QueueRunnerQueueRunner即隊列管理器。通常會使用多個線程來讀取數(shù)據(jù),然后使用一個線程來使用數(shù)據(jù)。使用隊列管理器來管理這些讀寫隊列的線程的。Coordinator使用QueueRunner時,由于入隊和出隊由各自線程完成,且未進(jìn)行同步通訊,導(dǎo)致程序無法正常結(jié)束的情況。為了實現(xiàn)線程間的同步,使用Coordinator來處理。2.3.2基本操作操作組操作MathsAdd,Sub,Mul,Div,Exp,Log,Greater,Less,EqualArrayConcat,Slice,Split,Constant,Rank,Shape,ShuffleMatrixMatMul,MatrixInverse,MatrixDeterminantNeuronalNetworkSoftMax,Sigmoid,ReLU,Convolution2D,MaxPoolCheckpointingSave,RestoreQueuesandsyncronizationsEnqueue,Dequeue,MutexAcquire,MutexReleaseFlowcontrolMerge,Switch,Enter,Leave,NextIteration2.4操作矩陣2.4.1矩陣的創(chuàng)建案例:importnumpyasnpx=np.array([[1,4,3],#將list轉(zhuǎn)換為array[1,6,3],[1,2,3]])x1=tf.constant(value=x,dtype=tf.float32,shape=[3,3])#將array轉(zhuǎn)換為tf.constanty=np.array([[1,2],[2,3],[4,5]])x2=tf.constant(value=y,dtype=tf.float32,shape=[3,2])withtf.Session()assess:print(sess.run(x1))print(sess.run(x2))sess.close()2.4.2矩陣的運算操作描述tf.diag(diagonal,name=None)生成對角矩陣。importTensorFlowastf;diagonal=[1,1,1,1]withtf.Session()assess:print(sess.run(tf.diag(diagonal)))

輸出結(jié)果為:[[1000]

[0100]

[0010]

[0001]]tf.diag_part(input,name=None)功能與上面的功能相反tf.trace(x,name=None)求一個2維Tensor足跡,即為對角值diagonal之和。importTensorFlowastfdiagonal=tf.constant([[1,0,0,3],[0,1,2,0],[0,1,1,0],[1,0,0,1]])withtf.Session()assess:print(sess.run(tf.trace(diagonal)))輸出結(jié)果為:4tf.transpose(a,perm=None,name='transpose')

調(diào)換tensor的維度順序,按照列表perm的維度排列調(diào)換tensor的順序。importTensorFlowastfdiagonal=tf.constant([[1,0,0,3],[0,1,2,0],[0,1,1,0],[1,0,0,1]])withtf.Session()assess:print(sess.run(tf.transpose(diagonal)))輸出結(jié)果為:[[1001][0110][0210][3001]]

tf.matmul(a,b,transpose_a=False,transpose_b=False,a_is_sparse=False,b_is_sparse=False,name=None)Matmul是矩陣相乘的函數(shù)transpose_a=False,transpose_b=False,表示運算前是否需要將矩陣進(jìn)行轉(zhuǎn)置。a_is_sparse=False,b_is_sparse=False,表示a,b是否當(dāng)作矩陣的系數(shù)進(jìn)行運算。2.4.3矩陣的分解和特征值案例:在線性代數(shù)中,設(shè)A∈Fn×n是n階矩陣。如果存在非零向量X∈Fn×1使AX=λX,對某個常數(shù)λ成立,則常數(shù)λ被稱為A的特征值(eigenvalue),X是特征值λ的特征向量。

對于λ和X的尋找可以交給TensorFlow來做,在TensorFlow中通過tf.self_adjoint_eigvals可以來求得矩陣的特征值。A1=tf.constant([[3,2,1],[0,-1,-2],[0,0,3]],dtype=tf.float64)sess=tf.Session()print(sess.run(A1))print(sess.run(tf.self_adjoint_eigvals(A1)))2.5使用激活函數(shù)2.5.1什么是激活函數(shù)

激活函數(shù)往往是存活在神經(jīng)網(wǎng)絡(luò)中,它可以通過翻轉(zhuǎn)特征空間,在其中尋找出線性的邊界。2.5.2Sigmoid函數(shù)Sigmoid是最常見的激活函數(shù),

定義域內(nèi)處處可導(dǎo)。在數(shù)學(xué)上可以被稱作logistic函數(shù)其表達(dá)公式為1/(1+exp(-x))。2.5.3Tanh函數(shù)Tanh函數(shù)是Sigmoid函數(shù)的一個變體,它的取值范圍為[-1,1]。它的改變是為了解決sigmoid函數(shù)零中心的情況。它的數(shù)學(xué)算術(shù)表達(dá)式為:exp(x)-exp(-x)/exp(x)+exp(-x)。2.5.4Relu函數(shù)Relu函數(shù)用來和0比大小,凡是x比0大,則輸出x,如果比0小,則輸出0。ReLu方法的出現(xiàn)大大簡化了計算,對網(wǎng)絡(luò)計算加速具有巨大的作用,它的數(shù)學(xué)表達(dá)式為:max(0,x)。2.6讀取數(shù)據(jù)源2.6.1通過Excel表導(dǎo)入數(shù)據(jù)集2.6.2通過Cvs文件中導(dǎo)入數(shù)據(jù)集2.6.3通過庫中自帶的數(shù)據(jù)集導(dǎo)入數(shù)據(jù)集2.6.4導(dǎo)入圖片數(shù)據(jù)集2.6.5將數(shù)據(jù)集通過URL自動進(jìn)行下載第3章

數(shù)據(jù)分析的基礎(chǔ)3.1認(rèn)識Numpy和Pandas3.2Numpy的基本使用3.3Pandas的基本使用3.1認(rèn)識Numpy和PandasNumpy(NumericalPython)提供了python對多維數(shù)組對象的支持:ndarray,具有矢量運算能力,快速、節(jié)省空間。Numpy支持高級大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學(xué)函數(shù)庫。Pandas(PythonDataAnalysisLibrary)是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas納入了大量的數(shù)據(jù)分析函數(shù)庫和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。除此以外,Pandas還提供了大量能使快速便捷地處理數(shù)據(jù)的函數(shù)和方法,使得Python成為強(qiáng)大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。3.2Numpy的基本使用3.2.1創(chuàng)建ndarray數(shù)組ndarray數(shù)組是一個N維數(shù)組對象(矩陣),它里面設(shè)置的所有元素必須是相同的類型?,F(xiàn)在通過如下的代碼,先來嘗試的創(chuàng)建一個ndarray數(shù)組。importnumpyasnp

x=np.array([1,2,3,4])

print(x)print(type(x))3.2Numpy的基本使用如果設(shè)定的值為不相同類型,那么會統(tǒng)一按照其某一種類型進(jìn)行統(tǒng)一。importnumpyasnpy=np.array([[1,2.,3],[4,5,6]])print(y)print(type(y))類型類型代碼說明int8、uint8i1、u1有符號和無符號的8bit(1個字節(jié))整型int16、uint16i2、u2有符號和無符號的16位(2個字節(jié))整型int32、uint32i4、u4有符號和無符號的32位(4個字節(jié))整型int64、uint64i8、u8有符號和無符號的64位(8個字節(jié))整型float16f2半精度浮點數(shù)float32f4/f標(biāo)準(zhǔn)的單精度浮點數(shù)float64f8/d標(biāo)準(zhǔn)的雙精度浮點數(shù)。float128f16/g擴(kuò)展精度浮點數(shù)complex64、complex128、complex256c8、c16、c32分別用2個32位、64位或128位浮點數(shù)表示的復(fù)數(shù)bool?存儲True和False值得布爾類型objectOPython對象類型string_S固定長度的字符串類型(每個字符1個字節(jié))unicode_U固定長度的unicode類型(字節(jié)數(shù)由平臺決定)3.2Numpy的基本使用3.2Numpy的基本使用3.2.2運用ndarray數(shù)組ndarray數(shù)組是一個多維的數(shù)組,多維數(shù)組中的維度稱之為“軸”(axis),想要了解一個新的數(shù)據(jù)參數(shù)它是多少維度,可以通過ndim屬性來進(jìn)行訪問。而shape屬性是可以用來訪問多少維度以及每一個維度所對應(yīng)的它的長度。1、ndarray的算術(shù)運算2、ndarray的切片3.2Numpy的基本使用1、ndarray的算術(shù)運算ndarray數(shù)組使用非常的靈活,它不需要使用循環(huán)就可以對列表里的元素執(zhí)行算術(shù)運算,語法和對標(biāo)量元素的操作一樣。3.2Numpy的基本使用2、ndarray的切片切片(slice)是指從數(shù)據(jù)的位置中找出符合對應(yīng)位置的數(shù)據(jù)出來。在進(jìn)行切片時,通常需要為數(shù)組的每個維度指定一個切片位置,每個維度之間用逗號分割,如果沒有逗號,表示只在第一維上進(jìn)行切片。3.3Pandas的基本使用3.3.1Series數(shù)據(jù)結(jié)構(gòu)1、創(chuàng)建Series數(shù)據(jù)結(jié)構(gòu)

在Pandas中的Series數(shù)據(jù)結(jié)構(gòu)是一個像數(shù)組一樣的一維對象,可以存儲很多類型的數(shù)據(jù)。3.3Pandas的基本使用2、訪問Series的元素

Series可以同時使用下標(biāo)和標(biāo)簽兩種方式進(jìn)行訪問。3.3Pandas的基本使用3.3.2DataFrame數(shù)據(jù)結(jié)構(gòu)1、DataFrame數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建

Series對象的index數(shù)組存放有每一個元素的標(biāo)簽,而DataFrame對象則有所不同,它有兩個索引數(shù)組,第一個數(shù)組與行相關(guān),它與Series的索引數(shù)組極為相似。每個標(biāo)簽與標(biāo)簽所在行的所有元素相關(guān)聯(lián)。而第二個數(shù)組包含一系列列標(biāo)簽,每個標(biāo)簽與一列數(shù)據(jù)相關(guān)聯(lián)。3.3Pandas的基本使用2、DataFrame數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建

訪問DataFrame,需要先使用列的名稱,如圖3-2所示通過名字、成績和ID,得到該列對應(yīng)的Series對象,然后使用下標(biāo)或者標(biāo)簽訪問Series中的元素。3.3Pandas的基本使用3、DataFrame數(shù)據(jù)結(jié)構(gòu)的運用

DataFrame數(shù)據(jù)結(jié)果的方便之處除了體現(xiàn)在對數(shù)據(jù)的訪問上,還體現(xiàn)在對數(shù)據(jù)的增加、刪除、修改、排序等運用上。1)增加數(shù)據(jù)2)刪除數(shù)據(jù)3)修改標(biāo)簽4)排序、分組第4章

模型的評價與評估4.1損失函數(shù)4.2經(jīng)驗誤差與擬合4.3數(shù)據(jù)集劃分4.4調(diào)參與最終模型4.5模型性能度量4.6比較檢驗4.7偏差與方差4.8不同學(xué)習(xí)模型下的模型評價與評估4.1損失函數(shù)

損失函數(shù)(lossfunction)又成為代價函數(shù)(costfunction),是將隨機(jī)事件或有關(guān)隨機(jī)變量的取值映射為非負(fù)實數(shù),以表示該隨機(jī)事件的“風(fēng)險”或“損失”的函數(shù)。4.1.1最小二乘法

對于最簡單的一元線性模型來說,用最小二乘法做損失函數(shù)不乏為一個比較不錯的選擇最小二乘法是通過最小化誤差的平方和來尋找數(shù)據(jù)的最佳函數(shù)并與之匹配。即利用最小二乘法簡便地求得未知的數(shù)據(jù),并使得這些求得的數(shù)據(jù)與實際數(shù)據(jù)之間誤差的平方和最小。4.1損失函數(shù)

4.1.2梯度下降

梯度下降法(GradientDescent)是最優(yōu)化算法,也被成為最速下降法。假設(shè)爬山,想最快上到山頂,應(yīng)該從山勢最陡的地方上山。也就是山勢變化最快的地方上山,同樣如果從任意一點出發(fā),需要最快搜索到函數(shù)最大值,那么也應(yīng)該從函數(shù)變化最快的方向搜索。函數(shù)變化最快的方法就是函數(shù)的梯度方向。4.2經(jīng)驗誤差與擬合

4.1.2梯度下降1、錯誤率(Errorrate)2、誤差(Error)3、訓(xùn)練誤差(TrainingError)4、泛化誤差(GeneralizationError)5、過擬合(Overfitting)6、欠擬合(Underfitting)4.3數(shù)據(jù)集劃分

4.3.1留出法4.3.2交叉驗證法4.3.3自助法4.4調(diào)參與最終模型

1、學(xué)習(xí)率2、過擬合3、網(wǎng)絡(luò)層數(shù)4.5模型性能度量

4.5.1均方誤差4.5.2錯誤率與精確度4.5模型性能度量

4.5.3準(zhǔn)確度、靈敏度與F1

準(zhǔn)確度P和靈敏度R可以分別定義為:F1度量被定義為:4.5模型性能度量

4.5.4

ROC與AUC

受試者工作特征,英文縮寫ROC(ReceiverOperatingCharacteristic)是一套評價模型性能的標(biāo)準(zhǔn),和P-R曲線相同是適用于基于均等損失代價的模型性能的評估方法。ROC曲線上每個點反映著對同一數(shù)據(jù)模型反饋的感受性。4.5模型性能度量

4.5.5

代價敏感錯誤率與代價曲線

P-R曲線和ROC曲線都可以做均等損失代價模型的性能評估,而代價敏感錯誤率與代價曲線是可以用來衡量非均等代價。在現(xiàn)實中,衡量一個人,衡量一件事,不能將某個人或者某個事情通過非黑即白的方式來進(jìn)行判斷,不能準(zhǔn)確的說一個人是好人還是壞人,同樣在模型判斷也是一樣,在單一的條件中不能簡單地預(yù)測出準(zhǔn)確的結(jié)果,為了權(quán)衡不同類型錯誤所造成的不同損失,這個時候為錯誤賦予“非均等代價”(UnequalCost)。4.6比較檢驗

4.6.1假設(shè)檢驗

檢驗是指假設(shè)對學(xué)習(xí)器泛化錯誤率分布進(jìn)行某種判斷和猜想。在現(xiàn)實情況下,并不知道模型的泛化錯誤率是多少,但是可以測出在測試集上模型的錯誤率是多少,當(dāng)然模型的泛化錯誤率和測試錯誤率未必相同。但從絕大部分的項目結(jié)果數(shù)據(jù)來看,兩者接近的可能性比較大,相差很遠(yuǎn)的可能性比較小,所以可以根據(jù)測試集上的錯誤率推測出泛化模型的錯誤率分布。4.6.2麥克尼瑪爾變化顯著性檢驗McNemar變化顯著性檢驗以研究對象自身為對照,檢驗其兩組樣本變化是否顯著為判斷依據(jù)的。原假設(shè)樣本來自的兩配對總體分布無顯著差異。McNemar變化顯著性檢驗要求待檢驗的兩組樣本的觀察值為二分類數(shù)據(jù),它通過對兩組樣本前后變化的頻率,計算二項分布的概率值,但這種要求在實際分析中有一定的局限性。4.7偏差與方差

4.8不同學(xué)習(xí)模型下的模型評價與評估

4.8.1不同學(xué)習(xí)模型下的數(shù)據(jù)集劃分4.8.2不同學(xué)習(xí)模型下的模型評價第5章

數(shù)據(jù)準(zhǔn)備5.1數(shù)據(jù)探索5.2數(shù)據(jù)預(yù)處理5.1數(shù)據(jù)探索

5.1.1數(shù)據(jù)質(zhì)量分析數(shù)據(jù)質(zhì)量分析是數(shù)據(jù)探索的首要工作任務(wù)也是數(shù)據(jù)預(yù)處理的前提,是后期進(jìn)行訓(xùn)練模型有效性和準(zhǔn)確性的基礎(chǔ)。數(shù)據(jù)質(zhì)量分析的主要任務(wù)就是要檢查數(shù)據(jù)中是否存在有臟數(shù)據(jù)。臟數(shù)據(jù),一般是指不符合要求,以及不能直接進(jìn)行相應(yīng)分析的數(shù)據(jù)。常見的臟數(shù)據(jù)的表現(xiàn)形式有:缺失值、異常值、不一致的值、重復(fù)值以及含有特殊符號(如:#、@、&)的數(shù)據(jù)。5.1數(shù)據(jù)探索

1、缺失值在數(shù)據(jù)集中,缺失值所產(chǎn)生的原因有很多種可能,比如:在收集數(shù)據(jù)的時候,在填寫數(shù)據(jù)時的遺漏,只填寫了相關(guān)重要的數(shù)據(jù),不重要的數(shù)據(jù)就沒有填;在數(shù)據(jù)采集傳輸?shù)倪^程中,由于設(shè)備的故障以及存儲介質(zhì)發(fā)生了故障,導(dǎo)致了數(shù)據(jù)的丟失等;還有一些情況是,這個屬性值確實是不存在的,比如:對于一個孩童來說,在固定收入的屬性中,確實是不存在的;另外還有一些情況是因為獲取到這個信息的代價太大了,所以這個信息暫時的無法獲取等。在數(shù)據(jù)探索階段對缺失值分析,只需要統(tǒng)計缺失值屬性的個數(shù)及缺失率,統(tǒng)計未缺失屬性的個數(shù)及缺失率。5.1數(shù)據(jù)探索

2、異常值分析異常值分析主要是分析數(shù)據(jù)集中的數(shù)據(jù)是否有錄入有誤以及不合理的數(shù)據(jù)出現(xiàn)。比如:關(guān)于身高的屬性,如果有些數(shù)據(jù)填入的是3米,那么這個數(shù)據(jù)就是異常的不合理的。忽視異常值數(shù)據(jù)是十分危險的,如果把異常值數(shù)據(jù)加入模型的訓(xùn)練中,那么將會影響模型的準(zhǔn)確性,比如:如果將身高為3米的屬性作為正確的數(shù)據(jù)加入到模型的訓(xùn)練中去,那么機(jī)器學(xué)習(xí)到的會認(rèn)為高度3米都是人類的正常標(biāo)準(zhǔn),那么它在進(jìn)行后期判斷的時候會將高度為3米物品作為人類的標(biāo)準(zhǔn),大大降低了模型的正確率。重視異常值的出現(xiàn),分析其產(chǎn)生的原因,常常成為發(fā)現(xiàn)問題進(jìn)而改進(jìn)決策的契機(jī)。1)簡單統(tǒng)計量分析2)3δ原則3)箱型圖5.1數(shù)據(jù)探索

3、數(shù)據(jù)一致性分析數(shù)據(jù)不一致性是指相同數(shù)據(jù)屬性但數(shù)值之間的矛盾性、不相容性。如果在訓(xùn)練模型之前沒有將改數(shù)據(jù)現(xiàn)象發(fā)現(xiàn),訓(xùn)練出來的模型將會產(chǎn)生與實際相違背的結(jié)果。數(shù)據(jù)不一致性問題主要發(fā)生在數(shù)據(jù)集成的過程中所產(chǎn)生,比如:兩張表格中都存儲了用戶的電話號碼,在用戶的電話號碼發(fā)生變更的時候,只更新了一張表格,另外一張表格沒有進(jìn)行更新,這個時候就產(chǎn)生了不一致的數(shù)據(jù)。5.1數(shù)據(jù)探索

5.1.2數(shù)據(jù)特征分析1、分布分析通過分布分析可以了解到數(shù)據(jù)的分布特征和分布類型,以便發(fā)現(xiàn)某些特大或特小的可疑數(shù)據(jù)。對于定量性數(shù)據(jù),通過分布分析可以了解到數(shù)據(jù)的分布形式:對稱的還是不對稱的,以及數(shù)據(jù)的頻率分布表等。2、對比分析對比性分析是指把兩個相互聯(lián)系的指標(biāo)數(shù)據(jù)進(jìn)行比較,從數(shù)量上說明數(shù)據(jù)規(guī)模的大小、數(shù)據(jù)水平的高低以及各種關(guān)系的協(xié)調(diào)等。3、統(tǒng)計量分析統(tǒng)計量分析是指通過統(tǒng)計指標(biāo)定量的對數(shù)據(jù)進(jìn)行統(tǒng)計描述,常用的兩個方面:集中趨勢和離中趨勢。集中趨勢是指平均水平的數(shù)據(jù)對個體數(shù)據(jù)集中趨勢的度量,常用的方法有:均值、中位數(shù)、眾數(shù)。離中趨勢是指個體數(shù)據(jù)離開平均水平數(shù)據(jù)的度量,常用的方法有:極差、標(biāo)準(zhǔn)差、變異系數(shù)。4、相關(guān)性分析相關(guān)性分析主要是用來分析連續(xù)數(shù)值之間線性的相關(guān)程度的強(qiáng)弱。其主要的方法可以選擇,直接繪制散點圖法、繪制散點圖矩陣或者計算相關(guān)系數(shù)。5.2數(shù)據(jù)預(yù)處理

5.2.1數(shù)據(jù)清洗1、缺失值處理通常對于缺失值的處理方法有三類:刪除記錄、數(shù)據(jù)插補和不處理。刪除處理和不處理都比較簡單,在這里主要介紹一下數(shù)值的插補。2、異常值的處理通常對于異常值的處理有如下方法:刪除、視為缺失值來處理、平均值進(jìn)行填補、不處理。5.2數(shù)據(jù)預(yù)處理

5.2.2數(shù)據(jù)集成1、實體識別問題實體識別問題主要任務(wù)是檢測和解決同名異議、異名同義、單位不統(tǒng)一等。2、冗余屬性識別冗余屬性識別主要任務(wù)是排除同一屬性多次出現(xiàn)、同一屬性命名不一致導(dǎo)致了多次出現(xiàn)重復(fù)的情況。5.2數(shù)據(jù)預(yù)處理

5.2.3數(shù)據(jù)變換1、簡單函數(shù)變換簡單函數(shù)變換就是對原始數(shù)據(jù)上的所有數(shù)據(jù)進(jìn)行某些數(shù)學(xué)函數(shù)變換,常見的方式有平方、開方、對數(shù)、差分運算等。2、數(shù)據(jù)標(biāo)準(zhǔn)化(歸一化)數(shù)據(jù)標(biāo)準(zhǔn)化是指將原始數(shù)據(jù)按照不同的量綱進(jìn)行統(tǒng)一的放大或縮小。如果不這樣做的話,數(shù)值間的差別可能很大,不進(jìn)行處理的話會影響到一些分析結(jié)果,所以需要對所有的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化,從而減少數(shù)據(jù)與數(shù)據(jù)之間的差異。5.2數(shù)據(jù)預(yù)處理

5.2.4數(shù)據(jù)規(guī)約數(shù)據(jù)規(guī)約是將原始數(shù)據(jù)進(jìn)行規(guī)約,規(guī)約以后的數(shù)據(jù)仍然接近于保持原數(shù)據(jù)的完整性,但是數(shù)據(jù)量要小很多。常用的規(guī)約的方式包括:合并屬性、逐步向前選擇、逐步向后刪除、決策樹規(guī)約、主成分分析等。

第6章

回歸6.1回歸分析算法的基礎(chǔ)知識6.2線性回歸6.3邏輯回歸6.4戴明回歸6.5回歸模型的評估6.1回歸分析算法的基礎(chǔ)知識回歸分析(RegressionAnalysis)是一種對數(shù)據(jù)進(jìn)行預(yù)測性分析的技術(shù),是用于估計多組變量之間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法?;貧w算法的分類:線性回歸一元線性回歸多元線性回歸非線性回歸一元多項式回歸多元非線性回歸邏輯回歸二元邏輯回歸多元邏輯回歸泊松回歸。。。。。6.1.2汽車油耗數(shù)據(jù)集數(shù)據(jù)集下載地址:/ml/datasets/Auto+MPG6.1.2汽車油耗數(shù)據(jù)集美國汽車油耗數(shù)據(jù)表各列縮寫及含義縮寫含義MPG油耗,1加侖汽油可以行駛的英里數(shù),數(shù)值越大油耗越低cyl汽車發(fā)動機(jī)的汽缸個數(shù)disp汽車發(fā)動機(jī)的排量hp汽車發(fā)動機(jī)的馬力數(shù)wt汽車的標(biāo)準(zhǔn)重量acc汽車的加速性能year汽車的款型年代orig汽車來源name汽車的型號名稱6.1.3在Excel中預(yù)測

先將美國汽車油耗數(shù)據(jù)的兩列(排量disp和油耗MPG)導(dǎo)出到Excel文件中,這里把油耗調(diào)整到后面一列,因為Excel默認(rèn)最后一列為y值,前面的列為x值。importpandasaspd#讀取文件,以空格分隔各行,原始數(shù)據(jù)不包含表頭data=pd.read_csv('auto-mpg.data',sep='\s+',header=None)print(data.shape)#(398,9)#給各列數(shù)據(jù)設(shè)置表頭data.columns=['MPG','cyl','disp','hp','wt','acc','year','orig','name’]df=data[data['hp']!='?']

#排除hp不詳?shù)臄?shù)據(jù)

exportDF=df[['disp','MPG']]#選取要保存的列

exportDF.to_excel('MPG.xlsx',index=False)

#保存為MPG.xlsx,并忽略標(biāo)簽

6.1.3在Excel中預(yù)測

在Excel中打開產(chǎn)生的MPG.xlsx文件,選中disp和MPG兩列數(shù)據(jù),插入散點圖,在圖上的數(shù)據(jù)點上右鍵單擊打開快捷菜單,選中“添加趨勢線”選項。6.1.3在Excel中預(yù)測

一元線性回歸分析擬合的線性方程為y?=?-0.0601x?+?35.121,R2為0.64823,即MPG為disp乘以?-0.0601(這里的負(fù)號表示MPG與disp負(fù)相關(guān),disp越大,MPG越低)再加上一個常數(shù)35.121。6.2線性回歸一元線性回歸

多元線性回歸6.2.1線性回歸的基本原理以汽車油耗與排量數(shù)據(jù)集為例,每一個排量數(shù)據(jù)X對應(yīng)著一個實際的MPG油耗數(shù)據(jù)Y,以及一個根據(jù)回歸公式預(yù)測的Y′。

每一對(X,Y′)就是數(shù)據(jù)集中的disp和根據(jù)回歸公式預(yù)測的MPG數(shù)據(jù)。“最佳”的參數(shù)c和b理論上會使得所有的Y′?和Y一致,但這在現(xiàn)實中是不可能的。6.2.2線性回歸之最小二乘法最小二乘法(OrdinaryLeastSquare,OLS)是用數(shù)學(xué)公式直接求解線性回歸方程的參數(shù)的方法,目的是找到最優(yōu)的c和b,使每一對預(yù)測的Y′和Y之間的誤差(Y-Y′)最小化。

二乘表示平方,最小二乘法就表示求誤差平方和最小的方法。6.2.2線性回歸之最小二乘法訓(xùn)練模型的目的就是要選擇合適的c和b,使E的值最小化。通過微積分知識可知,E達(dá)到最小化的必要條件是E對c和E對b的偏微分要等于0將E的公式代入上式,再根據(jù)鏈?zhǔn)椒▌t求微分就可以得到:6.2.2線性回歸之最小二乘法使用Python按上述公式計算出來的c和b與excel擬合結(jié)果一致。6.2.3線性回歸之梯度下降法多元線性回歸有多少個自變量,就有多少個參數(shù)ci,可以把參數(shù)b也合并進(jìn)去,寫成c0×1的形式,即:或其矩陣形式:簡寫為:6.2.3線性回歸之梯度下降法多元線性回歸中當(dāng)自變量的個數(shù)增大到一定程度后,最小二乘法求回歸系數(shù)矩陣就不再可行,必須使用梯度下降法。什么是梯度:在微積分里面,對多元函數(shù)的參數(shù)求偏導(dǎo)數(shù),把求得的各個參數(shù)的偏導(dǎo)數(shù)以向量的形式寫出來,就是梯度。梯度向量的幾何意義:就是函數(shù)變化增加最快的地方。具體來說,對于函數(shù)f(x,y),在點(x0,y0),沿著梯度向量的方向就是(?f/?x0,?f/?y0)T的方向是f(x,y)增加最快的地方?;蛘哒f,沿著梯度向量的方向,更加容易找到函數(shù)的最大值。反之,沿著梯度向量相反的方向,也就是-(?f/?x0,?f/?y0)T的方向,就更加容易找到函數(shù)的最小值。因此,梯度向量可以指引用迭代的方式找到誤差平方的最小值,以及這個最小值所對應(yīng)的回歸參數(shù)。6.2.3線性回歸之梯度下降法梯度下降法的迭代過程:J?(θ0,θ1)是一個有兩個自變量的函數(shù),(一元線性回歸中的誤差平方和函數(shù)也有b和c兩個變量,類似于圖中的θ0,θ1)。我們的目的是從圖上的任意點出發(fā),找到函數(shù)的最小值,即誤差平方和最小的點,得到這個點對應(yīng)的兩個自變量(θ0,θ1,或一元線性回歸中的b和c),即為求解的回歸參數(shù)。6.2.4油耗預(yù)測中的線性回歸數(shù)據(jù)預(yù)處理構(gòu)建計算圖訓(xùn)練模型輸出結(jié)果結(jié)果的可視化6.2.4油耗預(yù)測中的線性回歸數(shù)據(jù)預(yù)處理小數(shù)定標(biāo)歸一化,通過移動數(shù)據(jù)的小數(shù)點位置,將數(shù)據(jù)縮放到[-1,1]區(qū)間,由于這里的數(shù)據(jù)沒有負(fù)值,因此會縮放到[0,1]區(qū)間。#導(dǎo)入庫importtensorflowastfimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotasplt

#獲取數(shù)據(jù)data=pd.read_csv('auto-mpg.data',sep='\s+',header=None)data.columns=['MPG','cyl','disp','hp','wt','acc','year','orig','name']data=data[data['hp']!='?']

#小數(shù)定標(biāo)歸一化處理x_data=data['disp'].values/1000y_data=data['MPG'].values/100

data_count=len(x_data)6.2.4油耗預(yù)測中的線性回歸構(gòu)建計算圖###構(gòu)建計算圖####設(shè)置兩個輸入占位符X=tf.placeholder(tf.float32,[data_count])Y=tf.placeholder(tf.float32,[data_count])#因為線性方程Y=cX+b,所以設(shè)置兩個變量c和b#初始值為?-1到1之間的隨機(jī)數(shù)。random_uniform([1])為1×1的矩陣,即一個數(shù)c=tf.Variable(tf.random_uniform([1],-1.0,1.0))#初始值為零,zeros([1])為一個1×1的零矩陣b=tf.Variable(tf.zeros([1]))#使用線性方程求得一個新的Y(起始的參數(shù)是一個隨機(jī)值)Y_pred=c*X+b

#定義損失函數(shù),即預(yù)測Y和原Y之間的和方差:(Y_pred?-?Y)平方,求和,取均值loss=tf.reduce_mean((Y_pred-Y)**2)6.2.4油耗預(yù)測中的線性回歸構(gòu)建計算圖(2):梯度下降部分#通過gradients求出梯度,沿梯度的反方向移動,滿足loss最小,即梯度下降法grad_c,grad_b=tf.gradients(ys=loss,xs=[c,b])

learning_rate=tf.constant(0.5)#每一次改變的比例,通常稱為學(xué)習(xí)率

#將變量沿梯度的負(fù)方向移動學(xué)習(xí)率的長度,然后更新變量值update_c=tf.assign(c,c-learning_rate*grad_c)update_b=tf.assign(b,b-learning_rate*grad_b)#變量初始化init=tf.global_variables_initializer()###計算圖構(gòu)建結(jié)束####設(shè)置訓(xùn)練輪數(shù)train_cycles=500#設(shè)置每50輪打印一次中間結(jié)果print_cycles=50

#定義一個用于保存中間結(jié)果的數(shù)組saved_data=[]6.2.4油耗預(yù)測中的線性回歸訓(xùn)練模型###開始訓(xùn)練###sess=tf.Session()sess.run(init)

#初始化變量

#打印表頭print('cyclecbloss')print('================================')forstepinrange(1,train_cycles+1):#根據(jù)x和y的值,更新b和c,函數(shù)的返回值是b和c更新后的值

new_c,new_b=sess.run([update_c,update_b],

feed_dict={X:x_data,Y:y_data})#如果本輪應(yīng)該打印輸出

ifstep%print_cycles==0:#計算損失函數(shù)在當(dāng)前輪的值

l=sess.run(loss,feed_dict={X:x_data,Y:y_data})#保存中間變量

saved_data.append([step,l,new_c[0],

new_b[0]])#打印本輪擬合數(shù)據(jù)

print('{:5d}{:8.4f}{:8.4f}{:8.4f}'.format(step,new_c[0],

new_b[0],l))sess.close()###結(jié)束訓(xùn)練###6.2.4油耗預(yù)測中的線性回歸輸出結(jié)果saved_data數(shù)組中的參數(shù)是X和Y歸一化后擬合出來的,要使用原始的X計算出原始的Y,就需要按照反方向進(jìn)行處理。原始的Y是歸一化后的Y的100倍,因此b需要放大100倍,cX也要放大100倍,但同時原始的X是歸一化后的X的1000倍,c就是在放大100倍的基礎(chǔ)上再縮小1000倍,即縮小10倍。最終調(diào)整后的一元線性回歸方程為MPG?=?-0.05958×disp+35.03,與最小二乘法獲得的一元線性回歸方程MPG?=?-0.0601×disp+35.1206是非常接近的。6.2.4油耗預(yù)測中的線性回歸結(jié)果的可視化損失值隨迭代輪數(shù)變化圖6.2.4油耗預(yù)測中的線性回歸結(jié)果的可視化回歸線隨迭代輪數(shù)變化圖6.3邏輯回歸分類問題:判斷一份郵件是否為垃圾郵件預(yù)測用戶是否會購買某件商品判斷病人是否得了某種疾病判斷一個評論表達(dá)的是贊揚還是批評這些都是二分類問題。分類問題有很多算法可以解決,其中一種典型的算法就是邏輯回歸(LogisticRegression,LR)算法。邏輯回歸算法需要找到分類概率P(y=1)與輸入向量X的直接關(guān)系,然后通過比較概率值來判斷類別。6.3.1邏輯回歸的基本原理基本的假設(shè):即數(shù)據(jù)的分布符合伯努利分布,也就是正類的概率與負(fù)類的概率之和為1。定義一個Odds(x)為x發(fā)生的幾率,這個幾率的取值為0到正無窮,值越大,說明發(fā)生的可能性越大。取對數(shù)得到Logit函數(shù):6.3.1邏輯回歸的基本原理取對數(shù)后,由于幾率的值域為0到正無窮,Logit函數(shù)的取值范圍就為負(fù)無窮到正無窮。為了方便公式的書寫,將Logit函數(shù)命名為z,則p可以表達(dá)為z的函數(shù):上式即為邏輯函數(shù)(Logistic函數(shù)),將一個取值為負(fù)無窮到正無窮的變量z,映射成為取值區(qū)間為0~1的概率。Logistic函數(shù)的圖像:6.3.2邏輯回歸

vs線性回歸邏輯回歸需要通過Logistic函數(shù)將值域為負(fù)無窮到正無窮的數(shù)據(jù)映射到0和1之間,用于表征預(yù)測值為某類別的概率。使用線性回歸的假設(shè)函數(shù)來擬合Logit函數(shù)z,可得到邏輯回歸的假設(shè)函數(shù)。這樣就可以用解決線性回歸問題的方式來解決邏輯回歸問題,即在線性回歸的假設(shè)函數(shù)外面再包了一層Logistic函數(shù),將線性回歸的預(yù)測值進(jìn)一步映射為0~1之間的概率,得到邏輯回歸的預(yù)測值,這就是邏輯回歸名字的來源。6.3.2邏輯回歸的損失函數(shù)最大似然估計(MaximumLikelihoodEstimation)。伯努利分布的最大似然函數(shù),使所有樣本預(yù)測正確的可能性最大令p為正類概率,則負(fù)類概率就為1-p邏輯回歸中的假設(shè)函數(shù)h(x)即為p為了從觀測樣本的分類結(jié)果,反推最有可能(最大概率)導(dǎo)致這些觀測需要的模型參數(shù),需要使似然函數(shù)最大化,那么損失函數(shù)就可以定義為負(fù)的最大似然函數(shù)。這樣損失值越小,似然函數(shù)值就越大,其參數(shù)也就越能導(dǎo)致樣本的觀察值。6.3.2邏輯回歸的損失函數(shù)由于連乘不便于計算偏導(dǎo)數(shù),損失函數(shù)使用似然函數(shù)的負(fù)對數(shù)。取對數(shù)可以將公式右邊連乘取變成連加,方便數(shù)學(xué)計算。因此邏輯回歸的損失函數(shù)就定義為:有了邏輯回歸的假設(shè)函數(shù)和損失函數(shù),就可以和線性回歸類似,采用梯度下降法求解模型的最佳參數(shù)了。6.3.3邏輯回歸的代碼實現(xiàn)邏輯回歸與線性回歸的主要代碼區(qū)別就是假設(shè)函數(shù)和損失函數(shù)的實現(xiàn)。#使用邏輯方程來求得一個預(yù)測為正類的概率(假設(shè)函數(shù))y_pred=1/(1+tf.exp(-(c*x+b)))

#定義損失函數(shù),按最大似然率求邏輯回歸的損失值loss=tf.reduce_mean(-y*tf.log(y_pred)-(1-y)*tf.log(1-y_pred))6.4戴明回歸有時數(shù)據(jù)的誤差不僅僅在因變量上存在,自變量也可能有誤差。因此,在擬合數(shù)據(jù)時,不能只考慮預(yù)測值與因變量的誤差。線性回歸使用最小二乘法優(yōu)化數(shù)據(jù)點到回歸線的垂直距離(平行于y軸方向)。為了體現(xiàn)x方向的誤差,戴明回歸使用總體最小二乘法(TotalLeastSquares)優(yōu)化數(shù)據(jù)點到回歸線的總距離(即垂直于回歸線方向)。6.4.1戴明回歸基本原理與傳統(tǒng)的線性回歸相比,戴明回歸的假設(shè)函數(shù)是一樣的,但是損失函數(shù)有所不同。需要使用點到直線的距離求解戴明回歸的誤差,已知一個點(xi,yi),和直線y=cx+b點到直線的距離的平方就是:戴明回歸的損失函數(shù)就是這些誤差的平方和:6.4.2戴明回歸代碼實現(xiàn)除了損失函數(shù)的定義外,戴明回歸的代碼和線性回歸的代碼基本一致,因此下面只給出損失函數(shù)的定義代碼:#戴明回歸損失函數(shù),數(shù)據(jù)點到回歸線的距離平方,求和,取均值loss=tf.reduce_mean((Y_pred-Y)**2/(1+c**2))6.5回歸模型的評估平均誤差MSE(mean_squared_error)[0,+∞],MSE越小,模型越好平均絕對誤差MAE(mean_absolute_error)[0,+∞],MAE越小,模型越好方差EVC(explained_variance_score)[0,1],EVC越接近1,模型越好確定系數(shù)r2(r2_score)一般為[0,1],r2

越接近1,模型越好第7章

分類算法7.1分類算法的基礎(chǔ)知識7.2決策樹分類器7.3樸素貝葉斯分類器7.4分類模型的評估7.1分類算法的基礎(chǔ)知識

7.1.1分類的基本思想已知一些樣本的屬性,并且已經(jīng)知道他/她們是否在貸款時違約。那么如何總結(jié)出規(guī)律,以判斷出是否該給一些新人發(fā)放貸款呢?7.1分類算法的基礎(chǔ)知識

7.1.2了解本章案例的數(shù)據(jù)集——貸款違約風(fēng)險評估數(shù)據(jù)集將使用一組脫敏后的某銀行的個人消費貸款歷史數(shù)據(jù)來進(jìn)行違約分析。共有600個樣本,每個樣本9個屬性。各屬性的含義和取值范圍如下表所列:列含義與取值區(qū)間年齡貸款者的年齡,介于20到56歲之間教育教育程度指數(shù),取值為1~5工齡工作年數(shù),介于0到31年之間地址省份,數(shù)值化為0~34收入年收入,單位為千元,介于14到446之間負(fù)債率負(fù)債與存款的比例,百分?jǐn)?shù),介于0.4到41.3之間信用卡負(fù)債信用卡負(fù)債,單位為千元,介于0.012到20.56之間其他負(fù)債信用卡以外的負(fù)債,單位千元,介于0.046到26.033間違約是否有違約,拖欠還款,0為無違約,1為有違約。7.2決策樹分類器7.2.1決策樹模型原理分類的決策樹模型是一種描述對實例進(jìn)行分類的樹形結(jié)構(gòu)。決策樹是由結(jié)點(node)和有向邊(directededge)組成。結(jié)點的表示形式有兩種,分別是中間的內(nèi)部結(jié)點(internalnode)和葉子結(jié)點(leafnode),內(nèi)部結(jié)點代表的是一個特征或者屬性,葉結(jié)點則代表一個類。7.2決策樹分類器7.2.2信息增益所謂的信息熵是代表隨機(jī)變量不確定性的度量。熵這個概念最早起源于物理學(xué),在物理學(xué)中是用來度量一個熱力學(xué)系統(tǒng)的無序程度,而在信息學(xué)里面,熵是對不確定性的度量。在1948年,香農(nóng)引入了信息熵,將其定義為離散隨機(jī)事件出現(xiàn)的概率,一個系統(tǒng)越是有序,信息熵就越低,反之一個系統(tǒng)越是混亂,它的信息熵就越高。所以信息熵可以被認(rèn)為是系統(tǒng)有序化程度的一個度量。7.2決策樹分類器7.2.3ID3決策樹原理ID3算法的核心就是在決策樹各個結(jié)點上應(yīng)用信息增益準(zhǔn)則選擇特征,遞歸地構(gòu)建決策樹。具體的方式是:從根結(jié)點開始,對結(jié)點計算所有可能的特征的信息增益,選擇信息增益最大的特征作為結(jié)點的特征,由該特征的不同取值建立子結(jié)點;再對子結(jié)點遞歸地調(diào)用以上方法,構(gòu)建決策樹;直到所有特征的信息增益均很小或沒有特征可以選擇為止。最后得到一個決策樹。ID3相當(dāng)于用極大似然法進(jìn)行概率模型的選擇。7.2決策樹分類器

7.2決策樹分類器7.2.4ID3決策樹模型實現(xiàn)fromsklearn.treeimportDecisionTreeClassifierasDTCdtc=DTC(criterion='entropy')#建立決策樹模型,基于信息熵dtc.fit(x_train,y_train)#訓(xùn)練模型print('訓(xùn)練集準(zhǔn)確率:',dtc.score(x_train,y_train))print('測試集準(zhǔn)確率:',dtc.score(x_test,y_test))7.2決策樹分類器7.2.5決策樹模型的可視化決策樹分類模型的一大優(yōu)點就是易于解釋。可以將模型輸出為graphviz格式,然后將其可視化。fromsklearn.treeimportexport_graphvizexport_graphviz(dtc,feature_names=x.columns,out_file='tree.dot')7.2決策樹分類器7.2.6CART決策樹原理分類與回歸樹(Classificationandregression,CART)模型是應(yīng)該廣泛的決策樹學(xué)習(xí)方法。CART同樣由特征選擇、樹的生成及剪枝幾部分組成,即可以用于分類也可以用于回歸。先來開一下CART的生成過程。在這里的目的是基于訓(xùn)練數(shù)據(jù)集生成決策樹,生成的決策樹要盡量的大。主體思想是遞歸第構(gòu)建二叉決策樹的過程。對回歸樹用平方誤差最小化準(zhǔn)則,對分類樹用基尼指數(shù)(Giniindex)最小化準(zhǔn)則,進(jìn)行特征的選擇,從而生成二叉樹。7.2決策樹分類器

7.2決策樹分類器

7.2決策樹分類器

7.2決策樹分類器7.2.7CART決策樹模型實現(xiàn)與ID3算法不同,CART算法既支持離散屬性,也支持連續(xù)屬性,這就不再需要人為的找一個點將連續(xù)屬性進(jìn)行離散化(比如前面使用每個屬性的平均值對屬性進(jìn)行二值化)。還是先導(dǎo)入數(shù)據(jù)和劃分訓(xùn)練集與測試集。關(guān)鍵代碼如下:fromsklearn.treeimportDecisionTreeClassifierasDTCdtc=DTC()#建立決策樹模型,無參數(shù)默認(rèn)采用CART算法dtc.fit(x_train,y_train)#訓(xùn)練模型7.3樸素貝葉斯分類器7.3.1預(yù)測貸款違約數(shù)據(jù)準(zhǔn)備導(dǎo)入數(shù)據(jù)集,并劃分?jǐn)?shù)據(jù)集。7.3樸素貝葉斯分類器7.3.2條件概率與貝葉斯公式貝葉斯分類算法的實質(zhì)就是計算條件概率的公式。在事件A發(fā)生的條件下,事件B發(fā)生的概率為P(B|A)來表示。事件A和事件B同時發(fā)生的概率為P(AB),那么事件A和事件B同時發(fā)生的概率就等于事件A發(fā)生的概率乘以A發(fā)生的條件下B發(fā)生的概率。即P(AB)=P(B|A)*P(A),這是非常直觀的。同樣,它也等于事件B發(fā)生的概率乘以事件B發(fā)生的條件下事件A發(fā)生的概率,即:P(AB)=P(A|B)*P(B)。7.3樸素貝葉斯分類器7.3.3極大似然估計貝葉斯分類器的核心就是在已知X的情況下,計算樣本屬于某個類別的概率:其中,Ci表示樣本所屬的某個類別。樣本最終屬于哪個類別Ci,應(yīng)該將計算所得的最大概率值P(Ci|X)對應(yīng)的類別作為樣本的最終分類:7.3樸素貝葉斯分類器7.3.4高斯貝葉斯模型實現(xiàn)如果數(shù)據(jù)集中的自變量X均為連續(xù)的數(shù)值型,則在計算P(X|Ci)時可以假設(shè)自變量X服從高斯正態(tài)分布,所以自變量X的條件概率可以表示成:關(guān)鍵代碼實現(xiàn)如下:fromsklearnimportnaive_bayes

#調(diào)用高斯樸素貝葉斯分類器gnb=naive_bayes.GaussianNB()#模型擬合Gnb.fit(x_train,y_train)7.3樸素貝葉斯分類器7.3.5多項式貝葉斯模型實現(xiàn)如果數(shù)據(jù)集中的自變量X均為離散型變量,就無法使用高斯貝葉斯分類器,而應(yīng)該選擇多項式貝葉斯分類器。在計算概率值P(X|Ci)時,會假設(shè)自變量X的條件概率滿足多項式分布,故概率值P(X|Ci)的計算公式可以表示為:關(guān)鍵代碼實現(xiàn)如下:fromsklearn.naive_bayesimportMultinomialNB#使用默認(rèn)配置初始化樸素貝葉斯mnb=MultinomialNB()#利用訓(xùn)練數(shù)據(jù)對模型參數(shù)進(jìn)行估計mnb.fit(x_train,y_train)7.3樸素貝葉斯分類器7.3.6伯努利貝葉斯模型實現(xiàn)當(dāng)數(shù)據(jù)集中的自變量X均為0-1二值時(例如在本章前面ID3決策樹的案例中,每個屬性都被二值化后的數(shù)據(jù)),通常會優(yōu)先選擇伯努利貝葉斯分類器。利用該分類器計算概率值P(X|Ci)時,會假設(shè)自變量X的條件概率滿足伯努利分布,故概率值P(X|Ci)的計算公式可以表示為:關(guān)鍵代碼實現(xiàn)如下:fromsklearn.naive_bayesimportBernoulliNBbnb=BernoulliNB()#基于訓(xùn)練數(shù)據(jù)集的擬合bnb.fit(x_train,y_train)7.4分類模型的評估7.4.1混淆矩陣在分類模型中,借鑒了醫(yī)學(xué)檢測中的陽性概念,有4個術(shù)語:真陰性(TN,TrueNegative)表示真實值為陰性,檢測值也是陰性的樣本數(shù)真陽性(TP,TruePositive)表示真實值為陽性,檢測值也是陽性的樣本數(shù)假陰性(FN,F(xiàn)alseNegative)表示真實值為陽性,檢測值為陰性的樣本數(shù)假陽性(FP,F(xiàn)alsePositive)表示真實值為陰性,檢測值為陽性的樣本數(shù)7.4分類模型的評估關(guān)鍵代碼實現(xiàn)如下:y_train_pred=mnb.predict(x_train)#獲取模型對訓(xùn)練集樣本的預(yù)測值

fromsklearn.metricsimportconfusion_matrix#導(dǎo)入混淆矩陣庫cm=confusion_matrix(y_train,y_train_pred)#計算混淆矩陣

importseabornassns#導(dǎo)入seaborn可視化庫sns.heatmap(cm,annot=True,fmt='d',cmap=plt.cm.Blues)#生成混淆矩陣plt.show()#顯示混淆矩陣7.4分類模型的評估

7.4分類模型的評估7.4.3分類報告從混淆矩陣手動計算精確度和敏感度是非常繁瑣的。幸運的是,sklearn已經(jīng)提供了分類報告,可以一次性給出所有類別的精確度和敏感度。第8章

聚類算法8.1聚類分析的基礎(chǔ)知識8.2K-means算法8.3層次聚類8.4密度聚類8.5聚類分析模型評估8.1聚類分析的基礎(chǔ)知識所謂的聚類就是對大量的未知標(biāo)注的數(shù)據(jù)集,按照數(shù)據(jù)內(nèi)部存在的數(shù)據(jù)特征將數(shù)據(jù)集劃分為多個不同的類別,的目的是使類別內(nèi)的數(shù)據(jù)比較相似,類別之間的數(shù)據(jù)相似度比較大。8.1聚類分析的基礎(chǔ)知識8.1.2聚類分析的距離計算數(shù)據(jù)可以分為很多類,有連續(xù)屬性的數(shù)據(jù),有文檔數(shù)據(jù),對于這些不同的數(shù)據(jù)來說聚類分析往往是通過距離計算的方式來進(jìn)行聚類,距離計算的方式根據(jù)不同類型的數(shù)據(jù)有如下不同的方法:1)對于連續(xù)屬性的數(shù)據(jù)來說2)對于文檔數(shù)據(jù)來說8.1聚類分析的基礎(chǔ)知識8.1.3基站商圈數(shù)據(jù)準(zhǔn)備移動終端的普及,手機(jī)用戶時間序列的手機(jī)定位數(shù)據(jù),映射到現(xiàn)實的地理空間位置,即可完整、客觀地還原出手機(jī)用戶的現(xiàn)實活動軌跡,從而挖掘出人口空間分布與活動聯(lián)系的特征信息。(移動通信網(wǎng)絡(luò)的信號覆蓋邏輯上被設(shè)計成由若干六邊形的基站小區(qū)相互鄰接而構(gòu)成的蜂窩網(wǎng)絡(luò)現(xiàn)狀服務(wù)區(qū))8.2K-means算法

8.2K-means算法K-Means聚類的算法過程從N個樣本數(shù)據(jù)中隨機(jī)選取K個對象作為初始的聚類中心;分別計算每個樣本到各個聚類中心的距離,將對象分配到距離最近的聚類中;所有對象分配完成后,重新計算K個聚類的中心;與前一次計算得到得K個聚類中心比較,如果聚類中心發(fā)生變化,轉(zhuǎn)2),否則轉(zhuǎn)5);當(dāng)質(zhì)心不發(fā)生變化時停止并輸出聚類結(jié)果。8.2K-means算法

8.2K-means算法3、K-means算法的優(yōu)缺點K-means算法的優(yōu)點是理解容易,聚類效果不錯,在處理大數(shù)據(jù)集的時候,該算法可以保證較好的伸縮性和高效率,當(dāng)簇近似高斯分布的時候,效果非常好。但K-means算法并不是萬能的,通過對該過程的理解可以看出來,K-means算法對初始值的敏感度是非常強(qiáng)的,選擇不同的初始值可能導(dǎo)致不同的簇劃分結(jié)果。

8.2K-means算法8.2.2K-means算法的應(yīng)用在sklearn中集成了K-means算法,可以通過調(diào)用KMeans()函數(shù)通過之前整理好的數(shù)據(jù),訓(xùn)練屬于自己的模型。KMeans()函數(shù)中包含的主要參數(shù)有:n_clusters:即的k值,一般需要多試一些值以獲得較好的聚類效果。max_iter:最大的迭代次數(shù),一般如果是凸數(shù)據(jù)集的話可以不過這個值,如果數(shù)據(jù)集不是凸的,可能很難收斂,此時可以指定最大的迭代次數(shù)讓算法可以及時退出循環(huán)。n_init:用不同的初始化質(zhì)心運行算法的次數(shù),由于K-Means是結(jié)果受初始值影響的局部最優(yōu)的迭代算法,因此需要多試幾次以選擇一個較好的聚類效果,默認(rèn)是10,一般不需要修改。如果K值較大,則可以適當(dāng)增大這個值。init:即初始值選擇的方式,可以完全隨機(jī)選擇‘random’,或者自己指定初始化的k個質(zhì)心。一般建議使用默認(rèn)的‘K-means’。algorithm:有“auto”,“full”or“elkan”三種選擇?!癴ull”就是傳統(tǒng)的K-means算法,“elkan”是原理篇講的elkanK-Means算法。8.3層次聚類8.3.1層次聚類原理層次聚類是通過距離來判斷兩個簇之間的相似度的,距離最小的兩個簇將它判斷為兩個簇之間的相似程度最高。那么通過距離的方式有幾種方式來進(jìn)行判斷:1)最小距離,即單鏈接SingleLinkage,它是由兩個簇的最近樣本決定。2)最大距離,即全鏈接CompleteLinkage,它是由兩個簇之間的最遠(yuǎn)樣本來決定。3)平均距離,即均鏈接AverageLinkage,它是由兩個簇所有的樣本共同決定。1)和2)都容易受到極端值的影響,而第3)種方法的計算量是比較大的,但是這種度量的方式往往又是最合理的。8.3層次聚類8.3.2層次聚類算法的應(yīng)用sklearn庫下的層次聚類方法是集成在sklearn.cluster的AgglomerativeClustering()函數(shù)中,包含了主要的三個重要的參數(shù),分別為n_clusters,linkage,affinity。n_clusters:構(gòu)造函數(shù)中最終要進(jìn)行簇類的個數(shù)按照常理來說,凝聚層次聚類是不需要指定簇的個數(shù)的,但是Sklearn的這個類需要指定簇的個數(shù)。算法會根據(jù)簇的個數(shù)判斷最終的合并依據(jù),這個參數(shù)會影響聚類質(zhì)量。Linkage:是衡量簇與簇之間的遠(yuǎn)近程度的方法具體說來包括最小距離,最大距離和平均距離三種方式。對應(yīng)于簇融合的方法,即簇間觀測點之間的最小距離作為簇的距離,簇間觀測點之間的最大距離作為簇的距離,以及簇間觀測點之間的平均距離作為簇的距離。一般說來,平均距

溫馨提示

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

評論

0/150

提交評論