Python 人工智能應(yīng)用與實踐 課件 第3-5章 科學(xué)計算與數(shù)據(jù)分析庫、機器學(xué)習(xí)簡介_第1頁
Python 人工智能應(yīng)用與實踐 課件 第3-5章 科學(xué)計算與數(shù)據(jù)分析庫、機器學(xué)習(xí)簡介_第2頁
Python 人工智能應(yīng)用與實踐 課件 第3-5章 科學(xué)計算與數(shù)據(jù)分析庫、機器學(xué)習(xí)簡介_第3頁
Python 人工智能應(yīng)用與實踐 課件 第3-5章 科學(xué)計算與數(shù)據(jù)分析庫、機器學(xué)習(xí)簡介_第4頁
Python 人工智能應(yīng)用與實踐 課件 第3-5章 科學(xué)計算與數(shù)據(jù)分析庫、機器學(xué)習(xí)簡介_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章科學(xué)計算與數(shù)據(jù)分析庫3.1Anaconda安裝及其集成開發(fā)環(huán)境3.1.1Anaconda安裝Python擁有NumPy(數(shù)組運算)、pandas(數(shù)據(jù)處理)、Matplotlib(可視化)和scikit-learn(機器學(xué)習(xí))等功能豐富的接口庫。這些庫提供了科學(xué)計算、可視化、數(shù)據(jù)分析及機器學(xué)習(xí)的強大功能,而這些第三方庫都需要分別安裝后才能使用。Anaconda發(fā)行版預(yù)裝了大量的Python常用庫,只要一次安裝就可以直接使用以上所有這些接口庫。Anaconda的安裝進入Anaconda官網(wǎng):/distribution/,下載Windows系統(tǒng)中的Anaconda安裝包,雙擊下載的安裝文件Anaconda3-2021.11-Windows-x86_64.exe,會出現(xiàn)如圖3-1Anaconda安裝界面,然后按照界面提示,全部選默認項安裝即可。安裝成功后,可選用Windows開始菜單已安裝的Spyder或者JupyterNotebook(見圖3-2)。

3.1.2Anaconda集成開發(fā)環(huán)境簡介1.JupyterNotebook交互式開發(fā)環(huán)境JupyterNotebook是一個在瀏覽器中使用的交互式的筆記本,可以實現(xiàn)將代碼、文字完美結(jié)合。選擇啟動JupyterNotebook后,在啟動的終端界面(如圖3-3)中的“Servingnotebookfromlocaldirectory:”后面可找到保存文件時的默認存儲目錄;在隨后出現(xiàn)的如圖3-4界面中,點擊“Upload”按鈕可上傳已存在的Python源文件,并可在界面中選擇要打開的Python源文件。啟動JupyterNotebook后,可在圖3-4界面中選操作目錄,然后選擇“New”下拉按鈕下的“Python3”啟動Python。啟動Python后會出現(xiàn)如圖3-5所示界面,在In[1]旁的單元格(輸入框)中可輸入一行語句,單擊工具欄中“運行”按鈕(或同時按下<ctrl>+<enter>快捷鍵運行單元格代碼)后,單元格下方Out[1]中將顯示運行結(jié)果,并自動添加下一單元格;也可以在一個單元格中輸入多行語句,單擊“運行”按鈕一次運行,并顯示結(jié)果。從圖3-5界面中選擇File菜單的“Saveas…”命令,輸入文件名后將以“文件名.ipynb”的形式保存文件,已保存的文件可在界面中選擇該文件名打開文件,也可單擊工具欄中“保存”按鈕保存文件。JupyterNotebook有兩種輸入模式。鼠標單擊In單元格內(nèi)部,則外方框變綠,單元格進入編輯模式(可編輯輸入語句);單擊外方框內(nèi)、In單元格以外的區(qū)域,則外方框變藍,單元格進入命令模式(可輸入操作命令)。在命令模式下,按下<h>鍵(或選擇Help菜單下的“KeyboardShortcuts”命令),可查看所有操作命令的快捷鍵列表。2.Spyder簡易開發(fā)環(huán)境Spyder是一款集成于Anaconda的簡易開發(fā)環(huán)境。它模仿了MATLAB的“工作空間”的功能,可以方便地觀察、比較和修改數(shù)組的值。啟動Spyder后,使用File菜單下的“Newfile…”命令(或點擊工具欄中“Newfile”按鈕)建立新文件。在左側(cè)程序編輯窗口輸入代碼后選Run菜單下的“Run”命令(或點擊工具欄中“Runfile”按鈕)運行程序,在界面右下角“IPythonconsole”頁窗口中顯示運行結(jié)果;當程序有輸出圖形時,可單擊“Plots”顯示圖形。此外,可通過View菜單下的“Panes”命令選擇各種窗格頁的顯示或關(guān)閉。可選擇File菜單下的“Saveas…”命令,輸入新文件名以“文件名.py”形式存盤,并使用File菜單下的“Open”命令(或點擊工具欄中“Openfile”按鈕)選擇需打開的已存在Python程序。3.2NumPy的向量和矩陣操作處理NumPy是常用的Python科學(xué)計算工具包,其中包含了大量功能強大的工具,比如ndarray數(shù)組對象(用來表示向量、矩陣、圖像等)以及線性代數(shù)函數(shù)等。3.2.1NumPy數(shù)組的創(chuàng)建與操作1.創(chuàng)建Numpy數(shù)組(1)創(chuàng)建Numpy一維數(shù)組NumPy數(shù)組的下標從0開始,同一個NumPy數(shù)組中所有元素的類型必須是相同的。在導(dǎo)入numpy庫后,使用array函數(shù)可將Python的列表或元組轉(zhuǎn)化成Numpy數(shù)組(向量)。【例3-1】輸入以下代碼,比較Python的列表與Numpy一維數(shù)組(向量)間的區(qū)別。importnumpyasnp#導(dǎo)入numpy庫,取別名為npl=[1,3,5]+[2,4,6]#列表相加print("列表相加:",l)v=np.array([1,3,5])+np.array([1,3,5])#列表轉(zhuǎn)換成向量再相加print("向量相加:",v)參照已介紹的Spyder開發(fā)環(huán)境的使用方法,在如圖3-6界面中輸入并運行程序后,可在界面右下角“IPythonconsole”頁窗口中顯示運行結(jié)果如下:列表相加:[1,3,5,2,4,6]向量相加:[2610]在界面左上角“VariableExplorer”頁窗格中顯示了列表l與向量v的類型、長度和值。由此可以看出:2個列表的加法是將2個列表中的元素合并,而與2個向量的加法運算是將2個向量中的對應(yīng)位置的元素值相加。(2)NumPy二維數(shù)組定義的矩陣NumPy可使用多重序列來定義多維數(shù)組,矩陣可使用二維數(shù)組來表示:importnumpyasnpa=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])#外面一層中括號不可省略print(a)打印輸出:[[12345][678910][1112131415]](3)創(chuàng)建數(shù)組的專門函數(shù)表3-1為創(chuàng)建數(shù)組的專門函數(shù)(設(shè)已執(zhí)行導(dǎo)入語句:importnumpyasnp)。2.Numpy數(shù)組的索引(1)Numpy一維數(shù)組的索引Numpy一維數(shù)組與Python中的序列的索引方法相同。設(shè)a為一維數(shù)組,a[i]返回一維數(shù)組a索引號為i的元素;a[-i]返回從一維數(shù)組最后一個元素(其索引號為-1)往前索引第i個元素;a[m:n]返回索引號從m到n的元素(不含終值n)。(2)NumPy二維數(shù)組的索引二維數(shù)組的每一個維度都有一個索引,各個維度的索引之間用逗號隔開,行、列的索引號都從0開始。示例如下:print(a[1,4])#索引號第1行第4列的元素輸出為10,等同于a[1][4]但列表只能寫成a[1][4]print(a[0,2:5])#輸出第0行第2、3、4的元素:[345]print(a[1:])#等同于打印a[1:,:],輸出第1、2行的所有列元素值

3.Numpy數(shù)組屬性及操作表3-2為Numpy數(shù)組屬性及操作列表,設(shè)a數(shù)組為:[[12345][678910][1112131415]]表3-3

為Numpy隨機函數(shù)列表(設(shè)已執(zhí)行導(dǎo)入語句:importnumpyasnp)?!纠?-2】Numpy數(shù)組常用操作示例一。importnumpyasnp#導(dǎo)入numpy庫,取別名為npl_a=[5,-6,7,10,3,1]a=np.array(l_a)

#列表l_a轉(zhuǎn)換為ndarray數(shù)組ab=np.arange(0,np.pi,0.6)#產(chǎn)生0到3.14159(np.pi),步長為0.6的數(shù)組bprint("a:",a)#a:[5-671031]print("b:",b)#b:[0.0.61.21.82.43.]print("a-b=",a-b)#對應(yīng)位置元素相減:[5.-6.65.88.20.6-2.]print("a>b:",a>b)#對應(yīng)位置元素比較:[TrueFalseTrueTrueTrueFalse]print("把a轉(zhuǎn)化為2行3列的數(shù)組:\n",a.reshape(2,3))#改變數(shù)組的形狀max=np.max(a)##求數(shù)組中最大值print("數(shù)組a的最大值:",max)s=np.sum(a)#計算數(shù)組所有元素之和print("數(shù)組a所有元素之和:",s)m=np.mean(a)#計算數(shù)組所有元素平均值print("數(shù)組a的平均值:",m)運行結(jié)果:a:[5-671031]b:[0.0.61.21.82.43.]a-b=[5.-6.65.88.20.6-2.]a>b:[TrueFalseTrueTrueTrueFalse]把a轉(zhuǎn)化為2行3列的數(shù)組:[[5-67][1031]]數(shù)組a的最大值:10數(shù)組a所有元素之和:20數(shù)組a的平均值:3.3333333333333335【例3-3】Numpy數(shù)組常用操作示例二。importnumpyasnpc=np.ones((3,3))#生成3行3列全1數(shù)組d=np.random.randint(0,10,size=(3,3))#生成3行3列的數(shù)組,元素值為[0,10)區(qū)間的隨機整數(shù)print("c:d:")foriinrange(3):#輸出結(jié)果print(c[i],d[i])a=4*c#標量數(shù)4乘數(shù)組中的每個元素b=c*d#2個二維數(shù)組對應(yīng)位置的元素相乘,產(chǎn)生由積組成的新數(shù)組print("a=4*c:b=c*d:")foriinrange(3):#輸出結(jié)果print(a[i],b[i])x=c.dot(d)#求2個二維數(shù)組(矩陣)的點積

y=np.transpose(d)#求二維數(shù)組(矩陣)的轉(zhuǎn)置(行、列號相同元素值交換)print("c與d的點積:d的轉(zhuǎn)置:")foriinrange(3):#輸出結(jié)果print(x[i],y[i])min=np.min(d)#求數(shù)組中最小值print("數(shù)組d的最小值:",min)print("d按縱軸(y軸,按列)求最小值:",d.min(axis=0))#axis=0表示按列求最小值n=np.sqrt(a)#對數(shù)組a所有元素求平方根print("對數(shù)組a求平方根:d沿橫軸(x軸,按行)排序結(jié)果:")d.sort(axis=1)#axis=1(默認值)為按行排序:每行的最小值都排第0列,遞增排序#函數(shù)名可按需改變,如按行求和可把d.sort改為d.sum;如設(shè)置axis=0則按列排序等foriinrange(3):#輸出結(jié)果print(n[i],d[i])運行結(jié)果:c:d:[1.1.1.][938][1.1.1.][951][1.1.1.][406]a=4*c:b=c*d:[4.4.4.][9.3.8.][4.4.4.][9.5.1.][4.4.4.][4.0.6.]c與d的點積:d的轉(zhuǎn)置:[22.8.15.][994][22.8.15.][350][22.8.15.][816]數(shù)組d的最小值:0d按縱軸(y軸,按列)求最小值:[401]對數(shù)組a求平方根:d沿橫軸(x軸,按行)排序結(jié)果:[2.2.2.][389][2.2.2.][159][2.2.2.][046]4.NumPy文件操作(1)文本文件讀寫NumPy使用loadtxt()、savetxt()可讀寫*.txt或*.csv文本文件。其中,csv擴展名文本文件采用逗號分隔文本,是通常用于存放電子表格或數(shù)據(jù)的一種文件格式,并可用記事本、Excel等軟件打開文件?!纠?-4】生成0到19間的整數(shù),按4行5列排列存入num.csv文件,然后再讀入打印。importnumpyasnp#定義模塊別名為npnumber=np.arange(20).reshape((4,5))#生成0~19的數(shù),按4行5列排列存入數(shù)組

#整型數(shù)(浮點數(shù)用%f)以逗號分隔,保存到與Python源文件同路徑下的num.csv文件np.savetxt('num.csv',number,fmt='%d',delimiter=',')#再以int32(缺省為浮點數(shù))格式讀入num.csv文件內(nèi)容data=np.loadtxt('num.csv',dtype=32,delimiter=',')print(data)#輸出文件內(nèi)容運行結(jié)果:[[01234][56789][1011121314][1516171819]](2)二進制文件讀寫方法一:使用數(shù)組的方法函數(shù)tofile以不保存Numpy數(shù)組結(jié)構(gòu)的方式,將數(shù)組中的數(shù)據(jù)以二進制的格式寫進文件,并可配合使用numpy.fromfile讀入二進制的格式文件。方法二:用load()、save()讀寫Numpy數(shù)組專用的以npy為擴展名的二進制文件,npy擴展名文件保存了Numpy數(shù)組的結(jié)構(gòu)(包括shape和dtype),但專用二進制文件不易被其它計算機編程語言兼容使用?!纠?-5】生成0到19之間的數(shù),以二進制格式存入文件,然后再讀入打印。importnumpyasnp#導(dǎo)入numpy庫,取別名為npnumber=np.arange(20).reshape((4,5))#生成0~19的數(shù),按4行5列排列存入數(shù)組number.tofile("num.bin")#以不保存Numpy數(shù)組結(jié)構(gòu)的方式保存二進制格式文件data1=np.fromfile("num.bin",dtype=32)#按照int32類型讀入數(shù)據(jù)print(data1)#輸出文件內(nèi)容,數(shù)據(jù)是一維的(未保存原Numpy數(shù)組結(jié)構(gòu))#以保存Numpy數(shù)組結(jié)構(gòu)的方式保存二進制格式文件,默認后綴名為npynp.save("num",number)data2=np.load("num.npy")print(data2)#按4行5列排列輸出文件內(nèi)容(文件數(shù)據(jù)保存了原Numpy數(shù)組結(jié)構(gòu))運行結(jié)果:012345678910111213141516171819][[01234][56789][1011121314][1516171819]]3.2.2NumPy的矩陣對象及操作Numpy矩陣計算是直接對所有矩陣元素進行運算,相比Python列表通過循環(huán)對元素的逐個處理運算效率高很多。Numpy通過調(diào)用mat函數(shù)(或matrix函數(shù))創(chuàng)建矩陣?!纠?-6】NumPy的矩陣對象及操作示例。importnumpyasnpm1=np.matrix("135;7911;131517")print("m1:m2=m1*2:")m2=m1*2#矩陣的數(shù)乘運算foriinrange(3):#輸出結(jié)果print(m1[i],

'',m2[i])print("m1+m2:m1-m2:")#矩陣運算是矩陣對應(yīng)位置元素的相加、乘、減運算m3=m1+m2;m4=m1-m2foriinrange(3):#輸出結(jié)果

print(m3[i],m4[i])print("m1*m2:2矩陣對應(yīng)位置元素相乘:")m5=m1*m2#矩陣乘法m6=np.multiply(m1,m2)#2矩陣對應(yīng)位置元素相乘foriinrange(3):#輸出結(jié)果print(m5[i],'',m6[i])m7=m1.T#求矩陣m1的轉(zhuǎn)置m8=m2.I#求矩陣m2的逆print("矩陣m1的轉(zhuǎn)置:矩陣m2的逆:")foriinrange(3):#輸出結(jié)果print(m7[i],'',m8[i])3.3Matplotlib數(shù)據(jù)可視化3.3.1Matplotlib及其圖形繪制流程數(shù)據(jù)可視化有助于更直觀地理解數(shù)據(jù)及調(diào)整數(shù)據(jù)分析的方法。Matplotlib通過pyplot模塊提供了與Matlab類似的繪圖API,通過調(diào)用pyplot模塊所提供的函數(shù)就可實現(xiàn)快速繪圖,并設(shè)置圖表的各種細節(jié),以交互方式實現(xiàn)數(shù)據(jù)可視化。Matplotlib的圖形繪制流程如下:1)導(dǎo)入pytplot模塊importmatplotlib.pyplotasplt該模塊包含了一系列類似于Matlab的繪圖函數(shù)。2)創(chuàng)建畫布與子圖構(gòu)建空白的畫布fig=plt.figure(figsize=(w,h),dpi=n)參數(shù)說明:返回畫布對象fig;figsize指定figure的寬和高,單位為英寸(1英寸約為2.5cm);dpi參數(shù)指定繪圖對象的分辨率(每英寸多少個像素),缺省值為80。在圖形尺寸相同的情況下,dpi越高則圖像越清晰度。設(shè)置同一幅圖上繪制多個子圖fig.add_subplot(row,col,k)參數(shù)說明:添加并選中子圖,如指定子圖的行數(shù)row、列數(shù)col,則繪制子圖的個數(shù)為row

col,并選中圖片編號k(1≤k≤row

col),使用實例見【例3-8】。設(shè)置繪圖對象的屬性參數(shù)說明:xlabel、ylabel分別設(shè)置X、Y軸的標題文字;title設(shè)置圖的標題;xlim、ylim分別設(shè)置X、Y軸的顯示范圍;legend(label,loc='lowerleft'):顯示圖例,label為圖例的標簽內(nèi)容,圖例位置loc還可?。簂owerright,upperleft,upperright,uppercenter,lowercenter,centerleft,centerright。

【例3-7】繪制與顯示0~4π余弦函數(shù)圖形示例,運行結(jié)果如圖3-7所示。importmatplotlib.pyplotasplt#導(dǎo)入pytplot模塊,取別名pltimportnumpyasnp#導(dǎo)入numpy模塊plt.rcParams["font.sans-serif"]=['SimHei']

#設(shè)置顯示漢字,指定黑體字plt.rcParams["axes.unicode_minus"]=False

#設(shè)置正常顯示正負號,否則不顯示負數(shù)前的負號plt.figure(figsize=(8,4))#創(chuàng)建一個繪圖對象,大小為800╳4003)繪制與顯示圖形plt.figure(figsize=(8,4))#創(chuàng)建一個繪圖對象,大小為800╳400x_values=np.arange(0.0,4*np.pi,0.01)#生成橫坐標角度:步長0.01,初始值0.0,終值4π

y_values=np.cos(x_values)#生成縱坐標余弦函數(shù)值#用綠色虛線繪制點到點連線,線寬1,圖例標簽為'Cos(x)'plt.plot(x_values,y_values,'g--',linewidth=1.0,label='Cos(x)')plt.xlabel('x',fontsize=18)#設(shè)置X軸的文字,字號取18plt.ylabel('Cos(x)',fontsize=18)#設(shè)置Y軸的文字,字號取18plt.ylim(-1,1)#設(shè)置Y軸的取值范圍-1~1plt.title('余弦函數(shù)圖形',fontsize=20)#設(shè)置圖表的標題,字號取20plt.legend()#在右上角顯示圖例(legend)plt.grid(True)#顯示網(wǎng)格線,默認為不顯示plt.show()#顯示圖形4)保存圖形plt.savafig('d:\cosimage.png',dpi=300)#保存繪制的圖片于d盤根目錄下,dpi取300plt.show()#顯示圖表語句需放置在plt.savafig()后面,才能正確存盤。3.3.2圖形繪制與顯示實例1.繪制折線折線圖是一種將數(shù)據(jù)點按照順序連接而成的圖形。主要語法格式如下:plt.plot(x,y,fmt='[color][marker][line]')參數(shù)說明:x、y分別為x軸、y軸數(shù)據(jù);fmt是用來定義圖的顏色color(r:紅,g:綠,b:藍,w:白,y:黃,k:黑等)、點型marker('o':圓,'*':星,'.':點等)、線型linestyle(默認為'-':實線,'--':虛線,‘-.’:點劃線等)等屬性的字符串;也可用關(guān)鍵字參數(shù)對單個屬性賦值,來替代fmt參數(shù)的組合賦值,例如:color='r',marker='.'等?!纠?-7】中繪制折線語句也可等同改寫成:plt.plot(x_values,y_values,color='b',linestyle='--',linewidth=1.0,label='Cos(x)')?!纠?-8】在如圖3-8所示的4個子圖中分別繪制2019年到2022年畢業(yè)生歷年出國、考研、進國企和外企的人數(shù)折線比較圖。2.繪制柱狀圖柱狀圖也稱為條形圖,是以長方形的長度為變量的統(tǒng)計圖表,長方形長度與它所對應(yīng)的數(shù)值呈一定比例。主要語法格式如下:plt.bar(x,height,width=w,color=c,選項)參數(shù)說明:x、height分別為x軸數(shù)據(jù)、x軸數(shù)據(jù)代表的柱狀高度;width柱狀寬度w取值0~1之間的浮點數(shù),0.8為默認值;color設(shè)置條形圖顏色?!纠?-9】使用柱狀圖繪制2018年到2022年電氣工程及其自動化專業(yè),歷年高考第一志愿錄取人數(shù)變化圖表,運行結(jié)果如圖3-9所示。3.繪制散點圖散點圖又稱為散點分布圖,它反映了兩個隨機變量x與y之間的相關(guān)關(guān)系。繪制散點圖函數(shù)語法如下:plt.scatter(x,y,color=c,marker=m,s=a,alpha=alf)參數(shù)說明:x,y表示x軸和y軸對應(yīng)的數(shù)據(jù);參數(shù)s指定點的大??;color設(shè)定點的顏色,若為一維數(shù)值則設(shè)定每個點的顏色;參數(shù)marker表示繪制的點的類型;alpha設(shè)定點的透明度,取值范圍為0.0(完全透明)~1.0(完全不透明),默認值為1?!纠?-10】使用隨機函數(shù)產(chǎn)生二維隨機變量(x,y)共16組數(shù)據(jù),并可被分成了兩類:0類(8個數(shù)據(jù):x變量取值[20,25)區(qū)間的隨機整數(shù),y變量取值[25,30)區(qū)間的隨機整數(shù));1類(8個數(shù)據(jù):x變量取值[25,30)區(qū)間的隨機整數(shù),y變量取值[30,35)區(qū)間的隨機整數(shù)),要求不同的分類以不同的顏色和形狀繪制散點圖。最簡單的三維圖是由(x,y,z)三維坐標點構(gòu)成的線圖與散點圖??捎胹catter3D函數(shù)來創(chuàng)建三維散點圖,三維圖函數(shù)的參數(shù)與二維圖函數(shù)的參數(shù)基本相同?!纠?-11】五個三維坐標點的三維坐標(x,y,z)分別為(0,0,0),(1,1,1),(2,2,2),(3,3,3),(5,5,5)。要求不同的坐標點以不同的顏色和形狀繪制成如圖3-11所示的三維散點圖。4.繪制直方圖直方圖用一系列不同高度的縱向條紋或線段表示數(shù)據(jù)分布的統(tǒng)計圖,主要繪制一維隨機變量X取值的概率分布情況。一般用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況。直方圖的繪制函數(shù)語法如下:(n,bins,patches)=pyplot.hist(x,bins=10,range=None,density=None,facecolor=None,edgecolor=None,orientation='vertical')參數(shù)說明:x指定每個對應(yīng)x軸bin(箱子)分布的數(shù)據(jù);bins指定bin(箱子)的個數(shù),默認為10;range參數(shù)指定被統(tǒng)計(顯示)的x的數(shù)據(jù)范圍,默認x取全部數(shù)據(jù);density

=0為頻數(shù)圖(統(tǒng)計每個bin范圍內(nèi)的數(shù)據(jù)個數(shù)),density=1為頻率圖(統(tǒng)計每個bin范圍內(nèi)的數(shù)據(jù)個數(shù)與總數(shù)據(jù)數(shù)的占例),默認值為0;facecolor、edgecolor設(shè)置直方圖bin(箱子)與分隔線的顏色;orientation='vertical'為默認值:bin(箱子)垂直放置,若orientation='horizontal'則bin(箱子)水平放置。函數(shù)返回值說明:n為一維數(shù)組,統(tǒng)計每一間隔(箱子)中所含數(shù)據(jù)的個數(shù);bins也為一維數(shù)組,默認取值:bins=np.linspace(min(x),max(x),n),即用x的最小、最大數(shù)之間n等分個數(shù)生成一個一維數(shù)組(含終值)?!纠?-12】隨機生成8000個,均值為0,方差為1的高斯分布(標準正態(tài)分布)的數(shù)據(jù),試利用這些數(shù)據(jù)分別繪制如圖3-12、圖3-13所示的頻數(shù)、頻率直方圖。5.繪制餅狀圖餅狀圖把一個數(shù)據(jù)系列中各項的大小與各項總和的比例顯示在一張“餅”圖中,餅狀圖中的數(shù)據(jù)點顯示為整個餅狀圖的百分比。餅狀圖繪制函數(shù)語法如下:plt.pie(x,explode=None,labels=None,colors=None,autopct=None,shadow=False,startangle=None,radius=None)參數(shù)說明:x表示用于繪制餅狀圖的數(shù)據(jù);explode可設(shè)置指定項離餅圖圓心為n個半徑,默認為None;labels指定每一項的名稱,默認為None;colors參數(shù)指定表示餅圖顏色;給參數(shù)autopct賦值可在各部分扇區(qū)內(nèi),顯示所占的百分比(餅圖中各部分的數(shù)值與各部分數(shù)值之和的比值即為各部分所占百分比);shadow設(shè)置是否加陰影;startangle表示起始繪制角度,默認圖是從x軸正方向逆時針起畫;radius設(shè)定餅狀圖的半徑,默認為1?!纠?-13】已知出國、考研、進國企、外企、私企、考編制、其他就業(yè)人數(shù)分別為30、25、16、15、29、8、12人,繪制如圖3-14所示的畢業(yè)生就業(yè)數(shù)據(jù)餅狀圖。importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.title('電氣工程及其自動化專業(yè)畢業(yè)生就業(yè)數(shù)據(jù)餅狀圖')label=["出國人數(shù)","考研人數(shù)","進國企人數(shù)","進外企人數(shù)","進私企人數(shù)",\"考編制人數(shù)","其他"]data=[30,25,16,15,29,8,12]#就業(yè)分類數(shù)據(jù)exp=[0,0,0,0,0.1,0,0.32]#2個扇區(qū)設(shè)置離餅圖圓心為0.1,0.32個半徑距離#繪制餅狀圖,加陰影,autopct項在各部分扇區(qū)內(nèi)顯示本項所占百分比,'%'輸出格式轉(zhuǎn)義符plt.pie(x=data,labels=label,explode=exp,shadow=True,autopct='%1.0f%%')#'%%'顯示單個'%'

3.4Pandas數(shù)據(jù)分析與處理3.4.1Pandas及其數(shù)據(jù)結(jié)構(gòu)Pandas是一個用于數(shù)據(jù)挖掘的開源Python數(shù)據(jù)分析庫,其為時間序列分析提供了很好的支持。Pandas借助Numpy模塊在計算性能方面的優(yōu)勢和Matplotlib能方便實現(xiàn)數(shù)據(jù)可視化的特點,基于獨特的數(shù)據(jù)結(jié)構(gòu)提升數(shù)據(jù)處理能力。Pandas可處理下列三種數(shù)據(jù)結(jié)構(gòu):系列(Series)、數(shù)據(jù)幀(DataFrame)和三維數(shù)據(jù)結(jié)構(gòu)(MultiIndex和老版本中的Panel)。1.系列的創(chuàng)建及屬性操作一維數(shù)據(jù)結(jié)構(gòu)(一維數(shù)組)與Numpy中的一維array類似。系列Series能保存不同種數(shù)據(jù)類型,字符串、boolean值、數(shù)字等都能保存在Series中。Series的創(chuàng)建格式如下:pd.Series(data=None,index=None,dtype=None)參數(shù)說明:data為傳入數(shù)據(jù),可以是Numpy中的ndarray或是列表等;index為索引,須唯一且與數(shù)據(jù)長度相等,默認會自動創(chuàng)建一個從0~N的整數(shù)索引;dtype為數(shù)據(jù)類型。Series提供了index和values兩個屬性,以操作Series對象中的索引和數(shù)據(jù)。【例3-14】創(chuàng)建Series、操作Series對象中的索引和數(shù)據(jù)屬性示例。importpandasaspd#導(dǎo)入pandas,別名為pds0=pd.Series([1,3,5,7])#創(chuàng)建系列,索引號默認從0開始s1=pd.Series([1,3,5,7],index=[1,2,3,4])#創(chuàng)建系列,指定索引號從1開始score=pd.Series({'數(shù)學(xué)':100,'英語':85,'政治':90,'信息':98})#字典創(chuàng)建系列print("s0索引號默認從0開始:\n{0}\ns1指定索引號從1開始:\n{1}\n字典創(chuàng)建系列:\\n{2}".format(s0,s1,score))#在{0}、{1}、{2}位置按變量列表順序輸出結(jié)果print("s0的index屬性:",s0.index,";s0的values屬性:",s0.values)#輸出s0的索引和屬性值print("s1[2]=",s1[2],"score['信息']=",score['信息'])

#通過索引來獲取系列數(shù)據(jù)運行結(jié)果:s0索引號默認從0開始:0113253749dtype:int64s1指定索引號從1開始:112335479dtype:int64字典創(chuàng)建系列:

數(shù)學(xué)100英語85政治90信息98dtype:int64s0的index屬性:RangeIndex(start=0,stop=5,step=1);s0的values屬性:[13579]2.數(shù)據(jù)幀的創(chuàng)建及屬性操作二維的表格型DataFrame是最常用的pandas對象,它是一個類似于二維數(shù)組或如Excel表格的對象,既有行索引,又有列索引。行索引(index)表示不同行,稱為0軸(axis=0);列索引(columns)表示不同列,稱為1軸(axis=1)。DataFrame的創(chuàng)建格式如下:pd.DataFrame(data=None,index=None,columns=None)參數(shù)說明:index、columns:行、列標簽,如果沒有傳入索引參數(shù),則會默認自動創(chuàng)建一個從0~N的整數(shù)索引。2.數(shù)據(jù)幀的創(chuàng)建及屬性操作二維的表格型DataFrame是最常用的pandas對象,它是一個類似于二維數(shù)組或如Excel表格的對象,既有行索引,又有列索引。行索引(index)表示不同行,稱為0軸(axis=0);列索引(columns)表示不同列,稱為1軸(axis=1)。DataFrame的創(chuàng)建格式如下:pd.DataFrame(data=None,index=None,columns=None)參數(shù)說明:index、columns:行、列標簽,如果沒有傳入索引參數(shù),則會默認自動創(chuàng)建一個從0~N的整數(shù)索引。表3-4DataFrame常用屬性【例3-15】創(chuàng)建DataFrame對象及操作DataFrame屬性示例。importpandasaspdimportnumpyasnpnp.random.seed(0)score=np.random.randint(30,101,(5,4))#隨機生成5名同學(xué)4門課成績(30到100分)score1=pd.DataFrame(score)#使用默認行列索引生成DataFrame對象#給成績數(shù)據(jù)增加行、列索引stu=['周贊','張?zhí)?,'任平','李為','周或']score2=pd.DataFrame(score,columns=['數(shù)學(xué)','英語','政治','信息'],index=stu)print("使用默認行列索引生成DataFrame對象score1:\n",score1)print("增加行列索引后生成DataFrame對象score2:\n",score2)運行結(jié)果:使用默認行列索引生成DataFrame對象score1:01230747794971973951662100428895369766755439509977增加行列索引后生成DataFrame對象score2:

數(shù)學(xué)

英語

政治

信息

周贊74779497

張?zhí)?7395166

任平100428895

李為69766755

周或39509977設(shè)表中DataFrame對象df與【例3-15】中的DataFrame對象score2相同。DataFrame對象score2:

數(shù)學(xué)

英語

政治

信息

周贊74779497

張?zhí)?7395166

任平100428895

李為69766755

周或39509977【例3-16】DataFrame對象數(shù)據(jù)排序操作示例。importpandasaspd#導(dǎo)入pandas,別名為pdimportnumpyasnp#導(dǎo)入numpy別名為npdata={'工號':['c1001','c1011','c1009','c1020','c1002'],'姓名':['周明','張紅','任芳','李黑','張或'],'年齡':[20,32,25,22,29]}

#字典的key對應(yīng)列標簽df=pd.DataFrame(data,index=[1,2,3,4,5])

#創(chuàng)建DataFrame#對象print("DataFrame對象:\n",df)age=df.sort_values(by='年齡')#按照'年齡'排序生成age(默#認升序),df本身數(shù)據(jù)不變print("按'年齡'升序排列:\n",age)rank3=df.sort_values('年齡',ascending=False)[:3]

#按照'年齡'降序排列(ascending=False)

print("'年齡'最大前三位:\n",rank3)#并取排列在前3行數(shù)據(jù)('年齡'最大的前三位)df.set_index('工號',inplace=True)#設(shè)置'工號'為新的index,df本身將被改變(inplace=True)isort=df.sort_index()#按照新設(shè)置的行索引index('工號')#進行排序,默認升序print('按索引排序:\n',isort)運行結(jié)果:DataFrame對象:

工號

姓名

年齡1c1001周明202c1011張紅323c1009任芳254c1020李黑225c1002張或29按'年齡'升序排列:

工號

姓名

年齡1c1001周明204c1020李黑223c1009任芳255c1002張或292c1011張紅32'年齡'最大前三位:

工號

姓名

年齡2c1011張紅325c1002張或293c1009任芳25按新索引'工號'排序:工號姓名年齡c1001周明20c1002張或29c1009任芳25c1011張紅32c1020李黑223.4.3Pandas讀寫文件操作Pandas支持CSV、SQL、XLS、JSON等許多文件格式的讀寫操作。Pandas分別使用pandas.read_csv()、pandas.to_csv()和pandas.read_excel()、pandas.to_excel()可分別實現(xiàn)對CSV格式文件(文本文件)的讀、寫和excel格式文件的讀、寫操作。【例3-17】Pandas對CSV格式文件與Excel格式文件的讀、寫操作示例。importpandasaspd#導(dǎo)入pandas,別名為pddata={'工號':['c1001','c1011','c1009','c1020','c1002'],'姓名':['周明','張紅','任芳','李黑','張或'],'年齡':[20,32,25,22,29]}#字典的key對應(yīng)列標簽df1=pd.DataFrame(data,index=[1,2,3,4,5])#創(chuàng)建DataFrame對象df1,自定義indexdf1.to_csv('person1.csv',index=False)#根據(jù)df1對象創(chuàng)建person1.csv(文件中不含index列)'''df1.to_csv('person1.csv',sep=';',index=False,mode='a')中參數(shù)含義:數(shù)據(jù)項以';'分隔,列標簽作為普通數(shù)據(jù)項存儲;mode='a'為文件內(nèi)容添加模式(mode='w'為默認的重寫文件內(nèi)容模式)'''df2=pd.read_csv("person1.csv",usecols=['工號','年齡'])#只讀入person1.csv的'工號','年齡'列print(df2)#輸出df2對象數(shù)據(jù)df3=df2.head(3)#選取df2的前三行數(shù)據(jù)(不含第3行)生成df3df3.to_excel('person2.xlsx',index=False)#由df3對象創(chuàng)建person2.xlsx(文件中不含index列)df4=pd.read_excel('person2.xlsx')#讀入Excel格式文件person2.xlsx生成df4print(df4)#輸出df4對象數(shù)據(jù)運行結(jié)果:工號

年齡0c1001201c1011322c1009253c1020224c100229

工號

年齡0c1001201c1011322c100925

第4章機器學(xué)習(xí)簡介4.1機器學(xué)習(xí)的概念機器學(xué)習(xí)(MachineLearning)是一門專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,通過學(xué)習(xí)與獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)以不斷改善自身性能的學(xué)科。簡而言之,機器學(xué)習(xí)就是基于“訓(xùn)練”海量數(shù)據(jù)樣本,通過學(xué)習(xí)獲得的智能模型算法以解決特定問題。4.1機器學(xué)習(xí)庫sklearnsklearn也稱為scikit-learn,是一個開源的基于Python語言的機器學(xué)習(xí)工具包,包含了眾多基于NumPy、SciPy和Matplotlib等Python科學(xué)計算庫的經(jīng)典機器學(xué)習(xí)算法。在工程應(yīng)用中,可根據(jù)數(shù)據(jù)特征從中選擇適合的算法,調(diào)用工具包中相關(guān)算法,并通過調(diào)整算法的參數(shù),實現(xiàn)高效的算法運用。klearn主要包括六個部分的常用功能模塊及算法:分類(Classification)模塊包括樸素貝葉斯(NaiveBayes)、邏輯回歸(LogisticRegression)、支持向量機(SVM)、神經(jīng)網(wǎng)絡(luò)(ANN)、k近鄰(KNN)等算法,回歸(Regression)模塊包括線性回歸(LinearRegression)、決策樹(DecisionTrees)、嶺回歸(RidgeRegression)、拉索(Lasso)、主成分分析(PCA)、支持向量機(SVM)等算法,聚類(Clustering)模塊包括k-均值(k-Means)、基于密度(DBSCAN)等聚類算法,數(shù)據(jù)降維(Dimensionalityreduction)、模型選擇及評估與數(shù)據(jù)預(yù)處理模塊包括數(shù)據(jù)歸一化、特征提取和特征轉(zhuǎn)換等方法??山柚⑽墓俜骄W(wǎng)站()查閱與學(xué)習(xí)sklearn的豐富功能。sklearn中文網(wǎng)站()提供中文版sklearn查閱與學(xué)習(xí)文檔。Anaconda3已集成安裝了sklearn機器學(xué)習(xí)庫(若選用別的IDE請參考sklearn官方網(wǎng)站Install菜單選項中的安裝幫助完成安裝)。以下代碼完成了sklearn庫導(dǎo)入、庫版本輸出,以及sklearn庫自帶“波士頓房價”數(shù)據(jù)集調(diào)入等任務(wù):importsklearn#sklearn機器學(xué)習(xí)庫導(dǎo)入importsklearn.datasetsasskl#sklearn庫自帶數(shù)據(jù)集導(dǎo)入,取別名為sklprint(sklearn.__version__)#輸出安裝的sklearn庫版本,系統(tǒng)變量version前后用雙下劃線dataset=skl.load_boston()#調(diào)入sklearn庫自帶的“波士頓房價”數(shù)據(jù)集print(dataset.data.shape)#輸出數(shù)據(jù)集的shape:(行數(shù),列數(shù))運行輸出:0.24.2(506,13)4.3機器學(xué)習(xí)組件Inforstack第5章數(shù)據(jù)預(yù)處理5.1

為什么要預(yù)處理數(shù)據(jù)不完整、不一致、含有噪聲的數(shù)據(jù)是現(xiàn)實世界數(shù)據(jù)的共同特點。數(shù)據(jù)預(yù)處理技術(shù)可以改進數(shù)據(jù)的質(zhì)量,從而有助于提高其后的挖掘過程的精度和性能。5.2

數(shù)據(jù)清洗現(xiàn)實世界的數(shù)據(jù)大多是不完整的、不一致的、含有噪聲的“臟數(shù)據(jù)”。不完整數(shù)據(jù)需要通過數(shù)據(jù)清洗方法來清理數(shù)據(jù)。數(shù)據(jù)清洗通過填寫空缺的值,識別異常值,消除噪聲,并糾正數(shù)據(jù)中的不一致來清理數(shù)據(jù)。5.2.1缺失值處理常將數(shù)據(jù)集中不含缺失值的變量稱為完全變量,把含有缺失值的變量稱為不完全變量。如表5-1所示,“收入”列就屬于不完全變量(其中,Na表示此項為缺失值),“性別和”和“職業(yè)”屬于完全變量。數(shù)據(jù)中的缺失值會影響挖掘的正常進行,可能造成挖掘結(jié)果的不正確。以下是缺失值處理的幾種方法:刪除將存在缺失信息屬性值的樣本(行)或特征(列)刪除,從而得到一個完整的數(shù)據(jù)表。優(yōu)點是簡單易行,在對象有多個屬性缺失值、被刪除的含缺失值的對象與初始數(shù)據(jù)集的數(shù)據(jù)量相比較小的情況下非常有效。缺點是當缺失數(shù)據(jù)所占比例較大,特別當缺失數(shù)據(jù)是非隨機分布時,這種方法可能導(dǎo)致數(shù)據(jù)發(fā)生偏離,從而引出錯誤的結(jié)論。(2)特殊值填充將空值作為一種特殊的屬性值來處理,它不同于其他的任何屬性值。例如,所有的空值都用同一個常數(shù)“unknown”來填充。(3)統(tǒng)計值填充將初始數(shù)據(jù)集中的屬性分為數(shù)值屬性和非數(shù)值屬性來分別進行處理。如果空值所在列是數(shù)值型的,就根據(jù)該屬性在其他所有對象的取值的統(tǒng)計值,例如,平均值、中位數(shù)、最大值或者最小值等來填充;如果空值所在列是非數(shù)值型的,就根據(jù)統(tǒng)計學(xué)中的眾數(shù)原理,用該屬性在其他所有對象的取值次數(shù)最多的值,即出現(xiàn)頻率最高的值,來補齊缺失值。借助另外一個屬性的值。例如,如果將顧客按照信用等級分類,則用具有相同信用等級的顧客的收入的統(tǒng)計值(如平均收入)替換收入列中的缺失值。(4)條件統(tǒng)計值填充(5)使用機器學(xué)習(xí)算法填充使用回歸、K-近鄰等機器學(xué)習(xí)的方法來構(gòu)建模型,將已知屬性值代入模型來估計未知屬性值,以此估計值來進行缺失填充。(6)不處理缺失值不處理缺失值,直接在包含空值的數(shù)據(jù)上進行數(shù)據(jù)挖掘的方法。有些機器學(xué)習(xí)的方法算法本身就可以處理缺失值。例如,決策樹和隨機森林等。簡單的統(tǒng)計分析拿到數(shù)據(jù)后,可以對數(shù)據(jù)進行一個簡單的描述性統(tǒng)計分析。例如,用最大值、最小值,可以用來判斷這個變量的取值是否超過了合理的范圍,如客戶的年齡為-20歲或200歲,顯然是不合常理的,視為異常值。

在統(tǒng)計學(xué)中,如果一個數(shù)據(jù)分布近似正態(tài)分布,在3σ原則下,異常值為一組測定值中與平均值的偏差超過3倍標準差的值。如果數(shù)據(jù)服從正態(tài)分布,距離平均值3σ之外的值出現(xiàn)的概率為P(|x-u|>3σ)≤0.003,屬于極個別的小概率事件;如果數(shù)據(jù)不服從正態(tài)分布,也可以用遠離平均值的多少倍標準差來描述。(3)箱型圖箱型圖通過分位數(shù)對數(shù)值型數(shù)據(jù)進行圖形化描述,這是一種非常簡單但有效的異常值可視化方法。箱型圖的形狀特征如圖5-2所示,其中:Q1為下四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它小。Q3為上四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它大。IQR為四分位數(shù)間距,是上四分位數(shù)Q3與下四分位數(shù)Q1的差值,IQR=Q3-Q1,包含了全部觀察值的一半。5.2.2異常值識別異常值通常被稱為“離群點”,

它顯著不同于其他數(shù)據(jù)對象,與其他數(shù)據(jù)分布有較為顯著的不同。當為機器學(xué)習(xí)模型準備數(shù)據(jù)集時,檢測出所有的異常值后,要么移除它們;要么分析它們以了解其最初存在的原因是非常重要的。常用的異常值識別的方法:

(4)基于聚類聚類就是將數(shù)據(jù)集中的對象根據(jù)特征相似程度分成若干個類或簇(cluster),在同一個類中的對象之間具有較高的相似度,而不同類中的對象差別較大。直觀地看,落在聚類集合之外的值被視為異常值,如圖5-3所示。使用回歸算法進行異常值識別,主要指的是在特定模型的基礎(chǔ)上相對遠離預(yù)測值的值,而非考慮樣本特征(自變量)之間的關(guān)系。真實值與模型預(yù)測值之間的差值可以用來衡量這個數(shù)據(jù)點是多么異常。(5)基于回歸回歸分析(RegressionAnalysis)指的是確定兩個或兩個以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法。5.2.3噪聲處理噪聲是一個測量變量中的隨機錯誤或偏差,是觀測值和真實值之間的誤差,包括錯誤值或偏離期望的孤立點值。對于噪音的處理,通??梢圆捎脭?shù)據(jù)平滑技術(shù)來消除噪聲。下面將介紹幾種數(shù)據(jù)平滑技術(shù)。

價格的排序后數(shù)據(jù)(美元):2,6,7,9,13,20,21,25,30。使用等深方法進行劃分,劃分后的結(jié)果為:Bin1=[2,6,7],Bin2=[9,13,20],Bin3=[21,24,30]。不同方法執(zhí)行數(shù)據(jù)平滑后的結(jié)果如表5-2所示。5.2.4不一致數(shù)據(jù)在實際數(shù)據(jù)庫中,由于一些人為因素或者其他原因,記錄的數(shù)據(jù)可能存在不一致的情況。因此,需要對這些不一致數(shù)據(jù)在分析前進行清理。

5.3數(shù)據(jù)變換數(shù)據(jù)變換是指將數(shù)據(jù)從一種表示形式變?yōu)榱硪环N表現(xiàn)形式的過程,目標是將數(shù)據(jù)轉(zhuǎn)換為更適合于挖掘的形式。常見的數(shù)據(jù)變換可能涉及如下內(nèi)容:屬性構(gòu)造:根據(jù)給定屬性中構(gòu)造新的屬性,或者將屬性類別進行變換,輔助數(shù)據(jù)挖掘過程。規(guī)范化:將屬性數(shù)據(jù)按比例縮放,使之落入一個特定的區(qū)間,如[-1,1]或者[0,1],以便消除屬性之間的量綱和取值范圍差異的影響。離散化:將數(shù)值屬性的原始值用區(qū)間標簽或概念標簽進行替換。如年收入數(shù)據(jù),可以通過2-3W、3-5W等區(qū)間符號標識,也可以用高收入、中等收入、低收入進行離散化。屬性編碼:將類別屬性轉(zhuǎn)換為數(shù)值屬性的過程,如性別、職業(yè)、收入水平、國家、汽車使用品牌等類別屬性轉(zhuǎn)換為數(shù)值型。

1.總和規(guī)范化總和規(guī)范化處理后的數(shù)據(jù)值之和為1??偤鸵?guī)范化的公式如下所示:2.Z-Score規(guī)范化Z-Score規(guī)范化使用原始數(shù)據(jù)的均值(Mean)和標準差(StandardDeviation)進行數(shù)據(jù)的規(guī)范化,同時不改變原始數(shù)據(jù)的分布。它可以去除數(shù)據(jù)的單位限制,將其轉(zhuǎn)化為無量綱的純數(shù)值,便于不同單位或量級的指標能夠進行比較和加權(quán)。Z-Score規(guī)范化的公式如下所示:其中:Z-Score規(guī)范化處理后所得到的新數(shù)據(jù)的平均值為0,標準差為1。如果數(shù)據(jù)中有離群點,對數(shù)據(jù)進行Z-Score標準化效果并不好,這時可以由中位數(shù)(Median)取代平均值,用平均絕對離差(AAD)或中值絕對離差(MAD)取代標準差來修正。平均絕對離差(AAD:AverageAbsoluteDeviation)的公式如下:中值絕對離差(MAD:MedianAbsoluteDeviation)是用原數(shù)據(jù)減去中位數(shù)后得到的新數(shù)據(jù)的絕對值的中位數(shù),計算公式如下:3.最小-最大規(guī)范化最小-最大規(guī)范化的公式如下所示:

4.極大值規(guī)范化極大值規(guī)范化的公式如下所示:極大值規(guī)范化后的新數(shù)據(jù)的最大值為1,其余各項都小于1。5.對數(shù)變換規(guī)范化公式(5-9)所示的對數(shù)變換能夠縮小數(shù)據(jù)的絕對范圍,其目的是它能夠讓變換后的數(shù)據(jù)符合所做的假設(shè)(比如服從正態(tài)分布),從而能夠運用已有理論上對其進行分析。5.3.3屬性編碼有些算法比如線性回歸,輸入的變量通常需要是數(shù)值型的,所以需要將非數(shù)值型屬性轉(zhuǎn)換為數(shù)值特征,如性別、職業(yè)、收入水平、國家、汽車使用品牌等。屬性編碼,也可以稱為特征編碼,依據(jù)是否需要標簽信息,可以分為無監(jiān)督編碼和有監(jiān)督編碼。無監(jiān)督編碼是直接對原始離散變量自身進行變量編碼,完成數(shù)值化的過程。常用的方法包括標簽編碼、One-Hot編碼和啞變量編碼等方法。如果考慮目標變量,則變量編碼的過程可能會使離散變量的數(shù)值化過程更具有方向性,這就是有監(jiān)督編碼,常用的方法有WOE編碼。1.標簽編碼離散變量分為可排序變量和不可排序變量。可排序是指變量間存在等級差異,比如崗位等級分為普通級、專員級、經(jīng)理級、總監(jiān)級、首席級等,有明顯的等級順序,即其距離是不相等的;而不可排序變量是不存在等級差異的,比如性別分為男、女,本質(zhì)上男與女是沒有差異的,即變量之間的距離是相等的。在離散變量中,可排序的變量的數(shù)值化轉(zhuǎn)換時,如果希望保留等級大小關(guān)系,則需要用標簽編碼(Label編碼)來完成。例如離散變量收入水平,其取值為{低收入,中等收入,高收入}。很明顯,低收入<中等收入<高收入,并且不同收入間的距離也是不相同的,即高收入與低收入、中收入的距離是不同的。一種簡單的標簽編碼方法是從1開始賦予屬性的每一個取值一個整數(shù)值。對于有序類別型屬性,按照屬性取值從小到大進行整數(shù)編碼可以保證編碼后的數(shù)據(jù)保留原有的次序關(guān)系。例如,原屬性:收入水平={低收入,中等收入,高收入}。編碼后,收入水平={1,2,3},值越大表示收入水平越高。對于不可排序的離散型屬性,上述標簽編碼方法可能會產(chǎn)生一些問題。例如汽車品牌={路虎,吉利,奧迪,大眾,奔馳},經(jīng)過標簽編碼后轉(zhuǎn)換成汽車品牌={1,2,3,4,5}。在使用編碼后的數(shù)據(jù)進行分析時,相當于給原本不存在次序關(guān)系的“汽車品牌”特征引入了次序關(guān)系。這可能會導(dǎo)致后續(xù)的建模分析產(chǎn)生錯誤的結(jié)果。例如吉利與路虎之間的距離比奔馳與路虎之間的距離較小。為了避免上述誤導(dǎo)性的結(jié)果,對于離散型特征(特別是不可排序的離散型特征),可以使用另外一種編碼方法One-Hot編碼。2.One-Hot獨熱編碼One-Hot編碼又稱為獨熱編碼,它將包含M個取值的離散型特征轉(zhuǎn)換成M個二元特征,一位代表一種狀態(tài),有多少個狀態(tài)就有多少個位,且只有該狀態(tài)所在位為1,其他位都為0。例如,上例“汽車品牌”特征,一共包含5個不同的值??梢詫⑵渚幋a為5個特征f1、f2、f3、f4和f5,這5個特征與原始特征“汽車品牌”的取值一一對應(yīng)。當原始特征取不同值時,轉(zhuǎn)換后的特征的取值如表5-3所示。表5-3獨熱編碼后的特征值通過One-Hot編碼之后,離散變量的每一個維度都可以看成一個連續(xù)變量。編碼后的變量,其數(shù)值范圍已經(jīng)在[0,1],這與變量歸一化效果一致。3.啞變量編碼與One-Hot編碼類似,啞變量(DummyVariable)編碼也是一種無監(jiān)督編碼方式,同樣采用二進制編碼的方式來表示變量的值。不同的是,啞變量編碼用較小的維度來表示變量的取值。如果離散變量的種類有M個,啞變量編碼只用M-1維就可以表示M種可能出現(xiàn)的取值。對于一個包含M個取值的離散型特征,通常需要選取1個分類作為參照,將其轉(zhuǎn)換成M-1個啞變量。當所有M-1個啞變量取值都為0的時候,這就是該變量的第M類屬性,并將這類屬性作為參照。例如,特征“汽車品牌”,一共包含5個不同的取值,將“奔馳”選為參照,可以將其編碼為4個二元特征,轉(zhuǎn)換后的特征取值如表5-4所示。原始特征取值f1f2f3f4路虎1000吉利0100奧迪0010大眾

0001奔馳

00005-4啞變量編碼后的特征值與One-hot編碼相比,啞變量編碼可以用更小的空間去表示離散變量的值。4.WOE編碼WOE(WeightofEvidence)編碼是評分卡中最常用的有監(jiān)督編碼方法。WOE編碼既可以對離散變量編碼,也可以對分箱后的連續(xù)變量編碼。WOE的計算公式如下:

5.3.4離散化數(shù)據(jù)離散化是把無限空間中有限的個體映射到有限的空間中,即將連續(xù)的數(shù)據(jù)進行分組,使其變?yōu)橐欢坞x散化的區(qū)間。數(shù)據(jù)離散化操作大多是針對連續(xù)數(shù)據(jù)進行的,處理之后的屬性類型將從連續(xù)型變?yōu)殡x散型,這種屬性一般包含2個或2個以上的數(shù)值區(qū)間。根據(jù)數(shù)據(jù)集是否包含類別信息,即目標變量,可以將它們分成有監(jiān)督的數(shù)據(jù)和無監(jiān)督的數(shù)據(jù)。有監(jiān)督的離散化需要使用類別信息而無監(jiān)督的離散化則不需要。1.無監(jiān)督離散化(1)等寬(距)分箱按照等距離進行分箱,即每個分箱的間距(寬度)相等。例如年齡變量在0和100之間,分成k=5個箱,可分成[0,20),[20,40),[40,60),[60,80),[80,100]五個等寬的箱。詳細信息參考章節(jié)5.2.2。(2)等深(頻)分箱按照等數(shù)量進行分箱,即每個分箱中的樣本數(shù)量相等。例如,總樣本n=100,分成k=5個箱,等深分箱原則是保證落入每個箱的樣本量基本為20。詳細信息參考章節(jié)5.2.2。(3)基于聚類聚類算法可以用來將數(shù)據(jù)劃分成簇或群?;贙-均值的離散化過程如下:1)由用戶指定離散化產(chǎn)生的區(qū)間數(shù)目K,K-均值算法先從數(shù)據(jù)集中隨機找出K個數(shù)據(jù)作為個初始區(qū)間的重心;2)基于歐式距離,對所有的對象進行聚類:如果數(shù)據(jù)距某個重心距離最近,則將它劃歸這個重心所代表的那個區(qū)間;3)重新計算各區(qū)間的重心;4)重復(fù)步驟2)~3),直到滿足停止條件。2.有監(jiān)督離散化有監(jiān)督離散化的目的是增加變量的預(yù)測能力或減少變量的自身冗余。當預(yù)測能力不再提升或冗余性不再降低時,則分箱完畢。因此,分箱過程是一個優(yōu)化過程。有監(jiān)督離散化就是基于目標函數(shù)來計算分箱的區(qū)間邊界的過程,優(yōu)化的目標函數(shù)可以是信息熵、信息增益和卡方值等。優(yōu)化的約束條件可以是分箱數(shù)限制(一般不要大于10箱)。

溫度646568697071727580類別YesYesYesYesYesNoYesNoNo表5-5溫度變量和對應(yīng)的類別

表5-7列聯(lián)表中的實際觀察值表5-8列聯(lián)表中的期望值使用公式(5-13)計算卡方值:5.4數(shù)據(jù)歸約假定從數(shù)據(jù)倉庫選擇的用于分析的數(shù)據(jù)集非常大,在海量數(shù)據(jù)上進行復(fù)雜的數(shù)據(jù)分析和挖掘?qū)⑿枰荛L時間,使得這種分析不現(xiàn)實或不可行。數(shù)據(jù)歸約技術(shù)可以用來得到數(shù)據(jù)集的歸約表示,它小得多,但仍接近地保持原數(shù)據(jù)的完整性。這樣,在歸約后的數(shù)據(jù)集上挖掘?qū)⒏行?,并產(chǎn)生相同(或幾乎相同)的分析結(jié)果。數(shù)據(jù)歸約的策略如下:數(shù)據(jù)聚集:在數(shù)據(jù)集中進行聚集操作,例如對銷售額按年、按部門匯總求和。維度規(guī)約:可以檢測并刪除不相關(guān)、弱相關(guān)或冗余的屬性或維度。例如,一個汽車數(shù)據(jù)的樣本,里面既有“千米/每小時”的速度屬性,也有“英里/小時”的速度屬性,顯然有一個多余,需要消除冗余的屬性。維度歸約是針對原始數(shù)據(jù)中的屬性特征。數(shù)據(jù)抽樣:使用抽樣技術(shù),用較小的數(shù)據(jù)表示原有的大數(shù)據(jù)。數(shù)據(jù)抽樣是針對原始數(shù)據(jù)集中的樣本記錄。5.4.1數(shù)據(jù)聚集假如已經(jīng)為銷售分析收集了數(shù)據(jù),這些數(shù)據(jù)有2015到2020年每日的銷售數(shù)據(jù)組成?,F(xiàn)在想要預(yù)測未來每月的銷售額幫助業(yè)務(wù)部門進行生產(chǎn)和銷售的規(guī)劃。此時,需要對這份原始數(shù)據(jù)進行聚集,按照每月進行匯總,求每月的銷售總額,形成一份新的分析數(shù)據(jù)集。因此,這樣的聚集可以使數(shù)據(jù)量小的,并且不會丟失分析任務(wù)所需的信息。聚集是將兩個或多個對象合并成單個對象。從維度上講,聚集就是壓縮特定屬性不同值個數(shù)的過程,屬于樣本規(guī)約。常用的一些聚集函數(shù)有計數(shù)、總和、平均值、中值、最大值、最小值、百分位數(shù)、標準差等。5.4.2維度歸約用于數(shù)據(jù)分析的數(shù)據(jù)可能包含數(shù)以百計的屬性,其中大部分屬性與挖掘任務(wù)不相關(guān),是冗余的。例如,如果分析任務(wù)是按顧客

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論