版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章概論西華大學機器學習第一章機器學習概述XXX學校XXX2022目錄Contents什么是機器學習機器學習的應用機器學習研究內容問題的常規(guī)處理方法各概念間關系
本章知識圖譜3什么是機器學習一1.1什么是機器學習5故事一:瑞雪兆豐年第一年冬天:下大雪第二年收獲季節(jié):大豐收冬天:沒怎么下雪第三年收獲季節(jié):顆粒無收冬天:下大雪第四年收獲季節(jié):大豐收冬天:下大雪現(xiàn)象1:頭一年瑞雪現(xiàn)象2:來年豐收現(xiàn)象間的規(guī)律1.1什么是機器學習6故事二:挑芒果顏色大小產地形狀物理屬性:品質:甜多汁1.1什么是機器學習7故事二:挑芒果if(顏色是嫩黃and尺寸是大的and購自最喜歡的小販):芒果是甜的if(軟的):芒果是多汁的……計算機程序:1.1什么是機器學習8機器學習過程人類的歸納過程機器學習的應用二2.1圖像和計算機視覺101、ImageNet競賽和WebVision競賽2、物體識別與目標跟蹤3、輔助成像和藝術創(chuàng)作2.2日常生活及消費112.3金融領域12分析股票信用評價保險行業(yè)欺詐檢測房地產行業(yè)2.4醫(yī)療領域13輔助診斷臨床實驗新藥研發(fā)個性化用藥2.5自然語言處理14自然語言處理的研究內容非常廣泛,主要包括以下幾個方面:句法語義分析信息提取文本挖掘機器翻譯信息檢索問答系統(tǒng)對話系統(tǒng)文本自動摘要
自然語言生成2.6安全和異常行為檢測152.7工業(yè)和商業(yè)領域162.8娛樂領域17智能音響視頻網(wǎng)站動畫游戲機器學習主要研究內容三3.1機器學習的主要研究內容
機器學習研究的是從已有數(shù)據(jù)中通過選取合適的算法進行學習,自動歸納邏輯或規(guī)則,并根據(jù)這個歸納的結果對新數(shù)據(jù)進行預測。機器學習包含了三個基本的要素,即數(shù)據(jù)、算法和模型。
機器學習包含了監(jiān)督學習、非監(jiān)督學習和強化學習幾種類別。3.1機器學習的主要研究內容監(jiān)督學習(SupervisedLearning),又稱為有監(jiān)督學習,它是從有標記的數(shù)據(jù)中進行模型學習,然后根據(jù)這個模型對未知樣本進行預測。算法模型輸入輸出數(shù)據(jù)中提取的樣本特征樣本對應標簽3.1機器學習的主要研究內容非監(jiān)督學習(UnsupervisedLearning),又稱為無監(jiān)督學習,它和有監(jiān)督學習的最大區(qū)別在于輸入樣本沒有經過標記,需要自動從樣本中進行學習。非監(jiān)督學習不局限于解決有正確答案的問題,所以目標可以不必十分明確。它常常被用于視頻或者音頻內容分析、社交網(wǎng)絡分析等場合。3.1機器學習的主要研究內容半監(jiān)督學習(Semi-SupervisedLearning),是一種介于監(jiān)督學習和非監(jiān)督學習當中的機器學習方法。半監(jiān)督學習使用大量的未標記數(shù)據(jù),同時使用一部分標記數(shù)據(jù)來進行學習。標記數(shù)據(jù)監(jiān)督學習方法未標記的數(shù)據(jù)3.1機器學習的主要研究內容強化學習(ReinforcementLearning),又稱再勵學習、評價學習,是一種重要的機器學習方法,在智能控制機器人及分析預測等領域有許多應用。強化學習也是使用未標記的數(shù)據(jù),但是可以通過某種方法(通常是獎懲函數(shù))知道結果離正確答案越來越近還是越來越遠。機器學習問題的常規(guī)處理方法四4.1開發(fā)機器學習應用的一般步驟254.2如何選擇合適的算法264.3使用Python開發(fā)機器學習應用27
Python有2.X和3.X兩個大的版本,其代碼不完全兼容,因此在選擇開發(fā)環(huán)境和版本的時候,會對初學者造成一定的困擾。本書中的案例代碼都是在3.X下實現(xiàn)并調試通過的,本書將在附錄中詳細介紹環(huán)境的搭建問題。建議:按附錄A第2種方法安裝4.4機器學習模型的評價281.分類任務
分類是最常見的機器學習任務,針對分類任務的常見的評價指標包括準確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1分數(shù)(F1-score)、ROC曲線和AUC曲線等。
首先介紹混淆矩陣的概念。如果用的是二分類的模型,那么把預測情況與實際情況的所有結果兩兩混合,結果就會出現(xiàn)以下4種情況,就組成了混淆矩陣。4.4機器學習模型的評價291.分類任務
實際結果陽性(1)陰性(0)預測結果陽性(1)TP(真陽性)FP(假陽性)陰性(0)FN(假陰性)TN(真陰性)4.4機器學習模型的評價301.分類任務
記N為總體,即N=TP+FP+FN+TN(1)準確率
準確率的定義為預測正確的結果占總樣本數(shù)的百分比,用上述概念來表示則有:4.4機器學習模型的評價311.分類任務
記N為總體,即N=TP+FP+FN+TN(2)精確率
精確率,又叫精準率或者查準率,它是針對預測結果而言的,其含義是在所有被預測為正的樣本中實際為正的樣本的概率,意思就是在預測為正樣本的結果中,我們有多少把握可以預測正確,其計算公式為:4.4機器學習模型的評價321.分類任務
記N為總體,即N=TP+FP+FN+TN(3)召回率
召回率,又叫查全率,它是針對原樣本而言的,它的含義是在實際為正的樣本中被預測為正樣本的概率,其計算公式為:4.4機器學習模型的評價331.分類任務
記N為總體,即N=TP+FP+FN+TN(4)F1分數(shù)F1分數(shù)是精確率和召回率之間的調和平均值,其范圍是[0,1],具體的計算公式如下:4.4機器學習模型的評價342.回歸任務
在回歸問題中,預測值通常為連續(xù)值,其性能不能用分類問題的評價指標來評價,通常用均方誤差(MSE)、均方根誤差(RMSE)和平均絕對誤差(MAE)等來評價回歸模型的性能。其中均方誤差表示所有樣本的樣本誤差的平方的均值,均方根誤差即對于均方誤差開方,平均絕對誤差表示所有樣本的樣本誤差的絕對值的均值。MSE、RMSE和MAE越接近0,模型越準確。假定有m和樣本,h(xi)表示第i個樣本的預測值,yi表示第i個樣本的實際值,那么上述三個指標的計算公式如下:4.4機器學習模型的評價352.回歸任務
(1)均方誤差(MSE)
(2)均方根誤差(RMSE)
4.4機器學習模型的評價362.回歸任務
(3)平均絕對誤差(MAE)
4.4機器學習模型的評價373.聚類任務
聚類模型的評價方式大體上可分為外部指標和內部指標。(1)外部指標
1)杰卡德相似系數(shù)(JaccardSimilarityCoefficient)
Jaccard系數(shù)為集合之間的交集與它們的并集的比值,取值在[0,1]之間,值越大相似度越高。Jaccard距離用于描述集合之間的不相似度,距離越大相似度越低。計算公式如下:4.4機器學習模型的評價383.聚類任務
聚類模型的評價方式大體上可分為外部指標和內部指標。(1)外部指標2)皮爾遜相關系數(shù)(PearsonCorrelationCoefficient)
衡量兩個正態(tài)連續(xù)變量之間線性關聯(lián)性的程度,取值在[-1,1]之間,越接近1或-1,相關度越強,計算公式如下,其中Cov(X,Y)表示X和Y的協(xié)方差,D(X)表示X的方差。4.4機器學習模型的評價393.聚類任務
聚類模型的評價方式大體上可分為外部指標和內部指標。(1)內部指標
內部指標是無監(jiān)督的,不需要基準數(shù)據(jù)集,也不需要借助于外部參考模型,僅利用樣本數(shù)據(jù)集中樣本點與聚類中心之間的距離來衡量聚類結果的優(yōu)劣。內部指標主要有:緊密度(Compactness)分割度(Seperation)戴維森堡丁指數(shù)(Davies-bouldinIndex,DBI)鄧恩指數(shù)(DunnValidityIndex,DVI)輪廓系數(shù)(SilhouetteCoefficient)
機器學習各基本概念關系五5.1機器學習各基本概念關系41各概念關系數(shù)據(jù)挖掘和機器學習關系
思考題42思考題什么是機器學習?機器學習可以完成哪些事情?機器學習的應用開發(fā)基本過程是怎樣的?機器學習和數(shù)據(jù)挖掘以及人工智能之間有什么關系?謝謝!第一章概論西華大學機器學習第二章Python機器學習基礎庫XXX學校XXX2022目錄ContentsNumpyPandasMatplotlibScipyScikit-LearnTensorFlow
本章知識圖譜46
Numpy一1Numpy庫48Numpy(NumericPython)庫是Python當中一個開源的數(shù)值計算擴展庫,它可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nestedliststructure)結構要高效得多(該結構也可以用來表示矩陣(matrix))。Numpy和稀疏矩陣運算包Scipy配合使用更加方便。Numpy提供了許多高級的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運算庫,多用于嚴格的數(shù)字處理,在很多大型金融公司業(yè)務中廣泛使用,一些核心的科學計算組織(如:LawrenceLivermore,NASA等)用其處理一些本來使用C++,F(xiàn)ortran或Matlab等完成的任務。1.1Numpy庫的安裝49Numpy庫在Windows下可以通過下面的步驟進行安裝:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:pipinstallnumpy1.2Numpy庫的導入50
首先,在使用Numpy庫之前,我們需要使用import語句引入該模塊,代碼如下所示:importnumpyasnp#導入numpy模塊并命名為np,方便后面調用
或者:fromnumpyimport*1.2Numpy庫的導入51import語句和from…import語句的區(qū)別:import…語句:直接導入一個模塊,同一模塊不管執(zhí)行多少次,import都只會被導入一次。from…import…語句:導入一個模塊中的一個函數(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關鍵字指定是否包括終值(默認設置包括終值),實現(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標準方法相同,代碼如下:a=np.arange(10)以下代碼可以實現(xiàn)對數(shù)組中部分連續(xù)元素的存取:a[3:5]1.7ufunc運算58ufunc是universalfunction的縮寫,是一種能對ndarray的每個元素進行操作的函數(shù)。它支持數(shù)組廣播、類型轉換和其他一些標準功能。也就是說,ufunc是函數(shù)的“矢量化”包裝器,它接受固定數(shù)量的特定輸入并生成固定數(shù)量的特定輸出。NumPy內置的許多ufunc函數(shù)是在C語言級別實現(xiàn)的,因此它們的計算速度非??臁1热鏽umpy.sin()的速度就比Python自帶的math.sin()的速度要快得多。1.8矩陣的運算59a=np.matrix(‘12;34’)b=a.T#返回矩陣a的轉置矩陣并存儲于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對象,讀者很容易混淆,一般情況下,不推薦在較復雜的程序中使用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引入了大量庫和一些標準的數(shù)據(jù)模型,提供了高效的操作大型數(shù)據(jù)集所需要的工具。Pandas也提供了大量可以快速便捷處理數(shù)據(jù)的函數(shù)和方法,是Python成為強大而高效的數(shù)據(jù)分析工具的重要因素之一。Pandas的基本數(shù)據(jù)結構是Series和DataFrame。其中Series稱為序列,用于產生一個一維數(shù)組,DataFrame用于產生二維數(shù)組,它的每一列都是一個Series。2.1Pandas庫的安裝63
在Windows下,Pandas庫可以通過啟動Anaconda下的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令完成安裝:pipinstallpandas2.2Pandas庫的導入64使用Pandas庫,首先需要使用import語句引入該模塊,代碼如下:importpandasaspd或者:frompandasimport*2.3Series65
Series是一維標記數(shù)組,可以存儲任意數(shù)據(jù)類型,如整型、字符串、浮點型和Python對象等,軸的標簽稱為索引(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是二維標記數(shù)據(jù)結構,其列可以是不同的數(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相似的命令API,十分適合交互式制圖。也可以方便地將Matplotlib作為繪圖控件,嵌入GUI應用程序中。3.1Matplotlip安裝
在Windows下,Matplotlib庫可以通過啟動Anaconda下的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令完成安裝:pipinstallmatplotlip3.2Matplotlip庫的導入70使用Matplotlib庫之前需要先使用import語句引入該模塊,代碼如下:importmatplotlipaspd或者:frommatplotlipimport*3.3基本繪圖plot命令Matplotlib庫中,最常使用的命令就是plot,常用的繪圖方法實現(xiàn)代碼如下:importmatplotlib.pyplotaspltimportnumpyasnp #導入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)") #設置x坐標名稱plt.ylabel("Volt") #設置y坐標名稱plt.title("FirstExample") #設置圖像標題plt.ylim(-1.2,1.2) #y坐標表示范圍plt.legend() #設置圖例plt.show() #圖像展示3.3基本繪圖plot命令3.3基本繪圖plot命令參數(shù)說明如下:(1)label:給所繪制的曲線標定一個名稱,此名稱在圖示(lengend)中顯示,只要在字符串前添加“$”,Matplotlib就會使用其內嵌的latex引擎繪制數(shù)學公式。(2)color:指定曲線的顏色。(3)linewidth:指定曲線的寬度。(4)xlabel:設置X軸的文字。(5)ylabel:設置Y軸的文字。(6)title:設置圖表標題。(7)ylim:設置Y軸的范圍,格式為[y的起點,y的終點]。(8)xlim:設置X軸的范圍,格式為[x的起點,x的終點]。(9)legend:顯示label中標記的圖示。3.3基本繪圖plot命令關于plot函數(shù)顏色參數(shù)說明如下:顏色標記顏色標記藍色b綠色G紅色r黃色Y青色c黑色K洋紅色m白色W3.3基本繪圖plot命令關于plot函數(shù)線型參數(shù)取值說明如下:參數(shù)描述參數(shù)描述‘-’實線‘-’或者’:’虛線‘-.’點畫線‘none’或者’’不畫3.4繪制多窗口圖形一個繪制對象(figure)可以包含多個軸(axis),在Matplotlib中用軸表示一個繪圖區(qū)域,可以將其理解為子圖??梢允褂胹ubplot函數(shù)快速繪制有多軸的圖表。實現(xiàn)代碼如下:importmatplotlib.pyplotasplt #導入matplotlib模塊繪制多窗口圖形plt.subplot(1,2,1) #繪制多軸圖例第一幅圖plt.plot(x,y,color="red",linewidth=2) #傳入?yún)?shù),設置顏色和線條寬度plt.xlabel("Time(s)") #設置x軸名稱plt.ylabel("Volt") #設置y軸名稱plt.title("FirstExample") #設置標題plt.ylim(-1.2,1.2) #設置表示范圍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時,要考慮兩個點的坐標:被注釋的地方,使用坐標xy=(x,y)給出;插入文本的地方,使用坐標xytext=(x,y)給出,實現(xiàn)代碼如下所示:importnumpyasnp #導入numpy模塊importmatplotlib.pyplotasplt #導入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 #導入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ù)學、科學及工程方面的常用軟件包,Scipy包含科學計算中常見問題的各個工具箱。Scipy函數(shù)庫在NumPy庫的基礎上增加了許多的數(shù)學、科學及工程計算中常用的庫函數(shù),如線性代數(shù)、常微分方程數(shù)值求解、信號處理、圖像處理、稀疏矩陣等。它通過有效地計算NumPy矩陣,來讓NumPy和Scipy協(xié)同工作。4.1ScipypipinstallscipyScipy庫在Windows下可以通過下面的步驟進行安裝:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:4.2Scipy庫的導入85使用Scipy庫之前需要先使用import語句引入該模塊,代碼如下:importscipyaspd或者:fromscipyimport*4.3最小二乘法
4.3最小二乘法4.3最小二乘法4.3非線性方程求解89Scipy的optimize庫中的fsolve函數(shù)可以用來對非線性方程組進行求解,它的基本調用形式:fsolve(func,x_0),其中func(x)是計算方程組的函數(shù),它的參數(shù)x是一個矢量,表示方程組的各個未知數(shù)的一組可能解,func(x)返回x帶入方程組之后得到的結果,x_0為未知數(shù)矢量的初始值。4.3非線性方程求解90Scikit-Learn五5Scikit-Learn92Scikit-learn項目最早由數(shù)據(jù)科學家DavidCournapeau在2007年發(fā)起,需要NumPy和Scipy等其他包的支持,是Python語言中專門針對機器學習應用而發(fā)展起來的一款開源的框架。Scikit-learn的基本功能主要被分為以下幾個部分:分類:是指識別給定對象的所述類別,屬于監(jiān)督學習的范疇,最常見的應用場景包括垃圾郵件檢測和圖像識別等,目前Scikit-learn已經實現(xiàn)的算法包括支持向量機(SVM)、K-近鄰、隨機森林、決策樹及多層感知器(MLP)神經網(wǎng)絡等?;貧w:是指預測與給定對象相關聯(lián)的連續(xù)值屬性,最常用的應用場景包括藥物反應和預測股票價格等,目前Scikit-learn已經實現(xiàn)的算法包括支持向量回歸(SVR)、嶺回歸、Lasso回歸、貝葉斯回歸等。5Scikit-Learn93聚類:是指自動識別具有相似屬性的給定對象,并將其分組為集合,屬于無監(jiān)督學習的范疇,最常見的應用場景包括顧客細分和實驗結果分組。目前Scikit-learn已經實現(xiàn)的算法包括K-均值聚類、均值偏移、分層聚類等。數(shù)據(jù)降維:是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特征選擇等降維技術來減少要考慮的隨機變量的個數(shù),其主要應用場景包括可視化處理和效率提升。模型選擇:是指對于給定參數(shù)和模型的比較、驗證和選擇,其主要目的是通過參數(shù)調整來提升精度,目前Scikit-learn已經實現(xiàn)的算法包括格點搜索、交叉驗證和各種針對預測誤差評估的度量函數(shù)5Scikit-Learn94數(shù)據(jù)預處理:是指數(shù)據(jù)的特征提取和歸一化,是機器學習過程中的第一個也是最重要的環(huán)節(jié)。這里歸一化是指將輸入數(shù)據(jù)轉換為具有零均值和單位權方差的新變量,特征提取是指將文本或圖像數(shù)據(jù)轉換為可用機器學習的數(shù)字變量。綜上所述,作為專門面向機器學習的Python開源框架,Scikit-learn可以在一定范圍內為開發(fā)者提供非常好的幫助,它內部實現(xiàn)了各種各樣成熟的算法,容易安裝和使用。5.1Scikit-Learn的安裝pipinstallScikit_LearnScikit-Learn庫在Windows下的具體安裝步驟如下:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:5.2Scikit-Learn的數(shù)據(jù)集96序號數(shù)據(jù)集名稱主要調用方式數(shù)據(jù)描述1鳶尾花數(shù)據(jù)集Load_iris()用于多分類任務的數(shù)據(jù)集2波士頓房價數(shù)據(jù)集Load_boston()經典的用于回歸任務的數(shù)據(jù)集3糖尿病數(shù)據(jù)集Load_diabetes()經典的用于回歸任務的數(shù)據(jù)集4手寫數(shù)字數(shù)據(jù)集Load_digits()用于多分類的任務的數(shù)據(jù)集5乳腺癌數(shù)據(jù)集Load_breast_cancer()簡單經典的用于二分類任務的數(shù)據(jù)集6體能訓練數(shù)據(jù)集Load_linnerud()經典的用于多變量回歸任務的數(shù)據(jù)集TensorFlow六6TensorFlowTensorFlow是一個深度學習庫,由Google開源,可以對定義在Tensor(張量)上的函數(shù)自動求導。Tensor意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算,TensorFlow即為張量從圖的一端流動到另一端。
要正常使用TensorFlow,必須了解兩個基本概念:Tensor和Flow,即張量和數(shù)據(jù)流圖.1.張量(Tensor)
張量是一種表示物理量的方式,這個方式就是用基向量與分量組合表示物理量(Combinationofbasisvectorandcomponent)。6TensorFlow標量,0個基向量:0-modetensor向量,1個基向量:1-modetensor矩陣,2個基向量:2-modetensor…張量可以表示為多維數(shù)組(atensorcanberepresentedasamultidimensionalarrayofnumbers)6TensorFlow2.數(shù)據(jù)流圖(DataFlowGraphs)
用TensorFlow進行機器學習模型計算的時候,通常包含兩個階段:
第一階段:“組裝”一個計算圖(Graph)。這個圖就描述了用于機器學
習的模型的結構。如果讀者熟悉以前微軟的DirectShow開發(fā),就能過很容易的理解,此處的Graph和DirectShow里的FilterGraphs有異曲同工之處。
第二階段:使用一個Session在圖中進行操作。6.1TensorFlow的安裝pipinstallTensorFlowTensorFlow庫在Windows下可以通過下面的步驟進行安裝:
啟動Anaconda下面的“AnacondaPrompt”或系統(tǒng)的“cmd”命令窗口,輸入如下命令即可完成安裝:6.2TensorFlow的使用首先導入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構建一個線性模型,實現(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的使用對構建的線性模型進行求解,設置損失函數(shù)、選擇梯度下降的方法以及迭代的目標,實現(xiàn)代碼如下:#設置損失函數(shù):誤差的均方差loss=tf.reduce_mean(tf.square(y-y_data))#選擇梯度下降的方法optimizer=tf.train.GradientDescentOptimizer(0.5)#迭代的目標:最小化損失函數(shù)train=optimizer.minimize(loss)6.2TensorFlow的使用利用TensorFlow來訓練模型,得到待擬合的平面,實現(xiàn)代碼如下所示:#1.初始化變量:tf的必備步驟,主要聲明了變量,就必須初始化才能用init=tf.global_variables_initializer()#設置TensorFlow對GPU的使用按需分配config=tf.ConfigProto()config.gpu_options.allow_growth=True#2.啟動圖(graph)sess=tf.Session(config=config)sess.run(init)6.2TensorFlow的使用運行結果如圖2-10所示:謝謝!第一章概論西華大學機器學習第三章數(shù)據(jù)預處理XXX學校XXX2022目錄Contents概述數(shù)據(jù)預分析數(shù)據(jù)清理數(shù)據(jù)集成數(shù)據(jù)變換數(shù)據(jù)規(guī)約主要數(shù)據(jù)預處理函數(shù)
本章知識圖譜109概述一1概述111數(shù)據(jù)特點:不完整、
不一致、冗余、易受噪聲干擾數(shù)據(jù)預處理數(shù)據(jù)預分析數(shù)據(jù)清理數(shù)據(jù)集成數(shù)據(jù)規(guī)約數(shù)據(jù)轉換對數(shù)據(jù)的特性有個大致的了解使數(shù)據(jù)格式標準化、清除異常數(shù)據(jù)、糾正錯誤、清除重復數(shù)據(jù)將多個數(shù)據(jù)源的數(shù)據(jù)進行整合并統(tǒng)一存儲通過平滑聚集、數(shù)據(jù)概化、規(guī)范化等方式將數(shù)據(jù)轉換成適用于后續(xù)處理的形式。在保持原數(shù)據(jù)的完整性的情況下對數(shù)據(jù)集進行規(guī)約或簡化。數(shù)據(jù)預分析二2數(shù)據(jù)預分析113數(shù)據(jù)統(tǒng)計特性分析數(shù)據(jù)質量分析查看數(shù)據(jù)的一些統(tǒng)計特性,包括均值、方差、最大值、最小值等檢查原始數(shù)據(jù)中是否存在臟數(shù)據(jù)包括針對缺失值分析、異常值分析、以及不一致的值、重復數(shù)據(jù)和含有特殊符號的數(shù)據(jù)的分析。數(shù)據(jù)預分析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ù)值型特征的統(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)計量,當輸入include=['O']時,會計算離散型變量的統(tǒng)計特征,當參數(shù)是‘all’的時候會把數(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=‘all’)#描述DataFrame數(shù)據(jù)類型的所有列2.2數(shù)據(jù)質量分析1161.缺失值分析
數(shù)據(jù)的缺失主要包括記錄的缺失和記錄中某個字段信息的缺失,兩者都會造成分析結果的不準確性(1)缺失值產生的原因
缺失值產生的原因主要包括:部分信息暫時無法獲取,或者獲取信息的代價太大;部分信息由于數(shù)據(jù)采集設備故障、存儲介質故障或者傳輸故障等原因被遺漏或者丟失;某些對象的該屬性值并不存在,從而造成缺失值的產生。2.2數(shù)據(jù)質量分析117(2)缺失值的影響
缺失值產生的影響主要有:機器學習建模將丟失大量的有用信息,模型中蘊含的規(guī)律更難把握,機器學習中所表現(xiàn)出的不確定性更加顯著。除此之外,包含空值的數(shù)據(jù)會使建模過程陷入混亂,導致不可靠的輸出。(3)缺失值的分析
雖然缺失值的影響很深遠,但是使用簡單的統(tǒng)計分析,就可以得到缺失值的相關屬性,即缺失屬性數(shù)、缺失數(shù)以及缺失率等。2.2數(shù)據(jù)質量分析1182.異常值分析
異常值分析是檢驗是否有錄入錯誤以及是否含有不合常理的數(shù)據(jù)。忽視異常值的存在是一個十分危險的行為,不加剔除地將異常值包括到數(shù)據(jù)的計算分析過程中,對結果會產生不良影響。(1)簡單統(tǒng)計量分析
通過上一小節(jié)介紹的數(shù)據(jù)統(tǒng)計特性分析能發(fā)現(xiàn)一些簡單的數(shù)據(jù)異常值。比如,可以通過某個變量的最大值和最小值來判斷這個變量的取值是否超出合理的范圍,如用戶年齡為2020歲,則該變量的取值就存在異常。2.2數(shù)據(jù)質量分析119
2.2數(shù)據(jù)質量分析120
(2)箱型圖分布2.2數(shù)據(jù)質量分析1213.一致性分析
數(shù)據(jù)不一致性是指數(shù)據(jù)的矛盾性、不相容性。直接對不一致性的數(shù)據(jù)進行學習,可能會產生與實際相違背的學習結果。
數(shù)據(jù)分析過程中,不一致數(shù)據(jù)的產生主要發(fā)生在數(shù)據(jù)集成的過程中,這可能是由于被用于分析的數(shù)據(jù)是來自不同的數(shù)據(jù)源、對于重復存放的數(shù)據(jù)未能進行一致性更新造成的。例如:兩張表中都存儲了用戶的電話號碼,但是在用戶的電話號碼發(fā)生改變之時只更新了一張表中的數(shù)據(jù),那么兩張表中就有了不一致的數(shù)據(jù),這樣在數(shù)據(jù)建模過程中會導致學習出現(xiàn)誤差。數(shù)據(jù)清理三3.1異常值處理17表3-1異常值處理方法
數(shù)據(jù)預處理時,異常值是否剔除,需視具體情況而定,因為有些異常值可能蘊含著某種有用的信息。異常值處理常用的方法如表3-1所示。異常值處理方法方法描述刪除直接將含有異常值的記錄刪除視為缺失值將異常值視為缺失值,利用缺失值處理的方法進行處理平均值修正可用前后兩個觀測值的平均值修正該異常值不處理直接在具有異常值的數(shù)據(jù)集上進行建模3.2缺失值處理18表3-2常用插補方法
缺失值處理的方法主要可以分為三類:刪除記錄、數(shù)據(jù)插補和不處理。其中,最常用的是數(shù)據(jù)插補方法。常用的插補方法如表3-2所示。插補方法方法描述均值/中位數(shù)/眾數(shù)插補用該屬性取值的平均數(shù)/中位數(shù)/眾數(shù)進行插補使用固定值將缺失的屬性值用一個常量替換最近臨插補在記錄中找到與缺失樣本最接近的樣本的屬性值插補回歸方法對帶有缺失值的變量,根據(jù)已有的數(shù)據(jù)和與其相關的其他變量(因變量)的數(shù)據(jù)建立擬合模型來預測缺失的屬性值插值法3.2缺失值處理19拉格朗日插值法介紹:
(1)求已知的過n個點的n-1次多項式:
3.2缺失值處理20解出拉格朗日插值多項式為:
3.2缺失值處理21拉格朗日插值法演示:
首先,構造數(shù)據(jù),設置異常值,把銷量大于5000和銷量小于400的異常值替換為None,最后,定義拉格朗日插值函數(shù),對數(shù)據(jù)進行插值,實現(xiàn)代碼如下所示:importpandasaspd#導入數(shù)據(jù)分析庫Pandasfromerpolateimportlagrange#導入拉格朗日插值函數(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)#插值并返回插值結果
#逐個元素判斷是否需要插值foriindata.columns:forjinrange(len(data)):if(data[i].isnull())[j]:#如果為空即插值data[i][j]=ployinterp_column(data[i],j)
data.to_excel(outputfile)#輸出結果,寫入文件
利用拉格朗日插值對2015/2/21日和2015/2/14日的數(shù)據(jù)進行插補,結果是4275.255和4156.86數(shù)據(jù)集成四4數(shù)據(jù)集成130
人們日常使用的數(shù)據(jù)來源于各種渠道,數(shù)據(jù)集成就是將多個文件或者多個數(shù)據(jù)源中的異構數(shù)據(jù)進行合并,然后存放在一個統(tǒng)一的數(shù)據(jù)庫中進行存儲。在數(shù)據(jù)集成過程中,來自多個數(shù)據(jù)源的現(xiàn)實世界實體的表達形式有的是不一樣的,有可能是不匹配的,要考慮實體識別問題的屬性冗余問題,從而將原始數(shù)據(jù)在最底層上加以轉換、提煉和集成。4.1實體識別131
實體識別是指從不同數(shù)據(jù)源識別出現(xiàn)實世界的實體,任務是統(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ù)源中都有記錄,當對數(shù)據(jù)源進行集成的時候,若不進行處理,新數(shù)據(jù)集中同一屬性就多次出現(xiàn),導致我們需要處理大量的重復數(shù)據(jù)。(2)同一屬性命名不一致
在實體識別中所提到的異名同義的情況下,若不對數(shù)據(jù)進行處理,新數(shù)據(jù)集中同一屬性多次出現(xiàn),不僅會導致我們處理的數(shù)據(jù)量增大,還會影響我們模型的建立,從而導致輸出結果不準確。
數(shù)據(jù)變換五5數(shù)據(jù)變換134
數(shù)據(jù)變換是指將數(shù)據(jù)轉換成統(tǒng)一的適合機器學習的形式。比如將連續(xù)的氣溫數(shù)值變?yōu)楦?、中、低這樣的離散形式,或將字符描述變?yōu)殡x散數(shù)字等。5.1簡單函數(shù)變換135
簡單函數(shù)變換是指對采集的原始數(shù)據(jù)使用各種簡單數(shù)學函數(shù)進行變換,常見的函數(shù)包括平方、開方、取對數(shù)、差分運算等。簡單的函數(shù)變換常用來將不具有正態(tài)分布的數(shù)據(jù)變換為具有正態(tài)分布的數(shù)據(jù)。在時間序列分析中,有時簡單的差分運算就能將序列轉換成平穩(wěn)序列。如果數(shù)據(jù)較大,可以取對數(shù)或者開方將數(shù)據(jù)進行壓縮,從而減小數(shù)據(jù)的處理量。5.2歸一化136
缺陷:當有新數(shù)據(jù)加入時,可能導致和的變化。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ù)定標規(guī)范化5.3連續(xù)屬性離散化139
數(shù)據(jù)離散化本質上是將數(shù)據(jù)離散空間劃分為若干個區(qū)間,最后用不同的符號或者整數(shù)值代表每個子區(qū)間中的數(shù)據(jù)。離散化涉及兩個子任務:確定分類和將連續(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)基于聚類分析的方法:這種方法是指將物理或者抽象對象集合進行分組,再來分析由類似的對象組成的多個類,保證類內相似性大,類間相似性小。聚類分析方法的典型算法包括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'肝氣郁結證型系數(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)))#訓練模型#輸出聚類中心,并且排序(默認是隨機序的)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ù)來顯示聚類結果importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標簽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ù)集上進行復雜的機器學習需要很長的時間,數(shù)據(jù)規(guī)約是生成更小但保持數(shù)據(jù)完整性的新數(shù)據(jù)集,在規(guī)約后的數(shù)據(jù)集上進行機器學習將更有效率。數(shù)據(jù)規(guī)約可以降低無效、錯誤數(shù)據(jù)對建模的影響,提高建模的準確性;處理少量且具有代表性的數(shù)據(jù),大幅縮減機器學習所需要的時間;另外還可以降低儲存數(shù)據(jù)的成本。6.1屬性規(guī)約145屬性規(guī)約方法方法描述合并屬性將一些舊屬性合為新屬性逐步向前選擇從一個空屬性集開始,每次從原來屬性集合中選擇一個當前最優(yōu)地屬性添加到當前屬性子集中。直到無法選擇出最優(yōu)屬性或滿足一定閾值約束為之逐步向后選擇從一個全屬性集開始,每次從當前屬性子集中選擇一個當前最差的屬性并將其從當前屬性子集中消去。直到無法選擇出最差屬性為之或滿足一定閾值的約束法為止決策樹歸納利用決策樹的歸納法對初始數(shù)據(jù)進行分類歸納學習,獲得一個初始決策樹,所有沒有出現(xiàn)在這個決策樹上的屬性均可認為是無關屬性,將這些屬性從初始化集合中刪除,就可以獲得一個較優(yōu)的屬性子集主成分分析用較少的變量去解釋原始數(shù)據(jù)中的大部分變量,即將許多相關性很高的變量轉換成彼此相互獨立或不相關的變量。6.2數(shù)值規(guī)約146
數(shù)值規(guī)約也稱為樣本規(guī)約,是指通過選擇替代的、較小的數(shù)據(jù)來減少數(shù)據(jù)子集。在確定樣本規(guī)約子集時候需要考慮計算成本、存儲要求、估計量的精度及其他一些與算法和數(shù)據(jù)特性有關的因素。有參數(shù)方法無參數(shù)方法有參數(shù)方法是使用一個參數(shù)模型來評估數(shù)據(jù),最后只需要存儲該模型的參數(shù)即可,而不需要存放實際的數(shù)據(jù)。常用的模型包括回歸模型和對數(shù)線性模型。通常使用直方圖、聚類、抽樣等方法。數(shù)值規(guī)約Python的主要數(shù)據(jù)預處理函數(shù)七7Python的主要數(shù)據(jù)預處理函數(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一般將訓練數(shù)據(jù)與測試數(shù)據(jù)連接起來PCAScikit-learn對指標變量矩陣進行主成分分析
思考題149思考題2019年新型冠狀病毒引發(fā)的疫情時時刻刻牽動著國人的心,請讀者利用附件:NovelCoronavirus(2019-nCoV)Cases.xlsx結合本章所學的知識對獲取的數(shù)據(jù)完成數(shù)據(jù)預處理。2020年科比墜機,偶像逝世,使得多少球迷心碎,現(xiàn)提供科比籃球生涯中的精彩瞬間數(shù)據(jù)集:Kobe_data.csv,請讀者結合本章所學知識對數(shù)據(jù)完成數(shù)據(jù)預處理。
思考題150思考題提示:數(shù)據(jù)來源1、NovelCoronavirus(2019-nCoV)Cases.xlsx數(shù)據(jù)集:/BlankerL/DXY-2019-nCoV-Data2、Kobe_data.csv數(shù)據(jù)集:/tatsumiw/Kobe_analysis
謝謝!第一章概論西華大學機器學習第四章K近鄰算法XXX學校XXX2022目錄Contents模型介紹案例:約會網(wǎng)站配對案例:手寫數(shù)字識別案例:鳶尾花品種識別
知識引入154
本章知識圖譜155模型介紹一1.1算法概述157K近鄰算法(K-NearestNeighbor,簡稱KNN),是一種根據(jù)不同樣本的特征值之間的距離進行分類的算法。KNN中可以根據(jù)具體的情況選擇不同的“距離”衡量方式。它的基本思想是:如果一個樣本在特征空間中的K個最鄰近樣本中的大多數(shù)屬于某一個類別,那么該樣本也屬于這個類別。用一句話來總結KNN算法就是:近朱者赤,近墨者黑。1.1算法概述158KNN的優(yōu)點包括:算法簡單,易于理解,易于實現(xiàn),無需參數(shù)估計,無需訓練。精度高,對異常值不敏感(個別噪音數(shù)據(jù)對結果的影響不是很大)。適合對稀有事件進行分類。KNN的缺點包括:對測試樣本分類時的計算量大,空間開銷大??山忉屝圆?,無法給出像后續(xù)章節(jié)將要介紹的決策樹模型那樣的規(guī)則。當樣本不平衡時,不能準確的判別分類,這是KNN最大的缺點。例如一個類的樣本容量很大,而其他類樣本容量很小。這有可能導致當輸入一個新樣本時,新樣本的K個鄰居中始終都是大容量類的樣本占多數(shù),從而導致錯誤分類。可以采用加權值的方法(和該樣本距離小的鄰居權值大)來改進這個問題1.2算法基本原理159KNN算法的三個基本要素是K值的選擇、距離度量以及分類決策規(guī)則。KNN算法的具體實現(xiàn)過程如下:訓練樣本集(包含每條樣本數(shù)據(jù)與分類的對應關系)輸入無標簽的數(shù)據(jù)新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應特征進行比較(1)計算距離(2)排序(3)取K個新數(shù)據(jù)標簽(K個數(shù)據(jù)中出現(xiàn)最多的分類標簽)1.2算法基本原理160
1.2算法基本原理161K值小的時候近似誤差小,估計誤差大。K值大的時候近似誤差大,估計誤差小。1.3算法實現(xiàn)代碼162機器學習算法解決實際問題的步驟:收集數(shù)據(jù)分析數(shù)據(jù)數(shù)據(jù)預處理應用模型測試算法構建模型1.3算法實現(xiàn)代碼163偽代碼:對于每一個在數(shù)據(jù)集中的數(shù)據(jù)點:計算目標的數(shù)據(jù)點(需要分類的數(shù)據(jù)點)與該數(shù)據(jù)點的距離將距離排序:從小到大選取前K個最短距離選取這K個中最多的分類類別返回該類別來作為目標數(shù)據(jù)點的預測值1.3算法實現(xiàn)代碼164直接利用第三方庫的方法來實現(xiàn)KNN算法KNeighborsClassifier使用很簡單,核心操作包括三步:(1)創(chuàng)建KNeighborsClassifier對象,并進行初始化。該類的構造函數(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:計算距離時使用的權重,缺省值是“uniform”,表示平等權重。也可以取值“distance”,則表示按照距離的遠近設置不同權重。還可以自主設計加權方式,并以函數(shù)形式調用。metric:距離的計算,缺省值是“minkowski”。當p=2,metric=’minkowski’時,使用的是歐式距離。p=1,metric=’minkowski’時為曼哈頓距離。(2)調用fit方法,對數(shù)據(jù)集進行訓練。函數(shù)格式:fit(X,y)說明:以X為特征向量,以y為標簽值對模型進行訓練。(3)調用predict函數(shù),對測試集進行預測。函數(shù)格式:predict(X)說明:根據(jù)給定的數(shù)據(jù),預測其所屬的類別標簽。案例:約會網(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ù)為文件地址的字符串,輸出為樣本矩陣和分類標簽向量。
1)收集數(shù)據(jù)2.2數(shù)據(jù)準備1691.數(shù)據(jù)準備2)分析數(shù)據(jù)
將收集的數(shù)據(jù)進行分析,調用方法讀取數(shù)據(jù),繪制散點圖觀察數(shù)據(jù)。
2.2數(shù)據(jù)準備1701.數(shù)據(jù)準備3)處理數(shù)據(jù)
從表4-1的數(shù)據(jù)中可看出“每年獲得的飛機??屠锍虜?shù)”數(shù)值較大,對結果的影響程度遠大于其他兩個特征。但我們認為三個特征值權重相同。為了降低極大數(shù)值對結果的影響,這里使用歸一化進行數(shù)據(jù)處理。
2.3算法實現(xiàn)171
其輸入?yún)?shù)包括被預測的對象、原始數(shù)據(jù)集、原始標簽和臨近點個數(shù),輸出參數(shù)為被預測對象所屬的分類標簽值,其中距離采用的是歐氏距離。4)構建模型2.4算法測試1725)測試算法
機器學習算法的一個重要工作是測評算法的正確率。通常我們會將90%的數(shù)據(jù)作為訓練樣本來使用,剩余的10%數(shù)據(jù)作為測試集,用來測試算法的性能。本節(jié)我們使用錯誤率來檢測算法性能。2.5算法應用1736)模型應用
通過上述函數(shù),我們已經實現(xiàn)了KNN算法相關所有的功能,接下來就可以通過輸入新的會員信息,通過上述模型來判斷該會員是否是自己喜歡的類型了。案例:手寫數(shù)字識別三3.1問題介紹案例背景:案例的數(shù)據(jù)集是人工手寫的0-9的數(shù)字圖像,每個圖像為32*32像素。案例要求:實現(xiàn)自動識別給定的手寫數(shù)字圖像對應的數(shù)字是幾。3.2數(shù)據(jù)準備首先我們要將圖像數(shù)據(jù)處理為一個向量,將32*32的二進制圖像信息轉化為1*1024的向量。3.3算法實現(xiàn)定義分類算法導入訓練數(shù)據(jù)處理訓練數(shù)據(jù)運用算法開始測試處理測試數(shù)據(jù)導入測試數(shù)據(jù)案例:鳶尾花品種識別四4.1問題介紹179案例背景:案例的數(shù)據(jù)集包含150個數(shù)據(jù)集,分為3類,每類50個數(shù)據(jù),每個數(shù)據(jù)包含4個屬性。案例要求:通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬于(Setosa-山鳶尾,Versicolour-雜色鳶尾,Virginica-維吉尼亞鳶尾)三個種類中的哪一類。4.2數(shù)據(jù)準備1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城市新能源項目電費保證金合同3篇
- 2025年上海市建筑安全員B證考試題庫附答案
- 2025版智能系統(tǒng)性能測試與評估服務合同3篇
- 2025年浙江建筑安全員考試題庫
- 2025廣東建筑安全員《A證》考試題庫及答案
- 二零二五年勞動合同:某大型企業(yè)與新入職員工之間的勞動合同規(guī)定3篇
- 2025年度燒烤飯店外賣配送員招聘合同
- 二零二五年度個人裝修合同免責條款說明細則3篇
- 2025版智慧能源框架銷售合同范本3篇
- 復合式甲醛氣體探測器安全操作規(guī)程
- 血細胞分析報告規(guī)范化指南2020
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應用實踐指導材料之7:“5領導作用-5.1領導作用和承諾”(雷澤佳編制-2025B0)
- 2024年度通信設備維修服務合同范本3篇
- 安恒可信數(shù)據(jù)空間建設方案 2024
- 2024年學校與家長共同促進家校合作發(fā)展協(xié)議3篇
- C預應力錨索框架梁施工方案(完整版)
- 2024年快速消費品物流配送合同6篇
- 廣東省茂名市2024屆高三上學期第一次綜合測試(一模)歷史 含解析
- 參加團干部培訓心得體會
- 中華民族共同體概論專家講座第一講中華民族共同體基礎理論
- 人教版高一地理必修一期末試卷
評論
0/150
提交評論