版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章概論西華大學(xué)機器學(xué)習(xí)第一章機器學(xué)習(xí)概述XXX學(xué)校XXX2022目錄Contents什么是機器學(xué)習(xí)機器學(xué)習(xí)的應(yīng)用機器學(xué)習(xí)研究內(nèi)容問題的常規(guī)處理方法各概念間關(guān)系
本章知識圖譜3什么是機器學(xué)習(xí)一1.1什么是機器學(xué)習(xí)5故事一:瑞雪兆豐年第一年冬天:下大雪第二年收獲季節(jié):大豐收冬天:沒怎么下雪第三年收獲季節(jié):顆粒無收冬天:下大雪第四年收獲季節(jié):大豐收冬天:下大雪現(xiàn)象1:頭一年瑞雪現(xiàn)象2:來年豐收現(xiàn)象間的規(guī)律1.1什么是機器學(xué)習(xí)6故事二:挑芒果顏色大小產(chǎn)地形狀物理屬性:品質(zhì):甜多汁1.1什么是機器學(xué)習(xí)7故事二:挑芒果if(顏色是嫩黃and尺寸是大的and購自最喜歡的小販):芒果是甜的if(軟的):芒果是多汁的……計算機程序:1.1什么是機器學(xué)習(xí)8機器學(xué)習(xí)過程人類的歸納過程機器學(xué)習(xí)的應(yīng)用二2.1圖像和計算機視覺101、ImageNet競賽和WebVision競賽2、物體識別與目標(biāo)跟蹤3、輔助成像和藝術(shù)創(chuàng)作2.2日常生活及消費112.3金融領(lǐng)域12分析股票信用評價保險行業(yè)欺詐檢測房地產(chǎn)行業(yè)2.4醫(yī)療領(lǐng)域13輔助診斷臨床實驗新藥研發(fā)個性化用藥2.5自然語言處理14自然語言處理的研究內(nèi)容非常廣泛,主要包括以下幾個方面:句法語義分析信息提取文本挖掘機器翻譯信息檢索問答系統(tǒng)對話系統(tǒng)文本自動摘要
自然語言生成2.6安全和異常行為檢測152.7工業(yè)和商業(yè)領(lǐng)域162.8娛樂領(lǐng)域17智能音響視頻網(wǎng)站動畫游戲機器學(xué)習(xí)主要研究內(nèi)容三3.1機器學(xué)習(xí)的主要研究內(nèi)容
機器學(xué)習(xí)研究的是從已有數(shù)據(jù)中通過選取合適的算法進行學(xué)習(xí),自動歸納邏輯或規(guī)則,并根據(jù)這個歸納的結(jié)果對新數(shù)據(jù)進行預(yù)測。機器學(xué)習(xí)包含了三個基本的要素,即數(shù)據(jù)、算法和模型。
機器學(xué)習(xí)包含了監(jiān)督學(xué)習(xí)、非監(jiān)督學(xué)習(xí)和強化學(xué)習(xí)幾種類別。3.1機器學(xué)習(xí)的主要研究內(nèi)容監(jiān)督學(xué)習(xí)(SupervisedLearning),又稱為有監(jiān)督學(xué)習(xí),它是從有標(biāo)記的數(shù)據(jù)中進行模型學(xué)習(xí),然后根據(jù)這個模型對未知樣本進行預(yù)測。算法模型輸入輸出數(shù)據(jù)中提取的樣本特征樣本對應(yīng)標(biāo)簽3.1機器學(xué)習(xí)的主要研究內(nèi)容非監(jiān)督學(xué)習(xí)(UnsupervisedLearning),又稱為無監(jiān)督學(xué)習(xí),它和有監(jiān)督學(xué)習(xí)的最大區(qū)別在于輸入樣本沒有經(jīng)過標(biāo)記,需要自動從樣本中進行學(xué)習(xí)。非監(jiān)督學(xué)習(xí)不局限于解決有正確答案的問題,所以目標(biāo)可以不必十分明確。它常常被用于視頻或者音頻內(nèi)容分析、社交網(wǎng)絡(luò)分析等場合。3.1機器學(xué)習(xí)的主要研究內(nèi)容半監(jiān)督學(xué)習(xí)(Semi-SupervisedLearning),是一種介于監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)當(dāng)中的機器學(xué)習(xí)方法。半監(jiān)督學(xué)習(xí)使用大量的未標(biāo)記數(shù)據(jù),同時使用一部分標(biāo)記數(shù)據(jù)來進行學(xué)習(xí)。標(biāo)記數(shù)據(jù)監(jiān)督學(xué)習(xí)方法未標(biāo)記的數(shù)據(jù)3.1機器學(xué)習(xí)的主要研究內(nèi)容強化學(xué)習(xí)(ReinforcementLearning),又稱再勵學(xué)習(xí)、評價學(xué)習(xí),是一種重要的機器學(xué)習(xí)方法,在智能控制機器人及分析預(yù)測等領(lǐng)域有許多應(yīng)用。強化學(xué)習(xí)也是使用未標(biāo)記的數(shù)據(jù),但是可以通過某種方法(通常是獎懲函數(shù))知道結(jié)果離正確答案越來越近還是越來越遠。機器學(xué)習(xí)問題的常規(guī)處理方法四4.1開發(fā)機器學(xué)習(xí)應(yīng)用的一般步驟254.2如何選擇合適的算法264.3使用Python開發(fā)機器學(xué)習(xí)應(yīng)用27
Python有2.X和3.X兩個大的版本,其代碼不完全兼容,因此在選擇開發(fā)環(huán)境和版本的時候,會對初學(xué)者造成一定的困擾。本書中的案例代碼都是在3.X下實現(xiàn)并調(diào)試通過的,本書將在附錄中詳細介紹環(huán)境的搭建問題。建議:按附錄A第2種方法安裝4.4機器學(xué)習(xí)模型的評價281.分類任務(wù)
分類是最常見的機器學(xué)習(xí)任務(wù),針對分類任務(wù)的常見的評價指標(biāo)包括準確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1分數(shù)(F1-score)、ROC曲線和AUC曲線等。
首先介紹混淆矩陣的概念。如果用的是二分類的模型,那么把預(yù)測情況與實際情況的所有結(jié)果兩兩混合,結(jié)果就會出現(xiàn)以下4種情況,就組成了混淆矩陣。4.4機器學(xué)習(xí)模型的評價291.分類任務(wù)
實際結(jié)果陽性(1)陰性(0)預(yù)測結(jié)果陽性(1)TP(真陽性)FP(假陽性)陰性(0)FN(假陰性)TN(真陰性)4.4機器學(xué)習(xí)模型的評價301.分類任務(wù)
記N為總體,即N=TP+FP+FN+TN(1)準確率
準確率的定義為預(yù)測正確的結(jié)果占總樣本數(shù)的百分比,用上述概念來表示則有:4.4機器學(xué)習(xí)模型的評價311.分類任務(wù)
記N為總體,即N=TP+FP+FN+TN(2)精確率
精確率,又叫精準率或者查準率,它是針對預(yù)測結(jié)果而言的,其含義是在所有被預(yù)測為正的樣本中實際為正的樣本的概率,意思就是在預(yù)測為正樣本的結(jié)果中,我們有多少把握可以預(yù)測正確,其計算公式為:4.4機器學(xué)習(xí)模型的評價321.分類任務(wù)
記N為總體,即N=TP+FP+FN+TN(3)召回率
召回率,又叫查全率,它是針對原樣本而言的,它的含義是在實際為正的樣本中被預(yù)測為正樣本的概率,其計算公式為:4.4機器學(xué)習(xí)模型的評價331.分類任務(wù)
記N為總體,即N=TP+FP+FN+TN(4)F1分數(shù)F1分數(shù)是精確率和召回率之間的調(diào)和平均值,其范圍是[0,1],具體的計算公式如下:4.4機器學(xué)習(xí)模型的評價342.回歸任務(wù)
在回歸問題中,預(yù)測值通常為連續(xù)值,其性能不能用分類問題的評價指標(biāo)來評價,通常用均方誤差(MSE)、均方根誤差(RMSE)和平均絕對誤差(MAE)等來評價回歸模型的性能。其中均方誤差表示所有樣本的樣本誤差的平方的均值,均方根誤差即對于均方誤差開方,平均絕對誤差表示所有樣本的樣本誤差的絕對值的均值。MSE、RMSE和MAE越接近0,模型越準確。假定有m和樣本,h(xi)表示第i個樣本的預(yù)測值,yi表示第i個樣本的實際值,那么上述三個指標(biāo)的計算公式如下:4.4機器學(xué)習(xí)模型的評價352.回歸任務(wù)
(1)均方誤差(MSE)
(2)均方根誤差(RMSE)
4.4機器學(xué)習(xí)模型的評價362.回歸任務(wù)
(3)平均絕對誤差(MAE)
4.4機器學(xué)習(xí)模型的評價373.聚類任務(wù)
聚類模型的評價方式大體上可分為外部指標(biāo)和內(nèi)部指標(biāo)。(1)外部指標(biāo)
1)杰卡德相似系數(shù)(JaccardSimilarityCoefficient)
Jaccard系數(shù)為集合之間的交集與它們的并集的比值,取值在[0,1]之間,值越大相似度越高。Jaccard距離用于描述集合之間的不相似度,距離越大相似度越低。計算公式如下:4.4機器學(xué)習(xí)模型的評價383.聚類任務(wù)
聚類模型的評價方式大體上可分為外部指標(biāo)和內(nèi)部指標(biāo)。(1)外部指標(biāo)2)皮爾遜相關(guān)系數(shù)(PearsonCorrelationCoefficient)
衡量兩個正態(tài)連續(xù)變量之間線性關(guān)聯(lián)性的程度,取值在[-1,1]之間,越接近1或-1,相關(guān)度越強,計算公式如下,其中Cov(X,Y)表示X和Y的協(xié)方差,D(X)表示X的方差。4.4機器學(xué)習(xí)模型的評價393.聚類任務(wù)
聚類模型的評價方式大體上可分為外部指標(biāo)和內(nèi)部指標(biāo)。(1)內(nèi)部指標(biāo)
內(nèi)部指標(biāo)是無監(jiān)督的,不需要基準數(shù)據(jù)集,也不需要借助于外部參考模型,僅利用樣本數(shù)據(jù)集中樣本點與聚類中心之間的距離來衡量聚類結(jié)果的優(yōu)劣。內(nèi)部指標(biāo)主要有:緊密度(Compactness)分割度(Seperation)戴維森堡丁指數(shù)(Davies-bouldinIndex,DBI)鄧恩指數(shù)(DunnValidityIndex,DVI)輪廓系數(shù)(SilhouetteCoefficient)
機器學(xué)習(xí)各基本概念關(guān)系五5.1機器學(xué)習(xí)各基本概念關(guān)系41各概念關(guān)系數(shù)據(jù)挖掘和機器學(xué)習(xí)關(guān)系
思考題42思考題什么是機器學(xué)習(xí)?機器學(xué)習(xí)可以完成哪些事情?機器學(xué)習(xí)的應(yīng)用開發(fā)基本過程是怎樣的?機器學(xué)習(xí)和數(shù)據(jù)挖掘以及人工智能之間有什么關(guān)系?謝謝!第一章概論西華大學(xué)機器學(xué)習(xí)第二章Python機器學(xué)習(xí)基礎(chǔ)庫XXX學(xué)校XXX2022目錄ContentsNumpyPandasMatplotlibScipyScikit-LearnTensorFlow
本章知識圖譜46
Numpy一1Numpy庫48Numpy(NumericPython)庫是Python當(dāng)中一個開源的數(shù)值計算擴展庫,它可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nestedliststructure)結(jié)構(gòu)要高效得多(該結(jié)構(gòu)也可以用來表示矩陣(matrix))。Numpy和稀疏矩陣運算包Scipy配合使用更加方便。Numpy提供了許多高級的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運算庫,多用于嚴格的數(shù)字處理,在很多大型金融公司業(yè)務(wù)中廣泛使用,一些核心的科學(xué)計算組織(如:LawrenceLivermore,NASA等)用其處理一些本來使用C++,F(xiàn)ortran或Matlab等完成的任務(wù)。1.1Numpy庫的安裝49Numpy庫在Windows下可以通過下面的步驟進行安裝:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:pipinstallnumpy1.2Numpy庫的導(dǎo)入50
首先,在使用Numpy庫之前,我們需要使用import語句引入該模塊,代碼如下所示:importnumpyasnp#導(dǎo)入numpy模塊并命名為np,方便后面調(diào)用
或者:fromnumpyimport*1.2Numpy庫的導(dǎo)入51import語句和from…import語句的區(qū)別:import…語句:直接導(dǎo)入一個模塊,同一模塊不管執(zhí)行多少次,import都只會被導(dǎo)入一次。from…import…語句:導(dǎo)入一個模塊中的一個函數(shù)。import引入模塊之后,如果需要使用模塊里的函數(shù)方法,則需要加上模塊的限定名字,而from…import語句則不用加模塊的限定名字,直接使用其函數(shù)方法即可。1.3創(chuàng)建數(shù)組52a=np.array([1,2,3,4])#創(chuàng)建一維數(shù)組b=np.array([5,6,7,8])c=np.array([1,2,3,4],[5,6,7,8],[7,8,9,10])#創(chuàng)建二維數(shù)組
創(chuàng)建一維數(shù)組和二維數(shù)組的代碼:
數(shù)組的大小可以通過其shape屬性獲得,例:a.shapeb.shapec.shape1.3創(chuàng)建數(shù)組53c.shape=(4,3)修改數(shù)組的shape屬性的代碼:創(chuàng)建一個改變尺寸的新數(shù)組,原數(shù)組保持不變,代碼如下:d=a.reshape((2,2))a[1]=10修改數(shù)組中指定位置的元素的代碼:1.4查詢數(shù)組類型54
數(shù)組的元素類型可以通過dtype屬性獲得,實現(xiàn)代碼如下:
通過dtype參數(shù)在創(chuàng)建數(shù)組的時候指定元素類型,實現(xiàn)代碼如下:e=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]],dtype=np.float)
a.dtype1.5查詢數(shù)組類型551.arange()函數(shù)類似于Python的range()函數(shù),通過指定開始值、終值和步長來創(chuàng)建一維數(shù)組(注意數(shù)組不包括終值),實現(xiàn)代碼如下:f=np.arrange(0,1,0.1)2.linspace()函數(shù)通過指定開始值、終值和元素個數(shù)來創(chuàng)建一維數(shù)組(等差數(shù)列),可以通過endpoint關(guān)鍵字指定是否包括終值(默認設(shè)置包括終值),實現(xiàn)代碼如下:g=np.linsspace(0,1,12)1.5查詢數(shù)組類型563.logspace()函數(shù)和linspace()類似,但是它創(chuàng)建的是等比數(shù)列,實現(xiàn)代碼如下:h=np.logspace(0,2,10)1.6數(shù)組元素的存取57
數(shù)組元素的存取方法和Python標(biāo)準方法相同,代碼如下:a=np.arange(10)以下代碼可以實現(xiàn)對數(shù)組中部分連續(xù)元素的存?。篴[3:5]1.7ufunc運算58ufunc是universalfunction的縮寫,是一種能對ndarray的每個元素進行操作的函數(shù)。它支持數(shù)組廣播、類型轉(zhuǎn)換和其他一些標(biāo)準功能。也就是說,ufunc是函數(shù)的“矢量化”包裝器,它接受固定數(shù)量的特定輸入并生成固定數(shù)量的特定輸出。NumPy內(nèi)置的許多ufunc函數(shù)是在C語言級別實現(xiàn)的,因此它們的計算速度非常快。比如numpy.sin()的速度就比Python自帶的math.sin()的速度要快得多。1.8矩陣的運算59a=np.matrix(‘12;34’)b=a.T#返回矩陣a的轉(zhuǎn)置矩陣并存儲于bc=a.I#返回矩陣a的逆矩陣并存儲于c
Numpy庫提供了matrix類,使用matrix類創(chuàng)建的是矩陣對象,它們的加、減、乘、除運算默認采用矩陣方式,因此其用法和Matlab十分相似。具體使用方法如下:1.8矩陣的運算60a=np.zeros(5,),dtype=#使用zero方法創(chuàng)建0矩陣
b=np.empty#使用empty方法創(chuàng)建一個2行4列任意數(shù)據(jù)的矩陣c=np.array([1,2,3],[4,5,6])#使用array方法創(chuàng)建換一個2行3列指定數(shù)據(jù)的矩陣d=np.dot(b,c)#使用dot函數(shù)實現(xiàn)交叉運算
由于Numpy中同時存在ndarray和matrix對象,讀者很容易混淆,一般情況下,不推薦在較復(fù)雜的程序中使用matix,通??梢酝ㄟ^ndarray對數(shù)組進行各種操作來實現(xiàn)矩陣運算。下面是一些創(chuàng)建特殊矩陣的代碼示例:
Pandas二2Pandas庫的安裝62Pandas是Python的一個數(shù)據(jù)分析包,最初是由AQRCapitalManagement于2008年4月開發(fā)的,目前由專注于Python數(shù)據(jù)包開發(fā)的PyData開發(fā)團隊繼續(xù)開發(fā)和維護,屬于PyData項目的一個部分。Pandas的名稱來自面板數(shù)據(jù)和Python數(shù)據(jù)分析。Pandas引入了大量庫和一些標(biāo)準的數(shù)據(jù)模型,提供了高效的操作大型數(shù)據(jù)集所需要的工具。Pandas也提供了大量可以快速便捷處理數(shù)據(jù)的函數(shù)和方法,是Python成為強大而高效的數(shù)據(jù)分析工具的重要因素之一。Pandas的基本數(shù)據(jù)結(jié)構(gòu)是Series和DataFrame。其中Series稱為序列,用于產(chǎn)生一個一維數(shù)組,DataFrame用于產(chǎn)生二維數(shù)組,它的每一列都是一個Series。2.1Pandas庫的安裝63
在Windows下,Pandas庫可以通過啟動Anaconda下的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令完成安裝:pipinstallpandas2.2Pandas庫的導(dǎo)入64使用Pandas庫,首先需要使用import語句引入該模塊,代碼如下:importpandasaspd或者:frompandasimport*2.3Series65
Series是一維標(biāo)記數(shù)組,可以存儲任意數(shù)據(jù)類型,如整型、字符串、浮點型和Python對象等,軸的標(biāo)簽稱為索引(index)。
frompandasimportSeries,DataFrame#通過傳遞一個list對象來創(chuàng)建Series,默認創(chuàng)建整型索引
a=Series([1,2,3,4])print("創(chuàng)建Series:\n",a)#創(chuàng)建一個用索引來決定每一個數(shù)據(jù)點的Seriesb=Series([1,2,3,4],index=['a','b','c','d’])print("創(chuàng)建帶有索引的Series:\n",b)#如果有一些數(shù)據(jù)在一個Python字典中,可以通過傳遞字典來創(chuàng)建一個Seriessdata={'Tom':123456,"John":12654,"Cindy":123445}
2.4DataFrame66DataFrame是二維標(biāo)記數(shù)據(jù)結(jié)構(gòu),其列可以是不同的數(shù)據(jù)類型,它是最常用的Pandas對象,像Series一樣可以接收多種輸入(lists、dicts、series和DataFrame等)。
#DataFrame的簡單實例代碼如下:frompandasimportSeries,DataFrame
#創(chuàng)建一個空的DataFramedf=DataFrame(columns={"a":"","b":"","c":""},index=[0])
a=[['2','1.2','4.2'],['0','10','0.3'],['1','5','0’]]print(df)#使用list的數(shù)據(jù)創(chuàng)建DataFramedf=DataFrame(a,columns=['one','two','three’]) print(df)
Matplotlip三3Matplotlip庫Matplotlib是Python的一個繪圖庫,是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建2D圖表和3D圖表。通過Matplotlib,開發(fā)者可能僅需要幾行代碼,便可以生成各種圖表,如直方圖、條形圖、散點圖等。它提供了一整套和Matlab相似的命令A(yù)PI,十分適合交互式制圖。也可以方便地將Matplotlib作為繪圖控件,嵌入GUI應(yīng)用程序中。3.1Matplotlip安裝
在Windows下,Matplotlib庫可以通過啟動Anaconda下的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令完成安裝:pipinstallmatplotlip3.2Matplotlip庫的導(dǎo)入70使用Matplotlib庫之前需要先使用import語句引入該模塊,代碼如下:importmatplotlipaspd或者:frommatplotlipimport*3.3基本繪圖plot命令Matplotlib庫中,最常使用的命令就是plot,常用的繪圖方法實現(xiàn)代碼如下:importmatplotlib.pyplotaspltimportnumpyasnp #導(dǎo)入numpy模塊方便后續(xù)使用numpy模塊中的函數(shù)
x=np.linspace(0,-2*np.pi,100) #使用linspace函數(shù)創(chuàng)建等差數(shù)列y=np.sin(x) plt.figure(1)plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2) #指定繪制函數(shù)的圖像plt.xlabel("Time(s)") #設(shè)置x坐標(biāo)名稱plt.ylabel("Volt") #設(shè)置y坐標(biāo)名稱plt.title("FirstExample") #設(shè)置圖像標(biāo)題plt.ylim(-1.2,1.2) #y坐標(biāo)表示范圍plt.legend() #設(shè)置圖例plt.show() #圖像展示3.3基本繪圖plot命令3.3基本繪圖plot命令參數(shù)說明如下:(1)label:給所繪制的曲線標(biāo)定一個名稱,此名稱在圖示(lengend)中顯示,只要在字符串前添加“$”,Matplotlib就會使用其內(nèi)嵌的latex引擎繪制數(shù)學(xué)公式。(2)color:指定曲線的顏色。(3)linewidth:指定曲線的寬度。(4)xlabel:設(shè)置X軸的文字。(5)ylabel:設(shè)置Y軸的文字。(6)title:設(shè)置圖表標(biāo)題。(7)ylim:設(shè)置Y軸的范圍,格式為[y的起點,y的終點]。(8)xlim:設(shè)置X軸的范圍,格式為[x的起點,x的終點]。(9)legend:顯示label中標(biāo)記的圖示。3.3基本繪圖plot命令關(guān)于plot函數(shù)顏色參數(shù)說明如下:顏色標(biāo)記顏色標(biāo)記藍色b綠色G紅色r黃色Y青色c黑色K洋紅色m白色W3.3基本繪圖plot命令關(guān)于plot函數(shù)線型參數(shù)取值說明如下:參數(shù)描述參數(shù)描述‘-’實線‘-’或者’:’虛線‘-.’點畫線‘none’或者’’不畫3.4繪制多窗口圖形一個繪制對象(figure)可以包含多個軸(axis),在Matplotlib中用軸表示一個繪圖區(qū)域,可以將其理解為子圖??梢允褂胹ubplot函數(shù)快速繪制有多軸的圖表。實現(xiàn)代碼如下:importmatplotlib.pyplotasplt #導(dǎo)入matplotlib模塊繪制多窗口圖形plt.subplot(1,2,1) #繪制多軸圖例第一幅圖plt.plot(x,y,color="red",linewidth=2) #傳入?yún)?shù),設(shè)置顏色和線條寬度plt.xlabel("Time(s)") #設(shè)置x軸名稱plt.ylabel("Volt") #設(shè)置y軸名稱plt.title("FirstExample") #設(shè)置標(biāo)題plt.ylim(-1.2,1.2) #設(shè)置表示范圍plt.axis([-8,0,-1.2,1.2])plt.legend()3.4繪制多窗口圖形plt.subplot(1,2,2) #繪制多軸圖例的第二幅圖plt.plot(x,y,"b--")plt.xlabel("Time(s)")plt.ylabel("Volt")plt.title("SecondExample")plt.ylim(-1.2,1.2)plt.legend()plt.show()3.4繪制多窗口圖形3.5文本注釋在數(shù)據(jù)可視化的過程中,可以通過annotate()方法在圖片中使用文字注釋圖中的一些特征,在使用annotate時,要考慮兩個點的坐標(biāo):被注釋的地方,使用坐標(biāo)xy=(x,y)給出;插入文本的地方,使用坐標(biāo)xytext=(x,y)給出,實現(xiàn)代碼如下所示:importnumpyasnp #導(dǎo)入numpy模塊importmatplotlib.pyplotasplt #導(dǎo)入matplotlib模塊x=np.arange(0.0,5.0,0.01) #使用numpy模塊中的arange函數(shù)生成數(shù)字序列y=np.cos(2*np.pi*x)plt.plot(x,y) #繪制圖形plt.annotate('localmax',xy=(2,1),xytext=(3,1.5)) #使用annotate函數(shù)對圖形進行注釋arrowprops=dict(facecolor="black",shrink=0.05)plt.ylim(-2,2)plt.show()3.5文本注釋在寫代碼過程中,如果發(fā)現(xiàn)輸入中文時存在無法正常顯示,這通常是因為缺少中文字體庫造成的,只需要手動添加中文字體即可解決該問題,實現(xiàn)代碼如下所示:importmatplotlib.pyplotasplt #導(dǎo)入matplotlib模塊plt.figure(1) #繪制圖像plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)plt.xlabel("時間(秒)") plt.ylabel("電壓")plt.title("正弦波")plt.ylim(-1.2,1.2)plt.legend()plt.show()mpl.rcParams['font.sans-serif']=['SimHei'] #系統(tǒng)字體,顯示中文plt.rcParams['axes.unicode_minus']=False3.5文本注釋Scipy四4.1ScipyScipy是一個用于數(shù)學(xué)、科學(xué)及工程方面的常用軟件包,Scipy包含科學(xué)計算中常見問題的各個工具箱。Scipy函數(shù)庫在NumPy庫的基礎(chǔ)上增加了許多的數(shù)學(xué)、科學(xué)及工程計算中常用的庫函數(shù),如線性代數(shù)、常微分方程數(shù)值求解、信號處理、圖像處理、稀疏矩陣等。它通過有效地計算NumPy矩陣,來讓NumPy和Scipy協(xié)同工作。4.1ScipypipinstallscipyScipy庫在Windows下可以通過下面的步驟進行安裝:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:4.2Scipy庫的導(dǎo)入85使用Scipy庫之前需要先使用import語句引入該模塊,代碼如下:importscipyaspd或者:fromscipyimport*4.3最小二乘法
4.3最小二乘法4.3最小二乘法4.3非線性方程求解89Scipy的optimize庫中的fsolve函數(shù)可以用來對非線性方程組進行求解,它的基本調(diào)用形式:fsolve(func,x_0),其中func(x)是計算方程組的函數(shù),它的參數(shù)x是一個矢量,表示方程組的各個未知數(shù)的一組可能解,func(x)返回x帶入方程組之后得到的結(jié)果,x_0為未知數(shù)矢量的初始值。4.3非線性方程求解90Scikit-Learn五5Scikit-Learn92Scikit-learn項目最早由數(shù)據(jù)科學(xué)家DavidCournapeau在2007年發(fā)起,需要NumPy和Scipy等其他包的支持,是Python語言中專門針對機器學(xué)習(xí)應(yīng)用而發(fā)展起來的一款開源的框架。Scikit-learn的基本功能主要被分為以下幾個部分:分類:是指識別給定對象的所述類別,屬于監(jiān)督學(xué)習(xí)的范疇,最常見的應(yīng)用場景包括垃圾郵件檢測和圖像識別等,目前Scikit-learn已經(jīng)實現(xiàn)的算法包括支持向量機(SVM)、K-近鄰、隨機森林、決策樹及多層感知器(MLP)神經(jīng)網(wǎng)絡(luò)等。回歸:是指預(yù)測與給定對象相關(guān)聯(lián)的連續(xù)值屬性,最常用的應(yīng)用場景包括藥物反應(yīng)和預(yù)測股票價格等,目前Scikit-learn已經(jīng)實現(xiàn)的算法包括支持向量回歸(SVR)、嶺回歸、Lasso回歸、貝葉斯回歸等。5Scikit-Learn93聚類:是指自動識別具有相似屬性的給定對象,并將其分組為集合,屬于無監(jiān)督學(xué)習(xí)的范疇,最常見的應(yīng)用場景包括顧客細分和實驗結(jié)果分組。目前Scikit-learn已經(jīng)實現(xiàn)的算法包括K-均值聚類、均值偏移、分層聚類等。數(shù)據(jù)降維:是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特征選擇等降維技術(shù)來減少要考慮的隨機變量的個數(shù),其主要應(yīng)用場景包括可視化處理和效率提升。模型選擇:是指對于給定參數(shù)和模型的比較、驗證和選擇,其主要目的是通過參數(shù)調(diào)整來提升精度,目前Scikit-learn已經(jīng)實現(xiàn)的算法包括格點搜索、交叉驗證和各種針對預(yù)測誤差評估的度量函數(shù)5Scikit-Learn94數(shù)據(jù)預(yù)處理:是指數(shù)據(jù)的特征提取和歸一化,是機器學(xué)習(xí)過程中的第一個也是最重要的環(huán)節(jié)。這里歸一化是指將輸入數(shù)據(jù)轉(zhuǎn)換為具有零均值和單位權(quán)方差的新變量,特征提取是指將文本或圖像數(shù)據(jù)轉(zhuǎn)換為可用機器學(xué)習(xí)的數(shù)字變量。綜上所述,作為專門面向機器學(xué)習(xí)的Python開源框架,Scikit-learn可以在一定范圍內(nèi)為開發(fā)者提供非常好的幫助,它內(nèi)部實現(xiàn)了各種各樣成熟的算法,容易安裝和使用。5.1Scikit-Learn的安裝pipinstallScikit_LearnScikit-Learn庫在Windows下的具體安裝步驟如下:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:5.2Scikit-Learn的數(shù)據(jù)集96序號數(shù)據(jù)集名稱主要調(diào)用方式數(shù)據(jù)描述1鳶尾花數(shù)據(jù)集Load_iris()用于多分類任務(wù)的數(shù)據(jù)集2波士頓房價數(shù)據(jù)集Load_boston()經(jīng)典的用于回歸任務(wù)的數(shù)據(jù)集3糖尿病數(shù)據(jù)集Load_diabetes()經(jīng)典的用于回歸任務(wù)的數(shù)據(jù)集4手寫數(shù)字數(shù)據(jù)集Load_digits()用于多分類的任務(wù)的數(shù)據(jù)集5乳腺癌數(shù)據(jù)集Load_breast_cancer()簡單經(jīng)典的用于二分類任務(wù)的數(shù)據(jù)集6體能訓(xùn)練數(shù)據(jù)集Load_linnerud()經(jīng)典的用于多變量回歸任務(wù)的數(shù)據(jù)集TensorFlow六6TensorFlowTensorFlow是一個深度學(xué)習(xí)庫,由Google開源,可以對定義在Tensor(張量)上的函數(shù)自動求導(dǎo)。Tensor意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算,TensorFlow即為張量從圖的一端流動到另一端。
要正常使用TensorFlow,必須了解兩個基本概念:Tensor和Flow,即張量和數(shù)據(jù)流圖.1.張量(Tensor)
張量是一種表示物理量的方式,這個方式就是用基向量與分量組合表示物理量(Combinationofbasisvectorandcomponent)。6TensorFlow標(biāo)量,0個基向量:0-modetensor向量,1個基向量:1-modetensor矩陣,2個基向量:2-modetensor…張量可以表示為多維數(shù)組(atensorcanberepresentedasamultidimensionalarrayofnumbers)6TensorFlow2.數(shù)據(jù)流圖(DataFlowGraphs)
用TensorFlow進行機器學(xué)習(xí)模型計算的時候,通常包含兩個階段:
第一階段:“組裝”一個計算圖(Graph)。這個圖就描述了用于機器學(xué)
習(xí)的模型的結(jié)構(gòu)。如果讀者熟悉以前微軟的DirectShow開發(fā),就能過很容易的理解,此處的Graph和DirectShow里的FilterGraphs有異曲同工之處。
第二階段:使用一個Session在圖中進行操作。6.1TensorFlow的安裝pipinstallTensorFlowTensorFlow庫在Windows下可以通過下面的步驟進行安裝:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:6.2TensorFlow的使用首先導(dǎo)入TensorFlow以及需要使用的Numpy庫,實現(xiàn)代碼如下:importtensorflowastfimportnumpyasnp準備數(shù)據(jù),隨機生成100待擬合的點,實現(xiàn)代碼如下:x_data=np.float32(np.random.rand(2,100))#隨機生成x數(shù)據(jù)y_data=np.dot([0.100,0.200],x_data)+0.300 #隨機生成y數(shù)據(jù)利用TensorFlow構(gòu)建一個線性模型,實現(xiàn)代碼如下:b=tf.Variable(tf.zeros([1]))W=tf.Variable(tf.random_uniform([1,2],-1.0,1.0))y=tf.matmul(W,x_data)+b6.2TensorFlow的使用對構(gòu)建的線性模型進行求解,設(shè)置損失函數(shù)、選擇梯度下降的方法以及迭代的目標(biāo),實現(xiàn)代碼如下:#設(shè)置損失函數(shù):誤差的均方差loss=tf.reduce_mean(tf.square(y-y_data))#選擇梯度下降的方法optimizer=tf.train.GradientDescentOptimizer(0.5)#迭代的目標(biāo):最小化損失函數(shù)train=optimizer.minimize(loss)6.2TensorFlow的使用利用TensorFlow來訓(xùn)練模型,得到待擬合的平面,實現(xiàn)代碼如下所示:#1.初始化變量:tf的必備步驟,主要聲明了變量,就必須初始化才能用init=tf.global_variables_initializer()#設(shè)置TensorFlow對GPU的使用按需分配config=tf.ConfigProto()config.gpu_options.allow_growth=True#2.啟動圖(graph)sess=tf.Session(config=config)sess.run(init)6.2TensorFlow的使用運行結(jié)果如圖2-10所示:謝謝!第一章概論西華大學(xué)機器學(xué)習(xí)第三章數(shù)據(jù)預(yù)處理XXX學(xué)校XXX2022目錄Contents概述數(shù)據(jù)預(yù)分析數(shù)據(jù)清理數(shù)據(jù)集成數(shù)據(jù)變換數(shù)據(jù)規(guī)約主要數(shù)據(jù)預(yù)處理函數(shù)
本章知識圖譜109概述一1概述111數(shù)據(jù)特點:不完整、
不一致、冗余、易受噪聲干擾數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)分析數(shù)據(jù)清理數(shù)據(jù)集成數(shù)據(jù)規(guī)約數(shù)據(jù)轉(zhuǎn)換對數(shù)據(jù)的特性有個大致的了解使數(shù)據(jù)格式標(biāo)準化、清除異常數(shù)據(jù)、糾正錯誤、清除重復(fù)數(shù)據(jù)將多個數(shù)據(jù)源的數(shù)據(jù)進行整合并統(tǒng)一存儲通過平滑聚集、數(shù)據(jù)概化、規(guī)范化等方式將數(shù)據(jù)轉(zhuǎn)換成適用于后續(xù)處理的形式。在保持原數(shù)據(jù)的完整性的情況下對數(shù)據(jù)集進行規(guī)約或簡化。數(shù)據(jù)預(yù)分析二2數(shù)據(jù)預(yù)分析113數(shù)據(jù)統(tǒng)計特性分析數(shù)據(jù)質(zhì)量分析查看數(shù)據(jù)的一些統(tǒng)計特性,包括均值、方差、最大值、最小值等檢查原始數(shù)據(jù)中是否存在臟數(shù)據(jù)包括針對缺失值分析、異常值分析、以及不一致的值、重復(fù)數(shù)據(jù)和含有特殊符號的數(shù)據(jù)的分析。數(shù)據(jù)預(yù)分析2.1統(tǒng)計特性分析114
數(shù)據(jù)統(tǒng)計特性分析可以通過Pandas包中的describe()函數(shù)很方便的實現(xiàn)。describe函數(shù)的原型為:DataFrame.describe(percentiles=None,include=None,exclude=None,datatime_is_numeric=false)percentiles:該參數(shù)可以設(shè)定數(shù)值型特征的統(tǒng)計量,默認是[.25,.5,.75],也就是返回25%、50%、75%數(shù)據(jù)量時的數(shù)字,但是這個可以修改的,如可以根據(jù)實際情況改為[.25,.5,.8],即表示返回25%、50%、80%數(shù)據(jù)量時的數(shù)字。include:該參數(shù)默認只計算數(shù)值型特征的統(tǒng)計量,當(dāng)輸入include=['O']時,會計算離散型變量的統(tǒng)計特征,當(dāng)參數(shù)是‘a(chǎn)ll’的時候會把數(shù)值型和離散型特征的統(tǒng)計量都進行顯示。exclude:該參數(shù)可以指定在統(tǒng)計的時候不統(tǒng)計哪些列,默認不丟棄任何列。datetime_is_numeric:一個布爾類型的值,表明是否將datetime類型視為數(shù)字。這會影響該列計算的統(tǒng)計信息。2.1統(tǒng)計特性分析115
示例代碼段:importpandasaspddf=pd.DataFrame({'categorical':pd.Categorical(['d','e','f']),'numeric':[1,2,3],'object':['a','b','c']})df.describe()#描述一個DataFrame。默認情況下,僅返回數(shù)字字段
df.describe(include=‘a(chǎn)ll’)#描述DataFrame數(shù)據(jù)類型的所有列2.2數(shù)據(jù)質(zhì)量分析1161.缺失值分析
數(shù)據(jù)的缺失主要包括記錄的缺失和記錄中某個字段信息的缺失,兩者都會造成分析結(jié)果的不準確性(1)缺失值產(chǎn)生的原因
缺失值產(chǎn)生的原因主要包括:部分信息暫時無法獲取,或者獲取信息的代價太大;部分信息由于數(shù)據(jù)采集設(shè)備故障、存儲介質(zhì)故障或者傳輸故障等原因被遺漏或者丟失;某些對象的該屬性值并不存在,從而造成缺失值的產(chǎn)生。2.2數(shù)據(jù)質(zhì)量分析117(2)缺失值的影響
缺失值產(chǎn)生的影響主要有:機器學(xué)習(xí)建模將丟失大量的有用信息,模型中蘊含的規(guī)律更難把握,機器學(xué)習(xí)中所表現(xiàn)出的不確定性更加顯著。除此之外,包含空值的數(shù)據(jù)會使建模過程陷入混亂,導(dǎo)致不可靠的輸出。(3)缺失值的分析
雖然缺失值的影響很深遠,但是使用簡單的統(tǒng)計分析,就可以得到缺失值的相關(guān)屬性,即缺失屬性數(shù)、缺失數(shù)以及缺失率等。2.2數(shù)據(jù)質(zhì)量分析1182.異常值分析
異常值分析是檢驗是否有錄入錯誤以及是否含有不合常理的數(shù)據(jù)。忽視異常值的存在是一個十分危險的行為,不加剔除地將異常值包括到數(shù)據(jù)的計算分析過程中,對結(jié)果會產(chǎn)生不良影響。(1)簡單統(tǒng)計量分析
通過上一小節(jié)介紹的數(shù)據(jù)統(tǒng)計特性分析能發(fā)現(xiàn)一些簡單的數(shù)據(jù)異常值。比如,可以通過某個變量的最大值和最小值來判斷這個變量的取值是否超出合理的范圍,如用戶年齡為2020歲,則該變量的取值就存在異常。2.2數(shù)據(jù)質(zhì)量分析119
2.2數(shù)據(jù)質(zhì)量分析120
(2)箱型圖分布2.2數(shù)據(jù)質(zhì)量分析1213.一致性分析
數(shù)據(jù)不一致性是指數(shù)據(jù)的矛盾性、不相容性。直接對不一致性的數(shù)據(jù)進行學(xué)習(xí),可能會產(chǎn)生與實際相違背的學(xué)習(xí)結(jié)果。
數(shù)據(jù)分析過程中,不一致數(shù)據(jù)的產(chǎn)生主要發(fā)生在數(shù)據(jù)集成的過程中,這可能是由于被用于分析的數(shù)據(jù)是來自不同的數(shù)據(jù)源、對于重復(fù)存放的數(shù)據(jù)未能進行一致性更新造成的。例如:兩張表中都存儲了用戶的電話號碼,但是在用戶的電話號碼發(fā)生改變之時只更新了一張表中的數(shù)據(jù),那么兩張表中就有了不一致的數(shù)據(jù),這樣在數(shù)據(jù)建模過程中會導(dǎo)致學(xué)習(xí)出現(xiàn)誤差。數(shù)據(jù)清理三3.1異常值處理17表3-1異常值處理方法
數(shù)據(jù)預(yù)處理時,異常值是否剔除,需視具體情況而定,因為有些異常值可能蘊含著某種有用的信息。異常值處理常用的方法如表3-1所示。異常值處理方法方法描述刪除直接將含有異常值的記錄刪除視為缺失值將異常值視為缺失值,利用缺失值處理的方法進行處理平均值修正可用前后兩個觀測值的平均值修正該異常值不處理直接在具有異常值的數(shù)據(jù)集上進行建模3.2缺失值處理18表3-2常用插補方法
缺失值處理的方法主要可以分為三類:刪除記錄、數(shù)據(jù)插補和不處理。其中,最常用的是數(shù)據(jù)插補方法。常用的插補方法如表3-2所示。插補方法方法描述均值/中位數(shù)/眾數(shù)插補用該屬性取值的平均數(shù)/中位數(shù)/眾數(shù)進行插補使用固定值將缺失的屬性值用一個常量替換最近臨插補在記錄中找到與缺失樣本最接近的樣本的屬性值插補回歸方法對帶有缺失值的變量,根據(jù)已有的數(shù)據(jù)和與其相關(guān)的其他變量(因變量)的數(shù)據(jù)建立擬合模型來預(yù)測缺失的屬性值插值法3.2缺失值處理19拉格朗日插值法介紹:
(1)求已知的過n個點的n-1次多項式:
3.2缺失值處理20解出拉格朗日插值多項式為:
3.2缺失值處理21拉格朗日插值法演示:
首先,構(gòu)造數(shù)據(jù),設(shè)置異常值,把銷量大于5000和銷量小于400的異常值替換為None,最后,定義拉格朗日插值函數(shù),對數(shù)據(jù)進行插值,實現(xiàn)代碼如下所示:importpandasaspd#導(dǎo)入數(shù)據(jù)分析庫Pandasfromerpolateimportlagrange#導(dǎo)入拉格朗日插值函數(shù)
inputfile='.../data/catering_sale.xls'#銷量數(shù)據(jù)路徑outputfile='.../tmp/sales.xls'#輸出數(shù)據(jù)路徑
data=pd.read_excel(inputfile)#讀入數(shù)據(jù)#過濾異常值,將其變?yōu)榭罩礵ata[u'銷量'][(data[u'銷量']<400)|(data[u'銷量']>5000)]=None3.2缺失值處理21#s為列向量,n為被插值的位置,k為取前后的數(shù)據(jù)個數(shù),默認為5defployinterp_column(s,n,k=5):ifn<k:y=s[list(range(n+1,n+1+k))]else:y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取數(shù)y=y[y.notnull()]#剔除空值returnlagrange(y.index,list(y))(n)#插值并返回插值結(jié)果
#逐個元素判斷是否需要插值foriindata.columns:forjinrange(len(data)):if(data[i].isnull())[j]:#如果為空即插值data[i][j]=ployinterp_column(data[i],j)
data.to_excel(outputfile)#輸出結(jié)果,寫入文件
利用拉格朗日插值對2015/2/21日和2015/2/14日的數(shù)據(jù)進行插補,結(jié)果是4275.255和4156.86數(shù)據(jù)集成四4數(shù)據(jù)集成130
人們?nèi)粘J褂玫臄?shù)據(jù)來源于各種渠道,數(shù)據(jù)集成就是將多個文件或者多個數(shù)據(jù)源中的異構(gòu)數(shù)據(jù)進行合并,然后存放在一個統(tǒng)一的數(shù)據(jù)庫中進行存儲。在數(shù)據(jù)集成過程中,來自多個數(shù)據(jù)源的現(xiàn)實世界實體的表達形式有的是不一樣的,有可能是不匹配的,要考慮實體識別問題的屬性冗余問題,從而將原始數(shù)據(jù)在最底層上加以轉(zhuǎn)換、提煉和集成。4.1實體識別131
實體識別是指從不同數(shù)據(jù)源識別出現(xiàn)實世界的實體,任務(wù)是統(tǒng)一不同數(shù)據(jù)源的矛盾之處。實體識別中常常存在的問題有以下三種。(1)同名異義兩個數(shù)據(jù)源中同名的屬性描述的不是同一個意思。(2)異名同義兩個數(shù)據(jù)源中同一個屬性有兩個不同的名字。(3)單位不統(tǒng)一描述同一實體分別使用不同的單位。實體識別過程中,我們需要對同名異義、異名同義以及單位不統(tǒng)一的情況進行準確識別4.1冗余屬性識別132冗余屬性是指數(shù)據(jù)中存在冗余的情況,一般分為以下兩種情況:(1)同一屬性多次出現(xiàn)
不同的兩個數(shù)據(jù)源中,同一個屬性在兩個數(shù)據(jù)源中都有記錄,當(dāng)對數(shù)據(jù)源進行集成的時候,若不進行處理,新數(shù)據(jù)集中同一屬性就多次出現(xiàn),導(dǎo)致我們需要處理大量的重復(fù)數(shù)據(jù)。(2)同一屬性命名不一致
在實體識別中所提到的異名同義的情況下,若不對數(shù)據(jù)進行處理,新數(shù)據(jù)集中同一屬性多次出現(xiàn),不僅會導(dǎo)致我們處理的數(shù)據(jù)量增大,還會影響我們模型的建立,從而導(dǎo)致輸出結(jié)果不準確。
數(shù)據(jù)變換五5數(shù)據(jù)變換134
數(shù)據(jù)變換是指將數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一的適合機器學(xué)習(xí)的形式。比如將連續(xù)的氣溫數(shù)值變?yōu)楦?、中、低這樣的離散形式,或?qū)⒆址枋鲎優(yōu)殡x散數(shù)字等。5.1簡單函數(shù)變換135
簡單函數(shù)變換是指對采集的原始數(shù)據(jù)使用各種簡單數(shù)學(xué)函數(shù)進行變換,常見的函數(shù)包括平方、開方、取對數(shù)、差分運算等。簡單的函數(shù)變換常用來將不具有正態(tài)分布的數(shù)據(jù)變換為具有正態(tài)分布的數(shù)據(jù)。在時間序列分析中,有時簡單的差分運算就能將序列轉(zhuǎn)換成平穩(wěn)序列。如果數(shù)據(jù)較大,可以取對數(shù)或者開方將數(shù)據(jù)進行壓縮,從而減小數(shù)據(jù)的處理量。5.2歸一化136
缺陷:當(dāng)有新數(shù)據(jù)加入時,可能導(dǎo)致和的變化。5.2歸一化137
5.2歸一化138
#-*-coding:utf-8-*-#數(shù)據(jù)規(guī)范化importpandasaspdimportnumpyasnp
datafile='../data/normalization_data.xls'#參數(shù)初始化data=pd.read_excel(datafile,header=None)#讀取數(shù)據(jù)
(data-data.min())/(data.max()-data.min())#最小-最大規(guī)范化(data-data.mean())/data.std()#零-均值規(guī)范化data/10**np.ceil(np.log10(data.abs().max()))#小數(shù)定標(biāo)規(guī)范化5.3連續(xù)屬性離散化139
數(shù)據(jù)離散化本質(zhì)上是將數(shù)據(jù)離散空間劃分為若干個區(qū)間,最后用不同的符號或者整數(shù)值代表每個子區(qū)間中的數(shù)據(jù)。離散化涉及兩個子任務(wù):確定分類和將連續(xù)屬性值映射到這個分類之中。(1)等寬法:根據(jù)需要,首先將數(shù)據(jù)劃分為具有相同寬度的區(qū)間,區(qū)間數(shù)據(jù)事先制定,然后將數(shù)據(jù)按照其值分配到不同區(qū)間中,每個區(qū)間用一個數(shù)據(jù)值表示。(2)等頻法:這種方法也是需要先把數(shù)據(jù)分為若干個區(qū)間,然后將數(shù)據(jù)按照其值分配到不同區(qū)間中,但是和等寬法不同的是,每個區(qū)間的數(shù)據(jù)個數(shù)是相等的。(3)基于聚類分析的方法:這種方法是指將物理或者抽象對象集合進行分組,再來分析由類似的對象組成的多個類,保證類內(nèi)相似性大,類間相似性小。聚類分析方法的典型算法包括K-Means(也叫K-均值)算法、K-中心點算法,其中最常用的算法就是K-Means算法。5.3連續(xù)屬性離散化140K-Means算法
對于K-Means算法,首先,從數(shù)據(jù)集中隨機找出K個數(shù)據(jù)作為K個聚類中心;其次,根據(jù)其他數(shù)據(jù)相對于這些中心的歐式距離、馬氏距離等,對所有的對象歸類,如數(shù)據(jù)x距某個中心最近,則將x規(guī)劃到該中心所代表的類中;最后,重新計算各個區(qū)間的中心,并利用新的中心重新聚類所有樣本。逐步循環(huán),直到所有區(qū)間的中心不再隨算法循環(huán)而變化。5.3連續(xù)屬性離散化141#-*-coding:utf-8-*-#數(shù)據(jù)規(guī)范化importpandasaspdfromsklearn.clusterimportKMeans#引入KMeans
datafile='../data/discretization_data.xls'#文件路徑data=pd.read_excel(datafile)#讀取數(shù)據(jù)data=data[u'肝氣郁結(jié)證型系數(shù)'].copy()k=4
d1=pd.cut(data,k,labels=range(k))#等寬離散化,各個類比依次命名為0,1,2,3#等頻率離散化w=[1.0*i/kforiinrange(k+1)]w=data.describe(percentiles=w)[4:4+k+1]#使用describe函數(shù)自動計算分位數(shù)w[0]=w[0]*(1-1e-10)d2=pd.cut(data,w,labels=range(k))5.3連續(xù)屬性離散化142#建立模型,n_jobs是并行數(shù),一般等于CPU數(shù)較好kmodel=KMeans(n_clusters=k,n_jobs=4)kmodel.fit(data.values.reshape((len(data),1)))#訓(xùn)練模型#輸出聚類中心,并且排序(默認是隨機序的)c=pd.DataFrame(kmodel.cluster_centers_).sort_values(0)w=c.rolling(2).mean().iloc[1:]#相鄰兩項求中點,作為邊界點w=[0]+list(w[0])+[data.max()]#把首末邊界點加上d3=pd.cut(data,w,labels=range(k))
defcluster_plot(d,k):#自定義作圖函數(shù)來顯示聚類結(jié)果importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標(biāo)簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號
plt.figure(figsize=(8,3))forjinrange(0,k):plt.plot(data[d==j],[jforiind[d==j]],'o')
plt.ylim(-0.5,k-0.5)returnpltcluster_plot(d1,k).show() #圖像顯示cluster_plot(d2,k).show()cluster_plot(d3,k).show()
數(shù)據(jù)規(guī)約六6數(shù)據(jù)規(guī)約144
在大數(shù)據(jù)集上進行復(fù)雜的機器學(xué)習(xí)需要很長的時間,數(shù)據(jù)規(guī)約是生成更小但保持數(shù)據(jù)完整性的新數(shù)據(jù)集,在規(guī)約后的數(shù)據(jù)集上進行機器學(xué)習(xí)將更有效率。數(shù)據(jù)規(guī)約可以降低無效、錯誤數(shù)據(jù)對建模的影響,提高建模的準確性;處理少量且具有代表性的數(shù)據(jù),大幅縮減機器學(xué)習(xí)所需要的時間;另外還可以降低儲存數(shù)據(jù)的成本。6.1屬性規(guī)約145屬性規(guī)約方法方法描述合并屬性將一些舊屬性合為新屬性逐步向前選擇從一個空屬性集開始,每次從原來屬性集合中選擇一個當(dāng)前最優(yōu)地屬性添加到當(dāng)前屬性子集中。直到無法選擇出最優(yōu)屬性或滿足一定閾值約束為之逐步向后選擇從一個全屬性集開始,每次從當(dāng)前屬性子集中選擇一個當(dāng)前最差的屬性并將其從當(dāng)前屬性子集中消去。直到無法選擇出最差屬性為之或滿足一定閾值的約束法為止決策樹歸納利用決策樹的歸納法對初始數(shù)據(jù)進行分類歸納學(xué)習(xí),獲得一個初始決策樹,所有沒有出現(xiàn)在這個決策樹上的屬性均可認為是無關(guān)屬性,將這些屬性從初始化集合中刪除,就可以獲得一個較優(yōu)的屬性子集主成分分析用較少的變量去解釋原始數(shù)據(jù)中的大部分變量,即將許多相關(guān)性很高的變量轉(zhuǎn)換成彼此相互獨立或不相關(guān)的變量。6.2數(shù)值規(guī)約146
數(shù)值規(guī)約也稱為樣本規(guī)約,是指通過選擇替代的、較小的數(shù)據(jù)來減少數(shù)據(jù)子集。在確定樣本規(guī)約子集時候需要考慮計算成本、存儲要求、估計量的精度及其他一些與算法和數(shù)據(jù)特性有關(guān)的因素。有參數(shù)方法無參數(shù)方法有參數(shù)方法是使用一個參數(shù)模型來評估數(shù)據(jù),最后只需要存儲該模型的參數(shù)即可,而不需要存放實際的數(shù)據(jù)。常用的模型包括回歸模型和對數(shù)線性模型。通常使用直方圖、聚類、抽樣等方法。數(shù)值規(guī)約Python的主要數(shù)據(jù)預(yù)處理函數(shù)七7Python的主要數(shù)據(jù)預(yù)處理函數(shù)148函數(shù)名所屬庫函數(shù)功能head()pandas顯示數(shù)據(jù)集前5行info()numpy查看各個字段的信息shape()numpy查看數(shù)據(jù)集行列分布,幾行幾列describe()pandas查看數(shù)據(jù)的大體情況isnull()pandas元素級別判斷,判斷出是否有缺失數(shù)據(jù)notnull()pandas判斷是否為空值dropna()pandas去掉為空值或者NA的元素fillnapandas將空值或者NA的元素填充為0concatpandas一般將訓(xùn)練數(shù)據(jù)與測試數(shù)據(jù)連接起來PCAScikit-learn對指標(biāo)變量矩陣進行主成分分析
思考題149思考題2019年新型冠狀病毒引發(fā)的疫情時時刻刻牽動著國人的心,請讀者利用附件:NovelCoronavirus(2019-nCoV)Cases.xlsx結(jié)合本章所學(xué)的知識對獲取的數(shù)據(jù)完成數(shù)據(jù)預(yù)處理。2020年科比墜機,偶像逝世,使得多少球迷心碎,現(xiàn)提供科比籃球生涯中的精彩瞬間數(shù)據(jù)集:Kobe_data.csv,請讀者結(jié)合本章所學(xué)知識對數(shù)據(jù)完成數(shù)據(jù)預(yù)處理。
思考題150思考題提示:數(shù)據(jù)來源1、NovelCoronavirus(2019-nCoV)Cases.xlsx數(shù)據(jù)集:/BlankerL/DXY-2019-nCoV-Data2、Kobe_data.csv數(shù)據(jù)集:/tatsumiw/Kobe_analysis
謝謝!第一章概論西華大學(xué)機器學(xué)習(xí)第四章K近鄰算法XXX學(xué)校XXX2022目錄Contents模型介紹案例:約會網(wǎng)站配對案例:手寫數(shù)字識別案例:鳶尾花品種識別
知識引入154
本章知識圖譜155模型介紹一1.1算法概述157K近鄰算法(K-NearestNeighbor,簡稱KNN),是一種根據(jù)不同樣本的特征值之間的距離進行分類的算法。KNN中可以根據(jù)具體的情況選擇不同的“距離”衡量方式。它的基本思想是:如果一個樣本在特征空間中的K個最鄰近樣本中的大多數(shù)屬于某一個類別,那么該樣本也屬于這個類別。用一句話來總結(jié)KNN算法就是:近朱者赤,近墨者黑。1.1算法概述158KNN的優(yōu)點包括:算法簡單,易于理解,易于實現(xiàn),無需參數(shù)估計,無需訓(xùn)練。精度高,對異常值不敏感(個別噪音數(shù)據(jù)對結(jié)果的影響不是很大)。適合對稀有事件進行分類。KNN的缺點包括:對測試樣本分類時的計算量大,空間開銷大??山忉屝圆睿瑹o法給出像后續(xù)章節(jié)將要介紹的決策樹模型那樣的規(guī)則。當(dāng)樣本不平衡時,不能準確的判別分類,這是KNN最大的缺點。例如一個類的樣本容量很大,而其他類樣本容量很小。這有可能導(dǎo)致當(dāng)輸入一個新樣本時,新樣本的K個鄰居中始終都是大容量類的樣本占多數(shù),從而導(dǎo)致錯誤分類??梢圆捎眉訖?quán)值的方法(和該樣本距離小的鄰居權(quán)值大)來改進這個問題1.2算法基本原理159KNN算法的三個基本要素是K值的選擇、距離度量以及分類決策規(guī)則。KNN算法的具體實現(xiàn)過程如下:訓(xùn)練樣本集(包含每條樣本數(shù)據(jù)與分類的對應(yīng)關(guān)系)輸入無標(biāo)簽的數(shù)據(jù)新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應(yīng)特征進行比較(1)計算距離(2)排序(3)取K個新數(shù)據(jù)標(biāo)簽(K個數(shù)據(jù)中出現(xiàn)最多的分類標(biāo)簽)1.2算法基本原理160
1.2算法基本原理161K值小的時候近似誤差小,估計誤差大。K值大的時候近似誤差大,估計誤差小。1.3算法實現(xiàn)代碼162機器學(xué)習(xí)算法解決實際問題的步驟:收集數(shù)據(jù)分析數(shù)據(jù)數(shù)據(jù)預(yù)處理應(yīng)用模型測試算法構(gòu)建模型1.3算法實現(xiàn)代碼163偽代碼:對于每一個在數(shù)據(jù)集中的數(shù)據(jù)點:計算目標(biāo)的數(shù)據(jù)點(需要分類的數(shù)據(jù)點)與該數(shù)據(jù)點的距離將距離排序:從小到大選取前K個最短距離選取這K個中最多的分類類別返回該類別來作為目標(biāo)數(shù)據(jù)點的預(yù)測值1.3算法實現(xiàn)代碼164直接利用第三方庫的方法來實現(xiàn)KNN算法KNeighborsClassifier使用很簡單,核心操作包括三步:(1)創(chuàng)建KNeighborsClassifier對象,并進行初始化。該類的構(gòu)造函數(shù)定義如下:sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,weights=’uniform’,algorithm=’auto’,leaf_size=30,p=2,metric=’minkowski’,metric_params=None,n_jobs=None,**kwargs)主要參數(shù):n_neighbors:int型,可選,缺省值是5,就是KNN中的近鄰數(shù)量k值。1.3算法實現(xiàn)代碼165weights:計算距離時使用的權(quán)重,缺省值是“uniform”,表示平等權(quán)重。也可以取值“distance”,則表示按照距離的遠近設(shè)置不同權(quán)重。還可以自主設(shè)計加權(quán)方式,并以函數(shù)形式調(diào)用。metric:距離的計算,缺省值是“minkowski”。當(dāng)p=2,metric=’minkowski’時,使用的是歐式距離。p=1,metric=’minkowski’時為曼哈頓距離。(2)調(diào)用fit方法,對數(shù)據(jù)集進行訓(xùn)練。函數(shù)格式:fit(X,y)說明:以X為特征向量,以y為標(biāo)簽值對模型進行訓(xùn)練。(3)調(diào)用predict函數(shù),對測試集進行預(yù)測。函數(shù)格式:predict(X)說明:根據(jù)給定的數(shù)據(jù),預(yù)測其所屬的類別標(biāo)簽。案例:約會網(wǎng)站配對二2.1問題介紹167案例背景:某約會網(wǎng)站的會員A希望通過該網(wǎng)站找到自己喜歡的人,他將自己心目中的會員分成三類:不喜歡的人(樣本分類1)、魅力一般的人(樣本分類2)、極具魅力的人(樣本分類3)。會員A希望在工作日的時候與魅力一般的人約會,在周末與極具魅力的人約會,而對于不喜歡的人直接排除掉。案例要求:他希望能通過他收集到的信息對會員進行自動分類,分類依據(jù)有:玩視頻游戲所耗時間百分比、每年獲得的飛行常客里程數(shù)、每周消費的冰淇淋公升數(shù)。2.2數(shù)據(jù)準備1681.數(shù)據(jù)準備
首先需要將數(shù)據(jù)從文本文件中讀出,定義解析函數(shù)file2matrix,其輸入的參數(shù)為文件地址的字符串,輸出為樣本矩陣和分類標(biāo)簽向量。
1)收集數(shù)據(jù)2.2數(shù)據(jù)準備1691.數(shù)據(jù)準備2)分析數(shù)據(jù)
將收集的數(shù)據(jù)進行分析,調(diào)用方法讀取數(shù)據(jù),繪制散點圖觀察數(shù)據(jù)。
2.2數(shù)據(jù)準備1701.數(shù)據(jù)準備3)處理數(shù)據(jù)
從表4-1的數(shù)據(jù)中可看出“每年獲得的飛機??屠锍虜?shù)”數(shù)值較大,對結(jié)果的影響程度遠大于其他兩個特征。但我們認為三個特征值權(quán)重相同。為了降低極大數(shù)值對結(jié)果的影響,這里使用歸一化進行數(shù)據(jù)處理。
2.3算法實現(xiàn)171
其輸入?yún)?shù)包括被預(yù)測的對象、原始數(shù)據(jù)集、原始標(biāo)簽和臨近點個數(shù),輸出參數(shù)為被預(yù)測對象所屬的分類標(biāo)簽值,其中距離采用的是歐氏距離。4)構(gòu)建模型2.4算法測試1725)測試算法
機器學(xué)習(xí)算法的一個重要工作是測評算法的正確率。通常我們會將90%的數(shù)據(jù)作為訓(xùn)練樣本來使用,剩余的10%數(shù)據(jù)作為測試集,用來測試算法的性能。本節(jié)我們使用錯誤率來檢測算法性能。2.5算法應(yīng)用1736)模型應(yīng)用
通過上述函數(shù),我們已經(jīng)實現(xiàn)了KNN算法相關(guān)所有的功能,接下來就可以通過輸入新的會員信息,通過上述模型來判斷該會員是否是自己喜歡的類型了。案例:手寫數(shù)字識別三3.1問題介紹案例背景:案例的數(shù)據(jù)集是人工手寫的0-9的數(shù)字圖像,每個圖像為32*32像素。案例要求:實現(xiàn)自動識別給定的手寫數(shù)字圖像對應(yīng)的數(shù)字是幾。3.2數(shù)據(jù)準備首先我們要將圖像數(shù)據(jù)處理為一個向量,將32*32的二進制圖像信息轉(zhuǎn)化為1*1024的向量。3.3算法實現(xiàn)定義分類算法導(dǎo)入訓(xùn)練數(shù)據(jù)處理訓(xùn)練數(shù)據(jù)運用算法開始測試處理測試數(shù)據(jù)導(dǎo)入測試數(shù)據(jù)案例:鳶尾花品種識別四4.1問題介紹179案例背景:案例的數(shù)據(jù)集包含150個數(shù)據(jù)集,分為3類,每類50個數(shù)據(jù),每個數(shù)據(jù)包含4個屬性。案例要求:通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預(yù)測鳶尾花卉屬于(Setosa-山鳶尾,Versicolour-雜色鳶尾,Virginica-維吉尼亞鳶尾)三個種類中的哪一類。4.2數(shù)據(jù)準備1
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專用辦公學(xué)習(xí)文具用品批量采購協(xié)議版B版
- 2025年度二手房產(chǎn)權(quán)過戶服務(wù)合同4篇
- 2025年度生態(tài)農(nóng)業(yè)園區(qū)場地租用及農(nóng)產(chǎn)品銷售服務(wù)合同4篇
- 專業(yè)布料購入?yún)f(xié)議2024版格式
- 2025年度拆遷施工工程監(jiān)理合同規(guī)范文本4篇
- 2025年度新型建筑材料采購合作服務(wù)協(xié)議4篇
- 二零二五年度綠色能源廠房產(chǎn)權(quán)移交協(xié)議3篇
- 2025年度出境旅游產(chǎn)品研發(fā)與推廣合作協(xié)議2篇
- 2025年度新型材料研發(fā)廠房租賃及成果轉(zhuǎn)化合同2篇
- 2025年度智能倉儲場地租賃及安全防護協(xié)議范本4篇
- GB/T 16895.3-2024低壓電氣裝置第5-54部分:電氣設(shè)備的選擇和安裝接地配置和保護導(dǎo)體
- 2025湖北襄陽市12345政府熱線話務(wù)員招聘5人高頻重點提升(共500題)附帶答案詳解
- 計劃合同部部長述職報告范文
- 2025年河北省職業(yè)院校技能大賽智能節(jié)水系統(tǒng)設(shè)計與安裝(高職組)考試題庫(含答案)
- 人教版高一地理必修一期末試卷
- 2024年下半年鄂州市城市發(fā)展投資控股集團限公司社會招聘【27人】易考易錯模擬試題(共500題)試卷后附參考答案
- GB/T 29498-2024木門窗通用技術(shù)要求
- 《職業(yè)院校與本科高校對口貫通分段培養(yǎng)協(xié)議書》
- GJB9001C質(zhì)量管理體系要求-培訓(xùn)專題培訓(xùn)課件
- 人教版(2024)英語七年級上冊單詞表
- 二手車車主寄售協(xié)議書范文范本
評論
0/150
提交評論