版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第1章
數(shù)據(jù)的管理與探索金融大數(shù)據(jù)學習
1.1
學習目標
熟悉不同數(shù)據(jù)存儲設備的功能及使用場景
理解常用數(shù)據(jù)存儲的文件格式及優(yōu)缺點
掌握運用Pandas,seaborn以及matplotlib程序庫的能力,并可以使用這些程序?qū)?shù)據(jù)進行初步探索以及整理1.2金融數(shù)據(jù)管理的挑戰(zhàn)與機遇金融市場產(chǎn)生大量的數(shù)據(jù)給從業(yè)人員以及監(jiān)管機構(gòu)提供了寶貴的材料。例如,股市中的許多指標可以幫助我們預測公司未來的基本面;銀行接觸到大量的轉(zhuǎn)賬信息可以為金融機構(gòu)的決策作出非常重要的參考。本書的第一個課題是如何存儲以及管理這些數(shù)據(jù)。我們可以先通過簡單的分析理解數(shù)據(jù)的特性,了解數(shù)據(jù)中的基本信息。這些信息既能幫助我們掌握數(shù)據(jù)的特點,也能為我們向數(shù)據(jù)提出的問題提供一些初步的參考。在本章中,我們將介紹一些基本的數(shù)據(jù)存儲與讀寫的概念,并且介紹之后會經(jīng)常使用的程序庫。具體來說,本章將介紹三個課題:1、數(shù)據(jù)的存儲與使用2、用于數(shù)據(jù)的管理以及初步分析的Pandas程序包3、用于數(shù)據(jù)可視化的matplotlib以及seaborn程序包1.3數(shù)據(jù)的存儲與使用1.3.1內(nèi)存與硬盤我們的討論,主要圍繞內(nèi)存與硬盤兩個設備,二者區(qū)別如下:1、內(nèi)存往往速度更快,但是其容量較?。ǔR姷膬?nèi)存在8到64GB之間)。硬盤的容量較大(其容量經(jīng)常在250GB到幾TB之間),但是往往存儲與讀寫的速度偏慢。2、二者更重要的區(qū)別在于:內(nèi)存屬于易失性存儲設備,而硬盤屬于非易失性存儲設備(當關(guān)機或重啟電腦之后,內(nèi)存中的數(shù)據(jù)會被清空,而硬盤中的數(shù)據(jù)則一般不會受到影響)。因此,我們在存儲以及使用數(shù)據(jù)的過程中,需要這兩種設備的協(xié)同運作:通常,我們會將我們得到的數(shù)據(jù)存儲到硬盤之中,便于我們長期保存。但是,當我們需要進行數(shù)據(jù)分析的時候,我們則需要將數(shù)據(jù)讀入內(nèi)存之中(內(nèi)存存儲與讀寫速度較快,將程序執(zhí)行中即將要使用的數(shù)據(jù)暫時存入內(nèi)存,可以極大加速程序運行的速度)。1.3.2
數(shù)據(jù)存儲的格式在實際操作中,可以將數(shù)據(jù)存入各種格式的數(shù)據(jù)之中,如EXCEL中的CSV和XLSX格式,數(shù)據(jù)提供商需要程序接觸的JOSN文件,大數(shù)據(jù)存儲的Parquet格式。表1.1將以上幾種格式進行了比較:1、較小的數(shù)據(jù)常用CSV和XLSX格式保存,閱讀這些文件非常簡單直接,但最大的問題是讀寫速度較慢以及其占用的存儲空間較大。2、當數(shù)據(jù)量巨大時,我們應將數(shù)據(jù)以Parquet格式保存,其優(yōu)勢在于易于存儲與讀寫。3、JSON在網(wǎng)絡應用中有著非常廣泛的應用,由于其格式清晰,我們非常容易能使用程序來抓去這些數(shù)據(jù)中的關(guān)鍵信息。但是因為該文件以文本形式存儲,因此讀寫速度往往也不是最優(yōu)。文件類型CSVParquetXLSXJSON數(shù)據(jù)結(jié)構(gòu)平面,表格列式存儲單元格的電子表格層次化,鍵值對文件大小一般較大壓縮后較小由于格式化而較大變化較大,通常較大讀/寫速度讀取快,大文件寫入慢讀取操作非常快,特別是在大數(shù)據(jù)集上由于格式復雜而較慢小文件快,大型或復雜結(jié)構(gòu)慢人類可讀性高(基于文本)低(二進制格式)中等(需要軟件讀?。└撸ɑ谖谋荆┑湫陀美唵蔚谋砀駭?shù)據(jù),快速數(shù)據(jù)交換大數(shù)據(jù)分析,高效存儲和快速查詢商務報告,財務分析,
帶有豐富格式的數(shù)據(jù)網(wǎng)絡API,配置,
具有嵌套結(jié)構(gòu)的數(shù)據(jù)表1.1:不同數(shù)據(jù)格式的比較1.4Pandas與Matplotlib簡介1.4.1Pandas簡介Pandas是一個開源的Python數(shù)據(jù)分析庫,廣泛用于快速分析數(shù)據(jù),以及數(shù)據(jù)清洗和準備等任務。它提供了高效的DataFrame對象,這是一種表格型的數(shù)據(jù)結(jié)構(gòu),具有對數(shù)據(jù)操作的各種功能,包括數(shù)據(jù)過濾、轉(zhuǎn)換、聚合等。Pandas非常適合處理結(jié)構(gòu)化數(shù)據(jù),如時間序列、表格數(shù)據(jù)和任何以行和列組織的數(shù)據(jù)集。此庫的目的是為了提供一個高效、易用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。Pandas利用NumPy來提高其數(shù)據(jù)處理的速度和效率。其還支持讀取和寫入多種文件格式,如CSV、Excel、JSON、Parquet。Pandas是數(shù)據(jù)科學和數(shù)據(jù)分析領域中不可或缺的工具之一,它的設計使得Python成為強大且直觀的數(shù)據(jù)分析環(huán)境,極大地提高了數(shù)據(jù)處理的效率和質(zhì)量。Pandas的弱點1、Pandas一般來說需要將一個文件中的所有數(shù)據(jù)都讀入內(nèi)存才能對其進行高效操作。因此,如果有的數(shù)據(jù)集過大,那么Pandas將無法高效處理這些數(shù)據(jù)。2、另外,在數(shù)據(jù)處理過程中常用的SQL語言在Pandas沒有相應的支持。如果需要在Pandas中使用SQL,我們必須安裝額外的程序包。1.4.2數(shù)據(jù)可視化程序庫簡介介紹兩個常用的Python數(shù)據(jù)可視化程序包:Matplotlib簡介Matplotlib是一個用于Python編程語言和其數(shù)值數(shù)學擴展庫NumPy的繪圖庫。Matplotlib廣泛應用于數(shù)據(jù)可視化領域,無論是繪制簡單的折線圖、條形圖、散點圖,還是更復雜的圖表類型,如誤差線圖、直方圖、3D圖形等,Matplotlib都能勝任。它的靈活性和易用性使得它成為Python數(shù)據(jù)可視化的基石之一,廣泛用于學術(shù)研究、工業(yè)應用以及許多數(shù)據(jù)分析和數(shù)據(jù)科學項目。Seaborn簡介Seaborn是基于matplotlib的Python數(shù)據(jù)可視化庫,提供了一個高級接口來繪制吸引人且信息豐富的統(tǒng)計圖形。Seaborn的目標是使可視化成為探索和理解數(shù)據(jù)的核心部分。它具有內(nèi)置主題、支持多種統(tǒng)計圖表類型、與Pandas數(shù)據(jù)框架良好集成、自動統(tǒng)計估計和錯誤條顯示、分面功能以及可高度自定義,非常適合進行統(tǒng)計分析和數(shù)據(jù)呈現(xiàn)。1.5程序:數(shù)據(jù)的管理以及初步探索1.5.1使用Pandas讀取,整理數(shù)據(jù)
數(shù)據(jù)讀入與整理我們用虛擬的投資者收入,性別,以及股票投資組合金額的數(shù)據(jù)來解釋如何使用Pandas模塊。導入程序庫:importpandasaspd使用pandas程序庫讀入csv文件中的數(shù)據(jù):df=pd.read_csv("incomestock.csv")讀入數(shù)據(jù)后,我們需要快速檢查數(shù)據(jù)讀入的結(jié)果。例如,數(shù)據(jù)中有哪些信息,以及這些數(shù)據(jù)的格式。我們可以用head()這個方法來查看前幾行數(shù)據(jù)。print(df.head())結(jié)果如下圖:我們用df.head(5)來現(xiàn)實df這個數(shù)據(jù)幀中的前五行。其中,第一列數(shù)字是這個數(shù)據(jù)幀的索引。這個索引便于我們找到數(shù)據(jù)的位置。該索引是從0開始計數(shù)的。這個數(shù)據(jù)中的每一個行對應的是一個用戶。每一列對應的是我們存儲的關(guān)于該用戶的信息。.1數(shù)據(jù)幀的基本信息接下來,我們來檢驗一下數(shù)據(jù)量具體多少。并且,數(shù)據(jù)幀中的變量分別是以什么格式存儲的。print(df.shape)print(df.dtypes)結(jié)果如右圖:用df.shape來查看數(shù)據(jù)幀的大小。(10,4)說明這個數(shù)據(jù)幀中有10行,4列,即有10個樣本,每個樣本有四個變量。df.dtypes說明了數(shù)據(jù)分別是什么格式。其中income是用int64(整數(shù))存儲。stock是用float64(實數(shù))格式存儲。其他數(shù)據(jù)是object格式。這種格式一般是用來存儲字串。.2獲取變量信息如果我們只要使用一個變量,那么我們可以用方括號來查看一個變量。stock=df['stock']print(stock)結(jié)果如下圖:.3獲取行信息如果我們需要查看一個用戶,那么我們可以續(xù)用.iloc[索引]來查看一行。user_0=df.iloc[0]print(user_0)結(jié)果如下圖:.4獲取子數(shù)據(jù)集我們也可以篩選數(shù)據(jù)。例如,下面我們將性別為男性的用戶篩選出來,存入一個新的數(shù)據(jù)幀。df_male=df[df['gender']=='M']print(df_male.head())結(jié)果如下圖:我們也可以疊加選擇條件。例如,我們需要選取用戶性別為男,并且收入超過100000的用戶。注意,因為我們需要使用兩個篩選條件,此時我們需要使用邏輯操作&(也就是and),以表示我們需要兩個條件同時達到才會選入。df_male_highinc=df[(df['gender']=='M')&(df['income']>100000)]print(df_male_highinc)結(jié)果如下圖:.5生成新變量我們也可以通過數(shù)據(jù)幀中的兩個或多個變量來生成新的變量。比如,我們可以生成投資組合與收入的一個比例(income/stock)。df['income_stock_ratio']=df['income']/df['stock']print(df.head(5))結(jié)果如下圖:.6
數(shù)據(jù)的初步探索我們將用pandas的內(nèi)置功能,對數(shù)據(jù)進行初步探索。首先,我們先對變量的平均值,標準方差,最小值最大值等一系列信息進行總結(jié)。df['income'].describe()結(jié)果如下圖:我們可以分別對男性用戶以及女性用戶的信息進行總結(jié)。在此,我們需要用到groupby這個方法。groupby可以幫助我們將數(shù)據(jù)放到不同的子集中。同時,agg方法幫我們計算匯總統(tǒng)計信息。grouped_stats=df.groupby('gender')[['income','stock']].agg(['mean','median','std'])print(grouped_stats)結(jié)果如下圖:.7數(shù)據(jù)合并
有時我們需要從不同的數(shù)據(jù)集中取得用戶信息,即我們可能需要合并多個數(shù)據(jù)。使用pandas有許多合并數(shù)據(jù)的方法,在這里我們只介紹一種方法。接下來,將用戶的學習成績(GPA)與他們的收入,股市信息合并。df_gpa=pd.read_csv('gpa.csv')df_gpa.head(5)結(jié)果如下圖:合并兩個數(shù)據(jù)集。我們要求兩個數(shù)據(jù)集中的用戶id對齊。df_merged=pd.merge(df,df_gpa,on='id')print(df_merged)結(jié)果如下圖:.8數(shù)據(jù)存儲最后,我們將數(shù)據(jù)存入csv文件。df_merged.to_csv('merged.csv')1.5.2數(shù)據(jù)可視化以及數(shù)據(jù)的探索
如何進行數(shù)據(jù)可視化數(shù)據(jù)可視化是對數(shù)據(jù)進行初步了解的重要方法,業(yè)界中將數(shù)據(jù)進行可視化有助于更清晰的傳遞數(shù)據(jù)中所蘊含的信息。首先,我們不僅需要使用matplotlib來控制圖形大小以及輸出,還會使用seaborn來進行數(shù)據(jù)可視化。因此,我們需要導入這兩個庫。importseabornassnsimportmatplotlib.pyplotasplt.1
導入數(shù)據(jù)我們將用seaborn程序包自帶的tips數(shù)據(jù)來對其功能進行說明。本數(shù)據(jù)中有小費的總量(tip),用餐的價格(totalbill),還有用餐人數(shù)(size)等信息。tips=sns.load_dataset('tips')tips.head()結(jié)果如下圖:.2直方圖直方圖(Histogram)是一種統(tǒng)計報告圖,用于展示一系列數(shù)據(jù)分布的情況。它通過將數(shù)據(jù)分組(通常是等寬的連續(xù)區(qū)間),然后計算每個組中的數(shù)據(jù)點數(shù)量(頻率或頻數(shù)),用柱狀圖的形式來表示。從直方圖中,我們可以獲得以下信息:1、分布的形狀:直方圖可以展示數(shù)據(jù)是對稱分布的,還是偏斜(向左或向右偏斜)。2、中心的位置:直方圖幫助我們估計數(shù)據(jù)的平均值或中位數(shù)所在的大致位置。3、變異程度:通過觀察柱狀圖的寬度和分布,我們可以了解數(shù)據(jù)的波動程度或離散程度。4、異常值:直方圖還可以幫助我們發(fā)現(xiàn)數(shù)據(jù)中的異常值或離群點。我們使用直方圖來查看數(shù)據(jù)分布,并著重分析每單小費中小費(tip)的金額。plt.figure(figsize=(8,6))sns.histplot(tips['tip'],kde=True,color='blue')plt.title('HistogramofTotalTipAmounts')plt.xlabel('Tip')plt.ylabel('Frequency')plt.show()結(jié)果如右圖所示:.3箱形圖箱形圖(BoxPlot),也稱為盒須圖,是另一種用于顯示數(shù)據(jù)分布統(tǒng)計特征的圖表。箱形圖通過五數(shù)概括(最小值、第一四分位數(shù)(Q1)、中位數(shù)、第三四分位數(shù)(Q3)、最大值)來描述數(shù)據(jù)的分布情況,同時也能展示出數(shù)據(jù)的異常值。箱形圖的構(gòu)成如下:1、箱子:箱子的底部和頂部分別表示第一四分位數(shù)(Q1)和第三四分位數(shù)(Q3),箱子的長度代表了數(shù)據(jù)的四分位距(IQR),可以用來衡量數(shù)據(jù)的集中趨勢和離散程度。2、中位線:箱子內(nèi)部的線表示數(shù)據(jù)的中位數(shù),反映了數(shù)據(jù)的中心位置。3、須:箱子外的兩條線(須)延伸至箱子外的最小值和最大值,但不包括異常值。這些線表示數(shù)據(jù)分布的范圍。4、異常值:用點表示的離群點,通常是那些小于Q1-1.5IQR或大于Q3+1.5IQR的值。相較于直方圖,箱形圖更為簡潔。因此可以展示一個變量在不同子集中的分布。plt.figure(figsize=(10,7))sns.boxplot(data=tips,x='day',y='tip',palette='rainbow')plt.title('BoxPlotofTipbyDayoftheWeek')plt.xlabel('DayoftheWeek')plt.ylabel('Tip')plt.show()結(jié)果如右圖,我們發(fā)現(xiàn)周四(Thur)與周六(Sat)都有一些異常高的小費。.4
條形圖條形圖(BarPlot)是一種在研究中常用的數(shù)據(jù)可視化類型,它通過條形的長度來表示各類別的數(shù)據(jù)量或數(shù)值的大小,非常適用于展示和比較不同類別或組之間的數(shù)量關(guān)系。條形圖可以是垂直的也可以是水平的,這取決于數(shù)據(jù)展示的需求。通過條形圖,我們可以獲得以下信息:1、類別比較:直觀比較不同類別或組的數(shù)值大小。2、數(shù)據(jù)的分布:觀察不同類別中數(shù)據(jù)的分布情況。3、趨勢識別:識別數(shù)據(jù)隨時間或順序變化的趨勢。有的條形圖上有誤差棒(ErrorBars)。誤差棒用來表示數(shù)據(jù)的變異度、不確定性或置信區(qū)間,在下圖中,誤差棒的長度代表的是95%置信區(qū)間,有助于幫助我們理解數(shù)據(jù)的穩(wěn)定性和變異范圍。#Barplotofaveragetotalbillbydayplt.figure(figsize=(8,6))sns.barplot(data=tips,x='time',y='tip',palette='coolwarm')plt.title('AverageTipbyMeal')plt.xlabel('Meal')plt.ylabel('AverageTip')plt.show()結(jié)果如下圖:我們分別描述的是午餐(Lunch)以及晚餐(Dinner)的平均小費量。.5散點圖散點圖(ScatterPlot)是數(shù)據(jù)可視化中一種基本且常用的圖表類型,它通過在二維平面上的點來表示兩個數(shù)值變量之間的關(guān)系。每個點的位置由其所對應的變量值決定,分別在X軸和Y軸上表示。散點圖主要用于探索和展示兩個連續(xù)變量之間是否存在某種相關(guān)關(guān)系,以及這種關(guān)系的強度和方向。通過散點圖,我們可以獲得以下信息:1、相關(guān)性:觀察兩個變量之間是否存在線性關(guān)系或非線性關(guān)系。如果數(shù)據(jù)點近似分布在一條直線附近,說明變量之間存在線性相關(guān)性;如果分布呈現(xiàn)某種曲線模式,說明存在非線性關(guān)系。2、關(guān)系的方向:數(shù)據(jù)點的分布趨勢可以顯示變量之間的關(guān)系是正向的(即一個變量增加時,另一個變量也增加)還是負向的(即一個變量增加時,另一個變量減少)。3、異常值:在散點圖中,遠離其他數(shù)據(jù)點的點可能表明異常值或離群點,這些點可能需要進一步分析。4、數(shù)據(jù)的聚集程度:數(shù)據(jù)點的密集程度可以反映變量之間關(guān)系的強度。點越密集,說明兩個變量之間的關(guān)系越緊密。散點圖是探索性數(shù)據(jù)分析(EDA)中非常重要的工具,可以幫助研究人員發(fā)現(xiàn)數(shù)據(jù)中的模式、趨勢和異常值,為后續(xù)的深入分析和建模提供線索。plt.figure(figsize=(8,6))sns.scatterplot(data=tips,x='total_bill',y='tip')plt.title('ScatterPlotofTotalBillvs.Tip')plt.xlabel('TotalBill')plt.ylabel('Tip')plt.show()結(jié)果如下圖所示:我們使用散點圖來可視化用餐費用(totalbill)和小費(tip)之間的關(guān)系。顯而易見,這兩個變量成正相關(guān)關(guān)系。.6
熱圖熱圖(Heatmap)是一種數(shù)據(jù)可視化技術(shù),用于顯示兩個類別變量之間的矩陣數(shù)據(jù)以及這些數(shù)據(jù)的量值。它通過不同的顏色來表示數(shù)據(jù)點的大小或數(shù)值,顏色的深淺通常與數(shù)據(jù)值的大小成正比。熱圖常用于展示數(shù)據(jù)的分布、變化或者兩個變量之間的相關(guān)性等。通過熱圖,我們可以獲得以下信息:1、數(shù)據(jù)模式:熱圖可以幫助識別數(shù)據(jù)中的模式,例如,某些變量組合是否頻繁出現(xiàn)或者某些值是否異常高或低。2、數(shù)據(jù)的比較:通過顏色的對比,可以快速比較不同類別或組合之間的數(shù)據(jù)差異。3、相關(guān)性:在展示變量之間的相關(guān)系數(shù)矩陣時,熱圖可以直觀地反映變量之間的相關(guān)性強度,顏色越深表示相關(guān)性越強。4、異常值檢測:熱圖中的顏色異常點可以幫助快速識別數(shù)據(jù)中的異常值或離群點。在下圖中,我們使用熱圖來直觀表示三個連續(xù)變量之間的關(guān)系。因此,首先我們需要計算不同數(shù)據(jù)之間的相關(guān)性。corr=tips[['total_bill','tip','size']].corr()plt.figure(figsize=(8,6))sns.heatmap(corr,annot=True,cmap='coolwarm',center=0)plt.title('HeatmapofCorrelationMatrix')plt.show()結(jié)果如圖所示,對角線上的值為1,因為變量與自己的相關(guān)性為1。同時,我們可以看到餐費總量(totalbill)與其他兩個變量都有較強關(guān)系。1.6習題1.6.1程序操作:請使用incomestock數(shù)據(jù)進行以下操作:1.讀入該數(shù)據(jù)。2.將數(shù)據(jù)與gpa數(shù)據(jù)以用戶id進行合并。3.選取女性用戶的數(shù)據(jù),并存入數(shù)據(jù)幀。4.對新數(shù)據(jù)幀里面的數(shù)據(jù)進行總結(jié),信息包括收入,股票賬戶總額,以及GPA。5.將新數(shù)據(jù)幀存入parquet文件。6.重新讀入income
stock數(shù)據(jù)。并使用散點圖來可視化收入與股票投資之間的關(guān)系。7.使用條形圖來可視化男性與女性在投資總額上的區(qū)別。8.使用熱圖來可視化收入,股票投資,以及GPA之間的相關(guān)性。第2章
數(shù)學以及統(tǒng)計學回顧金融大數(shù)據(jù)學習
2.1
學習目標
熟練掌握線性代數(shù)的符號以及多維微分的數(shù)學表達
熟練掌握線性代數(shù)的基本運算
熟練掌握微積分的基本運算
理解統(tǒng)計學的基本概念2.2機器學習中的數(shù)學以及統(tǒng)計學機器學習中,我們需要用到許多數(shù)學與統(tǒng)計學的知識。我們在本章中對將要用到的數(shù)學以及統(tǒng)計學知識和術(shù)語進行簡要介紹,以方便在之后章節(jié)的學習中參考回顧這些基礎的數(shù)理知識。本書中的數(shù)學知識主要涉及到的是線性代數(shù),微積分以及統(tǒng)計中的概念,例如相關(guān)性,期望,方差,偏差等等。2.3數(shù)學知識回顧在機器學習中,我們主要會使用到線性代數(shù)以及微積分中的微分。2.3.1線性代數(shù)線性代數(shù)在機器學習中有著廣泛的應用。在本線性代數(shù)回顧中,我們將著重用幾何的方法來闡述線性代數(shù)中運算的意義。.1標量
一個標量就是一個單獨的數(shù),一般用小寫的變量名稱表示,例如:a=1.2向量一個向量就是一列數(shù),這些數(shù)是有序排列的。通過索引,我們可以確定每個數(shù)的數(shù)值。通常會賦予向量粗體的小寫名稱。當我們需要明確表示向量中的元素時,我們會將元素排列成一個方括號包圍的縱柱:
2.3.2微積分
2.4統(tǒng)計學回顧
相關(guān)性有四種情況:正相關(guān)、負相關(guān)、不相關(guān)、非線性關(guān)系。1、正相關(guān):兩個變量同時增加或減小。2、負相關(guān):兩個變量變化的趨勢相反,一個變量增加而另一個變量減小。3、不相關(guān):兩個變量間沒有明顯的線性關(guān)系。4、非線性關(guān)系:兩個變量有關(guān)聯(lián),但是以散點圖呈現(xiàn)的相關(guān)關(guān)系不是直線形狀。圖2.1從左至右分別展示了正相關(guān),不相關(guān),以及負相關(guān)的數(shù)據(jù)。
RSS反應了未擬合出來的信息總量的大?。篟SS越小,未擬合出來的信息總量越小,擬合效果越好。RSS越大,未擬合出來的信息總量越大,擬合效果越差。RSS的缺點:RSS指標與樣本的個數(shù)相關(guān),模型不變的情形下,樣本個數(shù)越多,RSS值越大,樣本個數(shù)越少,RSS值越小。因此需要一種指標,能夠消除樣本個數(shù)帶來的影響,即MSE。
2.5習題
2.5.3統(tǒng)計學表2.1Tableofxandyvalues,請根據(jù)表中數(shù)據(jù)計算x和y的平均值x和y的標準方差x和y的相關(guān)性系數(shù)xy2.3-1.24.50.06.73.4金融大數(shù)據(jù)學習第三章:線性回歸吳軻中國人民大學20243.1 學習目標理解線性回歸的應用范疇熟悉線性回歸的函數(shù)形式,以及模型中參數(shù)理解機器學習常用訓練的方法:梯度下降,并了解對該方法在線性回歸模型中的具體使用方法的意義掌握如何使用Python訓練線性回歸模型3.2 案例:預測公司盈利在金融市場中,公司盈利是對公司表現(xiàn)最重要的衡量指標之一。每次公司季報或年報之前,金融分析師經(jīng)常需要對他們關(guān)注的公司作出盈利預測。如果公司表現(xiàn)達不到市場預期,其股票回報往往會出現(xiàn)顯著下跌。在傳統(tǒng)金融機構(gòu)中,分析師為了做出相對準確的預測往往需要進行大量的調(diào)研。近期的研究發(fā)現(xiàn),通過機器學習的方法,我們同樣可以得到非常好的公司盈利預測效果。在本章中,我們的目標是通過機器學習方法來構(gòu)建一個預測公司每股收益的預測系統(tǒng)。案例數(shù)據(jù)及分析每股收益預測數(shù)據(jù)股票代碼日期股價凈市率資產(chǎn)收益率每股收益6018882016-0644.180.2480.0471.1330006512005-0910.540.4700.0120.5006000312010-0627.090.2960.0661.1900001572012-0610.850.4010.0300.7750020012014-0612.780.4430.0230.500案例數(shù)據(jù)及分析
3.3 線性回歸方法
值得注意的是,本例中,目標變量是一個連續(xù)變量。因為理論上來說,該變量可以是任何實數(shù)。因此,我們的模型需要能夠輸出同樣的連續(xù)變量。對于這一類問題,一個簡單而有效的方法是線性回歸。接下來,我們將討論:什么是線性回歸(一元以及多元線性回歸)如何估計線性回歸模型中的參數(shù)線性回歸參數(shù)的意義在程序中如何執(zhí)行線性回歸一元線性回歸
一元線性回歸
模型訓練
模型訓練
代價函數(shù)
代價函數(shù)
梯度下降
梯度下降
梯度下降
梯度下降
多元線性回歸
多元線性回歸
多元線性回歸梯度下降
多元回歸注意事項
統(tǒng)計顯著性檢驗
統(tǒng)計顯著性檢驗
3.4拓展:線性方法的其他應用
本章中,我們主要以預測每股收益作為例子來探討如何使用線性回歸。我們以使用線性回歸的例子來說明線性回歸的廣泛用途。為了得到超額投資收益,投資者需要預測未來股票的漲跌。成功的投資者往往可以及時購入未來收益較高的股票并置換出未來收益較低的股票。
我們是否有可能通過搜集到的信息獲得超額收益?哪些信息可以幫助更好的預測未來股票回報呢?該問題涵蓋本章中討論的兩個重要概念:預測與推斷。我們需要知道我們能否使用線性模型來很好的預測未來的股票回報率,并且推斷哪些信息對于預測有著較為重要的作用。用線性回歸進行回報率預測
用線性回歸進行回報率預測
3.5編寫線性回歸程序
用statsmodel模塊進行回歸分析1.導入庫
使用pandas存儲數(shù)據(jù)。
導入statsmodels的api模塊用于線性回歸分析(statsmodels是一個用于統(tǒng)計建模和計量經(jīng)濟學的Python庫)。
導入statsmodels.tools.eval_measures中的mse函數(shù),用于計算均方誤差。import
pandas
as
pd
import
statsmodels.api
as
sm
from
statsmodels.tools.eval_measures
import
mse
用statsmodel模塊進行回歸分析2.數(shù)據(jù)讀取及處理
讀取名為’ols_training.csv’的CSV文件中的數(shù)據(jù),并將其存儲在df變量中。
定義一個特征列表,定義三個特征名稱’pps’,‘bm’,‘roa’。
使用statsmodels的add_constant方法將df中的特征列(不包括常數(shù)列)添加常數(shù)列,并返回一個包含常數(shù)列的新DataFrame。df=pd.read_csv('ols_training.csv')
features=['pps','bm','roa']
X=sm.add_constant(df[features])
用statsmodel模塊進行回歸分析3.進行回歸分析
創(chuàng)建一個OLS模型對象,使用sm.OLS函數(shù),其中因變量為df中的‘eps_basic’列,自變量為X。
使用fit方法對模型進行擬合,并將結(jié)果存儲在result中。
打印result的摘要信息,包括各個參數(shù)的值和統(tǒng)計量等。model
=
sm.OLS(df['eps_basic'],
X)
result
=
model.fit()
print(result.summary())
用statsmodel模塊進行回歸分析 5.模型擬合:下面來檢測我們訓練的模型與數(shù)據(jù)的擬合程度。首先,使用predict方法預測X對應的因變量值,并賦值給ypred變量。將預測的結(jié)果添加到df中的”eps_basic_pred”列打印df的前五行,以查看添加的預測列。
使用mse函數(shù)計算實際因變量和預測因變量之間的均方誤差并顯示。得到MSE:0.33674576635864206。ypred
=
result.predict(X)
df["eps_basic_pred"]
=
ypred
print(df.head())
mse_ols
=
mse(df['eps_basic'],
ypred)
print("MSE:",mse_ols)
用sklearn模塊進行回歸分析1.導入庫:
使用pandas儲存數(shù)據(jù)
導入statsmodels的api模塊用于線性回歸分析
導入sklearn庫的sm,是另一個線性回歸的庫
導入sklearn庫的標準化模塊,用于對數(shù)據(jù)進行標準化處理用sklearn模塊進行回歸分析2.數(shù)據(jù)讀入及處理
讀取名為’ols_training.csv’的CSV文件中的數(shù)據(jù),將其存儲在df變量中。
定義一個特征列表,包含三個特征名稱’pps’,‘bm’,‘roa’。
創(chuàng)建一個Standard-Scaler對象,用于對數(shù)據(jù)進行標準化處理。
對df中的特征數(shù)據(jù)進行標準化處理(處理后的特征平均值為0,標準差為1)。將標準化處理后的數(shù)據(jù)x轉(zhuǎn)化為DataFrame格式,并將結(jié)果存儲在x中,同時定義列名為特征列表features。使用sklearn中的模塊必須首先進行這一預處理步驟。用sklearn模塊進行回歸分析df
=
pd.read_csv('ols_training.csv')
features
=
['pps','bm','roa']
scalar
=
StandardScaler()
scalar.fit(df[features])
x=scalar.transform(df[features])
x=pd.DataFrame(x,columns
=
features)
用sklearn模塊進行回歸分析
OLS
=
linear_model.LinearRegression()
est1
=
OLS.fit(X=x,y=df['eps_basic'])
print(ercept_)
print(est1.coef_)用sklearn模塊進行回歸分析4.用statsmodel進行比較
添加截距項(statsmodel不會自動添加截距項)。
創(chuàng)建OLS模型對象,使用sm.OLS函數(shù),其中因變量為df中的‘eps_basic’列,自變量為X_const。并使用fit方法對模型進行擬合,并將結(jié)果存儲在result中。打印出result的摘要信息X_const
=
sm.add_constant(x)
model
=
sm.OLS(df['eps_basic'],
X_const)
result
=
model.fit()
print(result.summary())
我們發(fā)現(xiàn)兩種方法系數(shù)相同。因為對特征進行過縮放,因此我們得到的系數(shù)與未經(jīng)過特征縮放的程序結(jié)果有所不同。經(jīng)過縮放后,系數(shù)的意義也有所改變。
比如,對于每股股價(pps),系數(shù)是0.4362。不能解釋為每股股價上升1元,每股收益會隨之上升43.6分。若我們將特征縮放到標準差為1了,可以說當pps增加一個標準差時,每股收益會上升43.6分。計算題
程序操作習題
思考問題
假設可以獲取一個新的變量來預測公司每股收益,那什么樣的變量可以幫助我們更好的進行預測?第4章
邏輯回歸金融大數(shù)據(jù)學習學習目標理解邏輯回歸的使用場景,以及如何通過模型輸出來解決分類問題熟悉邏輯回歸的函數(shù)形式,以及模型中參數(shù)(包括邊際效應)意義熟悉梯度下降在邏輯回歸訓練中的應用掌握編寫邏輯回歸程序案例:貸款違約預測為個人或企業(yè)提供貸款是銀行的重要功能。在審批過程中,需要預測貸款申請人的還款能力,從而控制貸款違約的風險。原則上,金融機構(gòu)應盡量給有還款能力的申請人充分貸款。而對于違約可能性較高的申請者,銀行則應該拒絕其貸款申請在金融科技迅速發(fā)展的今天,貸款者的數(shù)據(jù)是貸款審批的重要依據(jù)。本章我們將討論如何用機器學習的方法來創(chuàng)建一個貸款違約預測系統(tǒng)。案例:貸款違約預測
可以從金融機構(gòu)得到從已經(jīng)審批通過的貸款表現(xiàn)的數(shù)據(jù):貸款編號住房數(shù)量年收入負債收入比工作年限貸款違約307005400027.2921283806000024.7280133914600016.78100408201500005.86100708012500028.7330
我們將使用四個特征(即用于預測的變量)來對違約進行預測:申請者的年收入(年收入高的申請人不太可能出現(xiàn)因現(xiàn)金流短缺而無法還款的情況)負債收入比(負債相對收入越高,還款越困難)現(xiàn)有住房數(shù)量(如果申請人已經(jīng)購房說明其經(jīng)濟狀況良好,并且平時消費習慣也比較健康)以及工作年限(可以代表申請者的工作穩(wěn)定性)邏輯回歸方法
如何讓模型輸出概率預測
邏輯函數(shù)的特點邏輯函數(shù)例子
模型訓練:代價函數(shù)在線性回歸中,我們已經(jīng)學習過用J(w)來表示的代價函數(shù)。代價函數(shù)描述的是模型預測與實際數(shù)據(jù)在整個訓練數(shù)據(jù)集中的差異。如果我們需要描述一個數(shù)據(jù)點上模型預測的誤差,我們則可以使用損失函數(shù)(一般用C來表示)。因此代價函數(shù)是訓練數(shù)據(jù)集中每個數(shù)據(jù)點的損失函數(shù)值的平均數(shù)。模型訓練:代價函數(shù)
模型訓練:代價函數(shù)
模型訓練:代價函數(shù)
模型訓練:代價函數(shù)
模型訓練:代價函數(shù)模型訓練:梯度下降
模型應用:決策邊界
當我們考慮更多的特征時,決策邊界將具有更高的維度若模型中有三個特征,則決策邊界是二維的平面。如果有更多特征,則決策邊界由更高的線性組合表示。因此,只有在特征數(shù)量較少的時候才能用圖像來很好的表示分類邊界。模型應用:決策邊界模型應用:系數(shù)的推斷
多分類問題在貸款違約預測的問題中,我們將貸款的結(jié)果分為兩類,即違約或不違約。在一些其他應用中,我們可能需要模型判斷多于兩種分類。例如,當保險公司需要預測醫(yī)療保險賠付概率時,可能需要對保險持有人罹患不同疾病的概率。因為一個病人可能同時患上多種疾病,因此這種多分類問題并不互相排斥。在這種情況下,我們需要做的是構(gòu)建多個邏輯回歸模型。每一個邏輯回歸對一種疾病發(fā)生的概率進行預測。多分類問題:Softmax回歸
多分類問題:Softmax回歸
4.5如何編寫邏輯回歸程序——statsmodels導入庫
使用pandas存儲數(shù)據(jù)
導入statsmodels的api模塊用于邏輯回歸分析import
pandas
as
pdimport
statsmodels.api
as
sm數(shù)據(jù)讀取及處理
讀取名為'train_sample_small.csv’的CSV文件中的數(shù)據(jù),并將其存儲在train_sample變量中。定義特征列表’fea_cols’,包含四個特征名稱:工作年限,住房所有量,年收入,以及負債收入比。
從train_sample中選取fea_cols列作為特征,存儲到train_x中,選取’isDefault’列作為目標變量,存儲到對象train_y中。
對train_x中的’dti’列和’employmentYear’列進行填充,使用每列數(shù)據(jù)的中位數(shù)填充缺失值。由于大部分算法無法處理含有缺失值的數(shù)據(jù),數(shù)據(jù)填充經(jīng)常是非常重要的一步。之后我們會對如何填充缺失值進行更詳細的介紹。
為特征列添加常數(shù)項,結(jié)果存儲到train_x_sm中。train_sample
=
pd.read_csv('train_sample_small.csv')
fea_cols
=['employmentYear','homeOwnership','annualIncome','dti']
train_x
=
train_sample[fea_cols]
train_y
=
train_sample['isDefault']
train_x['dti']
=
train_x['dti'].fillna(train_x['dti'].median())
train_x['employmentYear']
=
train_x['employmentYear'].fillna(train_x['employmentYear'].median())
train_x_sm
=
sm.add_constant(train_x)使用statsmodel來訓練邏輯回歸模型
創(chuàng)建一個邏輯回歸模型對象est,其中因變量為train_x,自變量為train_y
使用fit方法訓練樣本對邏輯回歸模型進行擬合,結(jié)果存儲到對象est2中
打印est2摘要信息,包括各個參數(shù)的值和統(tǒng)計量等est=sm.Logit(train_y,
train_x_sm)
est2=est.fit()
print(est2.summary())
運行結(jié)果如圖結(jié)果分析
在這四個特征中,employmentYear不具有統(tǒng)計顯著性,另外三個特征都與貸款是否違約有正相關(guān)。其中,年收入與貸款違約負相關(guān),其他兩個變量與貸款違約為正相關(guān)。
使用get_margeff獲取邊際效應并打印其摘要信息est_me
=
est2.get_margeff()
print(est_me.summary())打印結(jié)果如下:用邊際效應可以解讀特征變化如何影響違約概率。例如,dti=0.0033,說明如果負債收入比增加1,那么違約概率預計會增加0.33%。如何編寫邏輯回歸程序——sklearn
接下來,我們使用sklearn模塊進行邏輯回歸,并與statsmodel的結(jié)果進行對比。值得注意的是,調(diào)用sklearn模塊進行邏輯回歸必須先對特征進行縮放。導入庫
使用pandas存儲數(shù)據(jù)
導入sklearn.linear_model中的邏輯回歸函數(shù),用于邏輯回歸分析
導入statsmodels的api模塊用于邏輯回歸分析
導入sklearn庫中的標準化處理模塊,用于對數(shù)據(jù)進行標準化處理
導入sklearn中的metrics模塊,用于對模型表現(xiàn)進行評估import
pandas
as
pd
from
sklearn.linear_model
import
LogisticRegression
import
statsmodels.api
as
sm
from
sklearn.preprocessing
import
StandardScaler
from
sklearn.metrics
import
log_loss
數(shù)據(jù)讀取及處理
讀取名為‘train_sample_small.csv’的CSV文件中的數(shù)據(jù),并將其存儲在train_sample變量中
定義一個特征列表fea_cols,包含特征名稱‘employmentYear’,‘homeOwnership’,'annualIncome’,‘dti’
train_sample
=
pd.read_csv('train_sample_small.csv')
fea_cols
=
['employmentYear','homeOwnership','annualIncome','dti']
從train_sample中選取fea_cols列作為特征,存儲到train_x中,選取’isDefault’列作為目標變量,存儲到對象train_y中
對train_x中的’dti’列和’employmentYear’列進行填充,使用每列數(shù)據(jù)的中位數(shù)填充缺失值
創(chuàng)建一個StandardScaler對象,用于對數(shù)據(jù)進行標準化處理
使用scaler的fit方法計算數(shù)據(jù)集train_x的平均值和標準偏差train_x
=
train_sample[fea_cols]
train_y
=
train_sample['isDefault']
train_x['dti']
=
train_x['dti'].fillna(train_x['dti'].median())
train_x['employmentYear']
=
train_x['employmentYear'].fillna(train_x['employmentYear'].median())
scaler
=
StandardScaler()
scaler.fit(train_x)
使用transform方法對train_x中的特征數(shù)據(jù)進行標準化處理(處理后的特征平均值為0,標準方差為1)。
將標準化處理后的數(shù)據(jù)train_x_standardized轉(zhuǎn)化為DataFrame格式,并將結(jié)果存儲在train_x_standardized中,同時定義列名為特征列表fea_cols。
使用sklearn.linear_model中的LogisticRegression函數(shù)建立邏輯回歸模型。創(chuàng)建一個邏輯回歸模型對象Logit,設置最大迭代次數(shù)為10000,設置正則化參數(shù)為None。train_x_standardized
=
scaler.transform(train_x)
train_x_standardized
=
pd.DataFrame(train_x_standardized,
columns=train_x.columns)
Logit
=
LogisticRegression(max_iter=10000,penalty=None)
est_sk1
=
Logit.fit(X=train_x_standardized,
y=train_y)
print(est_ercept_[0])
print(est_sk1.coef_[0])
y_pred
=
est_sk1.predict_proba(train_x_standardized)
logloss
=
log_loss(train_y,
y_pred)
print(logloss)
對比statsmodel的api模塊的結(jié)果(兩種程序運行結(jié)果一致):
首先,添加截距項(statsmodel不會自動添加截距項),將結(jié)果存儲到train_x_sm中。
創(chuàng)建一個邏輯回歸模型對象est,使用sm.Logit函數(shù),其中因變量為train_x_sm,自變量為train_y。
使用fit方法對模型進行擬合,并將結(jié)果存儲在est2中。打印est2的摘要信息,包括各個參數(shù)的值和統(tǒng)計量等。train_x_sm
=
sm.add_constant(train_x_standardized)
est
=
sm.Logit(train_y,
train_x_sm)
est2
=
est.fit()
print(est2.summary())
4.6習題計算題-1.7502.818.681
程序操作,請使用貸款違約預測數(shù)據(jù)進行以下操作: 1.基于程序部分,輸出模型對數(shù)據(jù)集中前五個數(shù)據(jù)點的預測,并比較概率預測與分類預測的結(jié)果。 2.將年收入(annualIncome)取對數(shù)值,并使用取對數(shù)之后的新變量取代原來的年收入變量作為特征來預測違約。 3.引入交叉項:通過住房擁有量(homeOwnership)與負債收入比(dti)相乘生成一個新的變量。在模型中加入該變量進行預測。
請報告以上兩個模型的參數(shù)值。并且匯報模型擬合表現(xiàn)(提示:可以用loglikelihood作為擬合度的指標,因該指標與我們的代價函數(shù)為負相關(guān))。發(fā)散思考:請額外思考本章所學三個邏輯回歸的使用場景第5章其他基礎監(jiān)督學習方法學習目標理解樣條模型的函數(shù)形式、使用場景及其實現(xiàn)方法了解廣義可加模型的函數(shù)形式熟悉支持向量機的函數(shù)形式、使用范圍及其實現(xiàn)方法了解核技巧的使用方法掌握K近鄰分類器的實現(xiàn)方法、使用范圍及其實現(xiàn)方法回歸樣條模型
回歸樣條模型
回歸樣條模型回歸樣條模型回歸樣條模型可能遇到的問題有大量參數(shù)需要估計函數(shù)在節(jié)點處可能出現(xiàn)不連續(xù)樣條回歸模型的限制條件函數(shù)的0到d-1階導數(shù)在節(jié)點處連續(xù)線性函數(shù):函數(shù)本身在??點連續(xù)二次函數(shù):整個函數(shù)在??點連續(xù)并且一階可導自然樣條:??小于最小的節(jié)點或是大于最大節(jié)點時??與??的函數(shù)呈線性關(guān)系回歸樣條模型節(jié)點的選擇節(jié)點數(shù)量及位置在模型訓練前決定均勻的在特征的取值范圍進行設置例如:特征的25%,中位數(shù),以及75%處各設置一個節(jié)點使用模型驗證方法選擇最佳節(jié)點位置平滑樣條模型
廣義可加模型(GAM)
支持向量機(SVM)支持向量機簡介一種廣泛應用的監(jiān)督學習算法主要用于處理分類問題,也可用于回歸問題(支持向量回歸,SVR)基本思想不計算誤差較小的數(shù)據(jù)點,盡量減少誤差較大的數(shù)據(jù)點中的誤差設定一個邊界,誤差小于邊界的忽略,誤差大于邊界的計算入總誤差與回歸的關(guān)系支持向量機:使用另一種損失函數(shù)的邏輯回歸支持向量回歸:使用另一種損失函數(shù)的線性回歸支持向量機的代價函數(shù)
支持向量機的代價函數(shù)支持向量機的核技巧核技巧介紹核技巧幫助我們在高維空間中找到分類邊界不必顯式增加特征的數(shù)量,降低計算復雜度可以在其他多種機器學習中應用例:一維空間無法找到線性決策邊界,映射到二維空間則可以核技巧幫助我們完成將低維的數(shù)據(jù)像高維空間進行投射,并在高維空間中找到分類邊界支持向量機的核技巧一維空間無法找到線性決策邊界支持向量機的核技巧二維空間可以找到分類邊界支持向量機的核技巧
支持向量機的核技巧
K近鄰分類器(KNN)K近鄰分類器簡介簡單的非參數(shù)方法不需要一個固定的模型函數(shù)找到與數(shù)據(jù)最近的k個數(shù)據(jù),用這些數(shù)據(jù)的目標變量y的平均值作為預測核心思想:如果兩個數(shù)據(jù)點有相似的特征??那么他們的目標變量??也會類似K近鄰分類器(KNN)
程序?qū)崿F(xiàn):平滑樣條模型導入庫導入np,用于生成數(shù)據(jù)導入scipy.stats用于生成隨機數(shù)導入erpolate用于平滑樣條擬合導入matplotlib.pyplot用于結(jié)果的可視化程序?qū)崿F(xiàn):平滑樣條模型
數(shù)據(jù)擬合通過調(diào)整平滑參數(shù)s參數(shù)來達到調(diào)整擬合函數(shù)的平滑度程序?qū)崿F(xiàn):平滑樣條模型展示擬合結(jié)果程序?qū)崿F(xiàn):平滑樣條模型程序?qū)崿F(xiàn):支持向量機與K近鄰分類器導入庫使用pandas存儲數(shù)據(jù)導入sklearn.svm中的支持向量機的分類模塊(SVC)導入sklearn.neighbors中導入KNN分類器模塊導入sklearn庫中的標準化處理模塊,用于對數(shù)據(jù)進行標準化處理導入sklearn中的metrics模塊,用于對模型表現(xiàn)進行評估程序?qū)崿F(xiàn):支持向量機與K近鄰分類器存儲特征和目標變量使用每列數(shù)據(jù)的中位數(shù)填充缺失值數(shù)據(jù)讀取及處理讀取數(shù)據(jù);定義一個特征列表,包含四個特征名:程序?qū)崿F(xiàn):支持向量機與K近鄰分類器數(shù)據(jù)標準化創(chuàng)建一個StandardScaler對象,用于對數(shù)據(jù)進行標準化處理使用scaler的fit方法計算數(shù)據(jù)集train_x的平均值和標準偏差使用transform方法對train_x中的特征數(shù)據(jù)進行標準化處理將標準化處理后的數(shù)據(jù)train_x_standardized轉(zhuǎn)化為DataFrame格式并將結(jié)果存儲在train_x_standardized中程序?qū)崿F(xiàn):支持向量機與K近鄰分類器訓練SVM分類器使用sklearn.svm中的SVC模塊,創(chuàng)建一個支持向量機分類器對象clf_svm(此處使用線性核)訓練模型評估模型表現(xiàn):準確度定義為正確預測的樣本數(shù)量除以所有樣本量程序?qū)崿F(xiàn):支持向量機與K近鄰分類器訓練KNN分類器建立一個knn分類器對象knn_clf,考慮5個近鄰(n_neighbors=5)模型訓練評估模型表現(xiàn):直接輸出模型的分類預測,并計算模型預測準確度習題程序操作在平滑樣條模型中,改變平滑參數(shù)??。將??設置為1,5,10,20,并輸出擬合結(jié)果。在支持向量機程序中,我們使用了線性核。請使用rbf核重新訓練模型,并試著將gamma參數(shù)設為1,5,10,20。并輸出預測表現(xiàn)。在K近鄰分類器程序中,將近鄰數(shù)量調(diào)整為3,6,10。輸出模型預測表現(xiàn)。K近鄰分類器默認使用的是歐幾里得距離。請在KNN分類器中使用曼哈頓距離,并檢驗得出的結(jié)果是否有所不同。(提示:可在KNeighborsClassifier()中使用distance=’cityblock’)來調(diào)用曼哈頓距離。習題發(fā)散思維請思考在什么具體的場景中我們需要用到廣義相加模型。糾錯97頁倒數(shù)第一段“改模型”改為“該模型”105頁倒數(shù)第一個代碼塊有缺失107頁倒數(shù)第一個代碼塊有缺失第6章模型驗證學習目標掌握三種模型驗證的方法及其實現(xiàn)理解過擬合與欠擬合的問題及其原因了解模型表現(xiàn)的幾種指標及其計算方法模型驗證方法
模型驗證方法
模型驗證方法留一法的優(yōu)點用到了幾乎所有的數(shù)據(jù)對模型進行訓練,理論上可以取得更好的訓練效果不需要決定哪些數(shù)據(jù)作為訓練集和驗證集,減小了結(jié)果的隨機性留一法的缺點因為需要對模型進行多次估計導致計算量跟著數(shù)據(jù)量成倍增加當數(shù)據(jù)量是100時,我們需要進行100次模型訓練。當我們對大數(shù)據(jù)用復雜的模型進行訓練時,這個過程可能會需要巨大的計算量模型驗證方法k折交叉驗證的具體步驟將訓練集分為??個子集(每個子集中有??/??個樣本)重復以下步驟??次每次取一個不同的子集作為驗證集驗證集之外的???1個子集上進行訓練在驗證集上算出算出??個的平均值??的常用取值為10,5或3減小了留一法的計算量模型驗證與數(shù)據(jù)預處理數(shù)據(jù)預處理特征縮放:將特征轉(zhuǎn)換為平均值為0,標準差為1的變量缺失值填補:用訓練數(shù)據(jù)的平均值或中位數(shù)填補缺失數(shù)據(jù)驗證集數(shù)據(jù)處理使用訓練數(shù)據(jù)的平均值和標準差對驗證集的數(shù)據(jù)進行縮放用訓練數(shù)據(jù)的特征平均值或中位數(shù)填補驗證數(shù)據(jù)的缺失值模型驗證與數(shù)據(jù)預處理為什么我們需要進行這些操作呢?假設我們的訓練數(shù)據(jù)集中含有所有2010年以及之前的數(shù)據(jù)可以幫助我們來訓練模型我們的目標是用訓練好的模型來預測2010年之后的每股收益(即2011年及之后的數(shù)據(jù)為驗證數(shù)據(jù)集)當我們身處2011年對2012年的每股收益進行預測時,理論上我們并不擁有2012至2020年間的任何數(shù)據(jù)因此,我們無法準確計算驗證數(shù)據(jù)集的標準差或平均值如果我們使用驗證集的標準差/平均值來進行特征縮放或填補缺失數(shù)據(jù),那么很容易造成模型驗證的結(jié)果夸大模型預測的表現(xiàn)過擬合及欠擬合問題
過擬合及欠擬合問題過擬合及欠擬合問題過擬合問題對于有限的訓練數(shù)據(jù),通過增加特征數(shù)量來提高訓練集的擬合程度判斷方法:模型在訓練數(shù)據(jù)上表現(xiàn)良好,但在驗證集上表現(xiàn)不佳過擬合的主要原因訓練數(shù)據(jù)中既含有大量信息,也有一些噪聲如果我們的模型有大量的特征,并在較小的訓練集上進行訓練,那么在訓練過程中,模型參數(shù)不但擬合數(shù)據(jù)中的的信息,也會擬合訓練集中的噪聲因為噪聲項是隨機變量,因此訓練數(shù)據(jù)中的噪聲與驗證數(shù)據(jù)中的噪聲會很不一樣。所以可以擬合訓練集噪聲的模型并無法擬合訓練集之外的數(shù)據(jù)。解決方法:增加訓練數(shù)據(jù)量、減少模型復雜度、使用正則化過擬合及欠擬合問題欠擬合問題使用簡單模型對數(shù)據(jù)進行擬合時,訓練集和驗證集數(shù)據(jù)的擬合程度都很低欠擬合模型的偏差較大,表現(xiàn)較差判斷方法訓練集與驗證集上的代價函數(shù)值非常接近解決方法增加模型復雜度、加入更多特征過擬合及欠擬合問題過擬合及欠擬合問題模型驗證指標
模型驗證指標混淆矩陣對于分類問題,我們可以直接檢驗模型對于每個樣本的分類進行評判,然后再將所有樣本進行綜合?;煜仃囍胁煌男斜硎緦嶋H分類(正即為1,負為0)。不同列表示模型給出的分類。在混淆矩陣中左上角以及右下角的兩個格表示模型給出正確分類的樣本數(shù)量,而其他兩個格中給出的是模型給出錯誤分類的數(shù)量。預測為正預測為負實際為正真正例(TP)假負例(FN)實際為負假正例(FP)真負例(TN)模型驗證指標
模型驗證指標F1分數(shù)是經(jīng)常使用的給模型總體評價的一種指標在許多應用場景中,精確度和召回率之間的平衡非常重要。F1分數(shù)作為精確度和召回率的調(diào)和平均數(shù),能夠平衡這兩個因素。對于同時關(guān)注假正例和假負例的數(shù)量的場景,這一點尤為重要。在類別不平衡的情況下,準確率可能會誤導我們對模型表現(xiàn)的判斷。例如,對于一個有95%的負例的數(shù)據(jù)集,模型僅需對所有樣本都輸出負例可能會達到95%的準確率。但在這種情況下,F(xiàn)1分數(shù)將為模型提供更有用的性能度量。F1分數(shù)結(jié)合了精確度和召回率,提供了一種容易理解的方式來評估模型的性能。接收者操作特性曲線(ROC)ROC曲線顯示二元分類器在不同判別閾值下的能力通過繪制真正例率(TPR)與假正例率(FPR)創(chuàng)建曲線下面積(AUC)AUC解釋:AUC=0.5:模型無判別能力AUC>0.5:模型具有一定判別能力AUC=1.0:模型具有完美判別能力AUC的重要性閾值不變性不平衡類別排序解釋接收者操作特性曲線(ROC)接收者操作特性曲線(ROC)曲線下面積的重要性閾值不變性與準確率等其他指標不同,曲線下面積不依賴于分類的特定閾值。當最佳閾值未知或可能改變時,曲線下面積可能非常有參考價值。不平衡類別在處理不平衡類別的情況下,其中一個類別明顯多于另一個類別時,曲線下面積可以給我們提供更為全面的信息。排序解釋曲線下面積也可以告訴我們真實的正樣本在模型中的排名是否比負樣本更高。模型驗證代碼:驗證集法導入庫使用pandas存儲數(shù)據(jù)導入sklearn庫的標準化模塊,用于對特征進行縮放導入sklearn.linear_model中的線性回歸函數(shù),用于線性回歸分析導入sklearn庫metrics模塊中的mean_squared_error,用于計算模型的均方誤差模型驗證代碼:驗證集法數(shù)據(jù)讀取及處理讀取名為’ols_training.csv’的CSV文件中的數(shù)據(jù),并將其存儲在training_data變量中。該數(shù)據(jù)為訓練數(shù)據(jù)集。讀取名為’ols_testing.csv’的CSV文件中的數(shù)據(jù),并將其存儲在testing_data變量中。該數(shù)據(jù)為驗證數(shù)據(jù)集。顯示數(shù)據(jù)集的前五行,以了解其結(jié)構(gòu)模型驗證代碼:驗證集法數(shù)據(jù)結(jié)構(gòu)如下:模型驗證代碼:驗證集法刪除建立回歸模型不需要的數(shù)據(jù)分割數(shù)據(jù)集中的特征變量和目標變量在X_train和X_test數(shù)據(jù)集中刪除目標變量eps_basic提取X_train和X_test數(shù)據(jù)集中的目標變量eps_basic,并分別保存在y_train和y_test中模型驗證代碼:驗證集法數(shù)據(jù)進行標準化處理創(chuàng)建一個StandardScaler對象,用于對特征變量進行縮放處理。StandardScaler將特征進行標準化。標準化后特征的平均值為0,標準差為1。使用scaler的fit_transfrom方法計算數(shù)據(jù)集X_train的平均值和標準偏差并對數(shù)據(jù)進行標準化處理,之后將標準化后的結(jié)果儲存在X_train_scaled中。使用transform方法對X_test中的特征數(shù)據(jù)進行標準化處理,在這一標準化過程中,我們使用的平均值/標準差來自于訓練數(shù)據(jù)集。注意:我們不能使用驗證數(shù)據(jù)的平均值/標準差來標準化訓練數(shù)據(jù)。模型驗證代碼:驗證集法模型訓練線性回歸分析使用predict方法對訓練集的特征數(shù)據(jù)進行預測計算均方誤差模型驗證代碼:驗證集法模型驗證使用predict方法對訓練集的特征數(shù)據(jù)進行預測計算均方誤差分別打印訓練數(shù)據(jù)和測試數(shù)據(jù)的均方誤差模型驗證代碼:k折交叉驗證法導入庫使用pandas存儲數(shù)據(jù)導入sklearn庫impute模塊中的SimpleImputer,用于填充數(shù)據(jù)集中的缺失值導入sklearn庫的標準化模塊,用于對數(shù)據(jù)進行標準化處理導入sklearn.linear_model中的邏輯回歸函數(shù),用于邏輯回歸分析導入sklearn庫model_selection模塊中的StratifiedKFold,用于進行交叉驗證導入sklearn庫metrics模塊中的roc_auc_score和roc_curve,分別用于計算ROC曲線下的面積(AUC)以及繪制ROC曲線模型驗證代碼:k折交叉驗證法數(shù)據(jù)讀取及處理讀取名為’test_sample_small.csv’的CSV文件中的數(shù)據(jù),并將其存儲在data變量中定義一個特征列表X,包含四個特征從data中選擇’isDefault’列的值,并將其存儲在y中模型驗證代碼:k折交叉驗證法模型訓練與驗證創(chuàng)建一個邏輯回歸模型對象創(chuàng)建一個分層K折交叉驗證對象創(chuàng)建空列表,存儲訓練集和交叉驗證集的邏輯回歸損失模型驗證代碼:k折交叉驗證法創(chuàng)建ROC-AUC作為模型驗證度量模型驗證代碼:k折交叉驗證法創(chuàng)建ROC-AUC作為模型驗證度量模型驗證代碼:k折交叉驗證法創(chuàng)建ROC-AUC作為模型驗證度量計算訓練集和交叉驗證集的邏輯回歸損失的平均值打印平均訓練對數(shù)損失和平均交叉驗證對數(shù)損失模型驗證代碼:k折交叉驗證法習題
習題程序操作請使用驗證集法來驗證貸款違約模型。根據(jù)模型結(jié)果,請闡述模型是否存在過擬合問題。請使用3折交叉驗證法來驗證每股盈利預測模型。根據(jù)模型結(jié)果,請闡述模型是否存在過擬合問題。糾錯124頁第5段句號應為中文句號126頁倒數(shù)第4段有缺失第7章模型選擇與正則化學習目標理解為什么需要進行模型選擇和正則化了解模型選擇的方法掌握正則化的幾種方法,以及如何使用程序?qū)嵭姓齽t化模型選擇決定使用哪些特征不同特征的排列組合產(chǎn)生多個模型主要介紹最佳子集選擇法和前向分步算法最佳子集選擇法
前向分步算法
正則化方法通過將參數(shù)向0收縮來達到減小點估計量方差的目的常見方法:嶺回歸套索回歸彈性網(wǎng)絡嶺回歸(RidgeRegression)修改線性回歸的代價函數(shù)引入正則化項正則化參數(shù)
??控制模型復雜度套索回歸(LassoRegression)
嶺回歸與套索回歸比較兩者都通過
??控制正則化套索回歸可使某些特征系數(shù)變?yōu)?彈性網(wǎng)絡(ElasticNet)結(jié)合嶺回歸與套索回歸的優(yōu)勢代價函數(shù)中同時包含兩個正則項模型訓練
模型訓練
超參數(shù)設置實驗不同??值以找到最佳模型留出部分數(shù)據(jù)進行最終驗證正則化使用注意事項先對特征進行縮放縮放后的變量應具有相似的標準偏差邏輯回歸中的正則化加入嶺回歸的正則化項加入套索回歸的正則化項正則化程序示例
導入相關(guān)庫數(shù)據(jù)讀取及處理正則化程序示例
刪除建立回歸模型不需要的列分割數(shù)據(jù)集中的特征變量和目標變量標準化處理嶺回歸模型示例
創(chuàng)建一個Ridge對象使用fit方法訓練模型使用predict方法對訓練數(shù)據(jù)進行預測計算均方誤差嶺回歸模型示例
對驗證數(shù)據(jù)進行預測計算均方誤差評估模型的性能習題知識理解哪種正則化方法能達到類似于模型選擇的方法?提高正則化超參數(shù)值
??對于模型擬合中的哪種問題有幫助?闡述
??值對模型參數(shù)??的影響。以及,如果??>0會如何影響??的可解釋性。習題程序操作請使用每股收益預測數(shù)據(jù)進行模型訓練。在訓練模型時,使用套索回歸進行正則化。將
??值設為0.1,1,10,以及20。觀察在這些
??值時,哪些特征被從模型中移除,哪些變量仍然保留。將訓練好的模型用于驗證數(shù)據(jù)集,測試模型在訓練數(shù)據(jù)集中的表現(xiàn)。第八章決策樹學習目標理解樹的基本概念掌握如何使用決策樹進行分類以及回歸分析熟悉決策樹的訓練方法掌握如何使用程序訓練以及使用決策樹模型基于樹的方法的簡介
什么是樹樹是一種抽象的結(jié)構(gòu)以表現(xiàn)節(jié)點與節(jié)點之間的層次關(guān)系樹的基本結(jié)構(gòu)是節(jié)點。最上層的節(jié)點只有一個,被稱之為根節(jié)點深度是對樹的結(jié)構(gòu)的一個重要描述性指標。其定義是從葉節(jié)點到根節(jié)點中最多需要經(jīng)過多少條邊決策樹決策樹是一種應用廣泛的機器學習方法。在決策樹方法中節(jié)點代表的是分割樣本的規(guī)則。以信用違約數(shù)據(jù)為例:在根結(jié)點上,我們對所有數(shù)據(jù)進行分類。如果收入低于5000元,那么這筆貸款被分為高風險。如果收入高于5000元,那么我們對該申請人是否擁有房產(chǎn)進行分類。如果該申請人沒有房產(chǎn),那么該筆貸款也被分類為高風險,否則該筆貸款被分類為低風險。決策樹由此可見,決策樹的原理在于用預定的樣本細分。我們根據(jù)細分樣本對結(jié)果進行判定。我們可以清晰的觀察模型如何生成預測。因此決策樹有很強的可解釋性(即我們可以簡單的通過分析決策樹的分類條件來判定哪些特征影響最終的分類結(jié)果)。另外,決策樹因為不要求特征與目標變量保持線性關(guān)系,因此其也有很高的靈活性。另外,決策樹既可以用于回歸問題也可以用于分類問題。通常,我們將用于分類問題的決策樹為分類樹,而用于回歸問題的決策樹為回歸樹。回歸樹模型訓練決策樹的模型訓練尋找最好的樹狀結(jié)構(gòu)來取得對數(shù)據(jù)的細分。我們需要達到的目的是最小化模型的預測誤差。沿用線性回歸的代價函數(shù):使用殘差平方和(??????)作為代價函數(shù)訓練決策樹模型使用“貪心法”來構(gòu)造決策樹貪心法的意思是我們不考慮全局最優(yōu)的決策樹,而是在每一步對樣本細分時,我們爭取該細分步驟能最好的提高模型與數(shù)據(jù)的擬合程度。但是由于我們每次決定對樣本二分之后只需考慮該次操作之后對樣本如何繼續(xù)細分,因此這樣可以極大減少對計算的要求。二分方法
二分方法
二分方法
二分方法二分方法我們將重復這一步驟直到我們達到結(jié)束條件。結(jié)束分裂的條件包括每個子節(jié)點的上的樣本量都已經(jīng)小于可以繼續(xù)細分的樣本量(我們需要在程序中預設最小可細分的樣本量)樹的深度達到預設深度(我們需要預設樹的最大深度)下一次分裂達帶來的RSS減小少于我們設定的數(shù)值(我們需要預設最小RSS減小的數(shù)值)在以上
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 達飛培訓課件
- 邊框縮小技術(shù)
- 食品生產(chǎn)衛(wèi)生規(guī)范試題及答案
- 辭退員工的技巧培訓課件
- 車隊長崗位安全培訓課件
- 車隊安全培訓教育內(nèi)容課件
- 草原的利用和保護試題
- 2026年人體感覺器官的結(jié)構(gòu)及生理功能知識考核試題與答案
- 車間級安全培訓簽到表課件
- 酒店客房預訂與客戶關(guān)系管理規(guī)范制度
- 2025屆高考數(shù)學二輪復習備考策略和方向
- UL1995標準中文版-2018加熱和冷卻設備UL中文版標準
- 2024至2030年中國家用燃氣具數(shù)據(jù)監(jiān)測研究報告
- 2024版租房合同協(xié)議書下載
- 寶寶喂養(yǎng)記錄表
- 2023年非標自動化機械設計工程師年度總結(jié)及來年計劃
- 丹鹿通督片治療腰椎疾病所致腰椎狹窄128例
- 股骨頸骨折圍手術(shù)期護理
- 高空作業(yè)車使用說明書
- 保安公司介紹PPT模板
- 醫(yī)療質(zhì)量與安全管理小組活動記錄
評論
0/150
提交評論