




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章
神經網絡金融大數據學習學習目標掌握人工神經網絡的基本概念以及函數形式理解如何使用神經網絡進行預測分類以及回歸問題了解如何訓練神經網絡模型以及反向傳播的概念了解神經網絡的正則化方法熟悉如何使用程序訓練以及調用神經網絡模型人工神經網絡簡介人工神經網絡(ArtificialNeuralNetwork)是一種用途廣泛的機器學習方法。其結構跟生物的神經結構有類似之處。雖然人工神經網絡在二十世紀八十年代就被提出,但是直到十幾年前,這種方法才重新得到重視。究其原因是在過去的幾十年中,我們的訓練數據以及計算機算力都獲得了飛躍性的提升,這些發展都為訓練復雜的人工神經網絡提供了支持。在最近的機器學習研究中,人工神經網絡展現了其強大的功能及廣泛的應用,在違約預測、圖像識別、聲音辨識、語言翻譯等領域都可得到應用。甚至最新的大語言模型也是依賴于神經網絡方法。神經網絡的結構圖10.1是一個多層的神經網絡圖示。更具體的說,該神經網絡是一個前饋神經網絡(Feedforwardneuralnetwork)。這種神經網絡結構應用非常廣泛,也是更復雜神經網絡模型的基礎。接下來來我們會用這個圖來解釋神經網絡的構成部分。前饋神經網絡的基本結構單元是神經元(Neuron)。神經元被放置在神經網絡的不同層里面。接下來,我們對神經網絡每個層的功能以及結構進行介紹。神經網絡的結構:輸入層輸入層是神經網絡的第一個層。每一個輸入單元代表的是模型的一個特征。因為在該層中我們并不進行任何運算,因此該層中的單元并不是嚴格意義上的神經元。神經網絡的結構:隱藏層在本圖中,我們有兩個隱藏層。每一個隱藏層中都有五個神經元。神經元負責處理從上一層輸入該神經元的數值。處理完畢后,輸出一個數值給下一層的神經元。由于這些神經元的不負責最終的輸出,因此我們將這些層稱為“隱藏層”。我們可以根據實際情況增加隱藏層的層數以增加模型的復雜度。有的神經網絡有十個甚至更多的隱藏層。當我們有多個隱藏層相對較多的時候,我們的神經網絡的深度也隨之增加。因此層數較多的神經網絡有時會被稱為“深度神經網絡”。這些模型也被稱為“深度學習”模型。神經網絡的結構:隱藏層每一個神經元實際代表的是一個函數。該函數將輸入的數據轉換成輸出值。每個神經元都將上一層的輸出作為輸入值。以圖10.1為例,第一個隱藏層中的神經元都連接到四個輸入節點,而第二層的神經元都連接到五個處于第一個隱藏層的神經元。我們可以將每一層上的節點的值放到一個向量上。這些向量的第一個元素代表常數項,其他為上一層中得到的數據。如輸入層為:神經網絡的結構:隱藏層
神經網絡的結構:隱藏層??1??是一個標量,相當于回歸中的常數項(等同于之前回歸問題中的??0)。在神經網絡中,這個系數經常被稱為“偏置”。??1??是一個向量,存儲對應輸入信息的系數。??1??也被稱為“權重”。因此,??1??是一個長度為4的向量。第二個隱藏層的神經元則是以第一個隱藏層的結果??1作為輸入:神經網絡的結構:隱藏層??函數被稱為激活函數。激活函數可以有多種形式。早期的神經網絡中,常用的激活函數是邏輯函數。如圖10.2所示該函數的輸出值在0與1之間。最近常用的神經網絡的激活函數則是整流線性函數(ReLU)。ReLU函數是如下形式:神經網絡的結構:隱藏層如果??>0,則??取值為1。如果??的數值不為正,??(??)則輸出零。圖10.2上也有ReLU函數。ReLU函數的特點是一旦??大于0,那么該函數相當于一個線性函數關于??或??的線性函數,反之則輸出0。因此該函數具有非線性的特點。只有輸入值達到0的閾值,這個函數才會被“激活”而輸出非零值。1正是這種非線性的特點讓整個神經網絡變得強大,包括讓我們的函數可以表示特征之間復雜的交互作用。神經網絡的結構:輸出層如果我們需要解決一個分類問題,那么輸出函數則可以用邏輯函數來輸出一個分類概率:如果我們需要解決的是多分類問題,也可以用軟最大化(Softmax)函數作為輸出層的函數。神經網絡的結構:輸出層如果我們需要解決一個分類問題,那么輸出函數則可以用邏輯函數來輸出一個分類概率:如果我們需要解決的是多分類問題,也可以用軟最大化(Softmax)函數作為輸出層的函數。網絡結構的選擇神經網絡是一類非常靈活的機器學習方法。在實際應用中,我們需要對具體使用的神經網絡結構進行選擇。除了輸入數據的特征外,我們還需要選擇隱藏層與輸出層的激活函數。另外,我們也需要選擇神經網絡的層數,以及每一層中的神經元數量。值得注意的是,每一個隱藏層中的神經元數量不需要一致。有研究發現對于相同參數量的神經網絡,深度的增加比寬度(即隱藏層中神經元數量)的增加更有利于得到對數據擬合的效果。同時值得注意的是,由于神經網絡的靈活性,使用神經網絡需要注意產生過擬合問題。尤其對于數據量較小的工作,采用深度神經網絡模型很有可能會造成過擬合。因此,在實際使用過程中,需要根據數據的特性對神經網絡結構作出最優化。為什么使用神經網絡研究發現,即使較為簡單的神經網絡都可以很好的擬合相對較為復雜的函數。如圖10.3(上圖)所示,該圖中數據由一個三段線性函數組成。如果我們僅僅使用線性函數,是無法對該數據進行很好的擬合的。但是,如圖中所示,我們只需要用含有一個隱藏層(三個隱藏神經元)的神經網絡就很好的對數據進行了擬合。這是因為神經網絡中的隱藏神經元使用的的非線性函數以及對他們進行的排列組合使得模型具有極強的靈活性。為什么使用神經網絡該圖的下圖更好的詮釋了神經網絡的運作機制,在該圖中,我們將網絡的輸出分解到三個隱藏層的神經元上。圖中三條實線分別對應的是隱藏神經元輸出值乘以對應的輸出層權重的數值(??11????1,??12????2,??11????3)。因為這三個神經元都輸出一個ReLU形式的非線性函數,因此,他們的值分別可以幫助我們解釋數據中一部分斜率的變化。最終得到的神經網絡輸出(用虛線表示)也呈現出幾次斜率變化,正好能與數據產生擬合。模型訓練
代價函數代價函數根據具體問題來決定。如果我們預測連續變量(回歸問題),那么我們用方差作為代價函數。在這個神經網絡中有若干??和??參數,調整這兩個參數的取值將影響神經網絡的預測誤差。因此我們的代價函數可以用以下形式表示:如果我們需要解決分類問題,那么我們使用交叉熵作為我們的代價函數(也就是邏輯回歸中的代價函數):代價函數對于多分類問題,我們可以使用更復雜的交叉熵代價函數:其中,??為分類數量。而????代表???對第??類分類的輸出。參數估計神經網絡的參數估計也是通過最小化代價函數來進行。因為模型結構相對更復雜,并且因為是網絡結構,每一層的輸出都受到上一層數值的影響,我們無法簡單的方法來最小化代價函數。更麻煩的是這些代價函數甚至不是凸函數。如圖10.4,非凸函數可能存在多個局部最小值。在尋找代價函數最小值的過程中,我們可能會遇到局部最小值而停止搜索。因為函數的復雜性,我們不一定能找到使代價函數最小化的參數,但是我們能試圖找到一組參數能達到相對較好的局部最小值。參數估計接下來,我們可以使用梯度下降來找到合適的??和??參數。這個過程主要包括三個步驟:1.隨機初始化模型系數??,??2.反復進行以下兩個步驟:(a)輸入數據,并用神經網絡進行前向傳播,檢測模型表現(b)從模型輸出與實際數據進行比較,并用誤差進行對梯度的反向傳播,并用梯度更新模型系數前向傳播在模型訓練的過程中,我們需要反復檢驗當前模型輸出與目標變量之間的距離。在神經網絡中我們將取得??(??(??))的過程稱為前向傳播。因為在這個過程中,我們需要從輸入層的數據開始一層一層的計算神經元的輸出值,直到我們得到輸出層的結果。對所有數據??(??),??(??),我們進行如下操作:1.下步驟從??=1到??層,進行如下操作(??為隱藏層的層數):(a)對該層??=1到????的神經元的輸出進行計算:2.計算絡模型輸出值:反向傳播
反向傳播反向傳播通過反復進行前向傳播與反向傳播,我們不斷修正??和??參數,從而達到最小化代價函數的目的。以上步驟看上去十分復雜,但是在實際操作過程中,往往我們使用的機器學習軟件包都已經對這些問題進行過處理和優化。因此,我們并不需要過多擔心需要實現這些梯度下降的方法。先進的梯度下降算法由于深度神經網絡的訓練復雜度相比之前介紹的方法復雜度極大提高,并且訓練過程中我們經常需要使用海量的數據,我們通常會使用隨機梯度下降。具體算法在此我們不做過多介紹,表10.1將梯度下降與隨機梯度下降進行簡單對比。神經網絡正則化隨著神經網絡深度的增加,我們模型的參數也會隨之大量增加。因此,神經網絡往往復雜度非常高。所以,我們很可能會有過擬合的問題。為了達到更好的模型表現,我們需要對神經網絡模型進行的正則化,從而達到減少方差的效果。提前結束訓練另一種簡單的方法是提前結束訓練。理論上來說,我們應該反復進行正向傳播以及反向傳播,從而達到最小化代價函數的目的。但由于神經網絡模型的靈活性,過多的進行正向及反向傳播有可能造成過擬合問題。為了達到減小方差的目的,我們可以考慮提前結束訓練。這樣我們的參數與訓練數據的程度會得到控制,從而減小模型的方差。這種方法的好處是不需要對模型進行過多的修改,并且非常容易執行。簡單來說,我們只要在訓練之前選擇指定一個訓練的次數即可。當我們完成訓練次數之后,就算梯度還可以繼續下降,我們也終止對模型的繼續訓練。范數正則化如同回歸問題一樣,我們可以使用類似于嶺回歸的正則化項。以回歸問題為例,我們可以修改我們的代價函數至如下:這種方法中,我們需要尋找到一個合適的正則化參數??。好處是我們只需要對模型進行很小的修改。雖然我們也可以利用類似于套索回歸的范數正則化,但是在神經網絡中利用嶺回歸正則化更加多見。集成學習法我們也可以使用多個神經網絡進行集成學習。最終,我們將多個神經網絡的預測進行綜合并輸出結果。集成學習法可以很好的減少過擬合問題。但是訓練多個神經網絡可能會造成訓練成本過高的問題。隨機暫退法隨機暫退法(Dropout)是一種可應用于神經網絡的正則化方法。我們可以設定一個暫退參數??。在每一層中,我們隨機刪除??×????個神經元(????是第??層中神經元(或輸入單元)的數量。對于每一個訓練數據,我們都對網絡進行隨機暫退,同時我們也對每一層輸出值進行相應的縮放(縮放比例為1/(1???))。這種方法的思路與隨機森林有相似之處,因為每次我們都排除掉一部分信息。這種方法除了可以達到減小方差的效果。同時,也不會過多的增加計算量。常用的神經網絡結構1.前饋神經網絡:我們在這一章節中主要介紹的是前饋神經網絡。這一類網絡有著廣泛的應用,也是很多其他種類的神經網絡結構的基礎。我們可以用這一類網絡結構來預測連續變量(如股價變化),或分類變量(如貸款違約)。2.卷積神經網絡:卷積神經網絡主要針對圖像識別。比如,我們可以針對輸入的圖片來判斷其中的文字,或物體。卷積神經網絡的出現為經濟與金融提供了研究更多的數據源。在之后的章節中,我們將介紹如何將圖像識別等技術應用到金融經濟中。而卷積神經網絡則是進行這些工作的強有力的工具。常用的神經網絡結構3.循環神經網絡:循環神經網絡既可以用來分析時間序列數據(如經濟增長,股票回報等),也可以被用來獲取音頻中的信息。甚至,它在翻譯和其他文本處理的工作中也有廣泛的應用。但是循環神經網絡也有一些缺點。最大缺點是訓練效率很低。因此,在近期的技術發展中,很多應用已經被Trans_x0002_former模型取代。4.Transformer模型:Transformer模型是在近期得到了非常廣泛應用的神經網絡架構。Transformer在很多場景中完全的超越了循環神經網絡的表現。在近期的發展中,這一類模型成為了以BERT和GPT為代表的大語言模型(LargeLanguageModel)的基礎架構。在稍后的章節中,我們將介紹大語言模型的理論基礎及應用并更詳細的介紹Transformer模型的結構。使用scikit-learn訓練神經網絡讀取名為’ols_training.csv’的CSV文件中的數據,并將其存儲在df變量中定義一個特征列表X,包含三個特征名稱’pps’,‘bm’,‘roa’選取df數據中eps_basic作為目標變量,并保存在變量y中df=pd.read_csv("ols_training.csv")X=df[['pps','bm','roa']]y=df['eps_basic']使用scikit-learn訓練神經網絡將數據集劃分為訓練集和測試集,測試集占總數據的20%,訓練集占總數據的80%,隨機種子設為42以使結果可重復其中,將用于訓練的特征變量數據存儲在X_train中,用于測試的特征變量數據存儲在X_test中,用于訓練的目標變量數據存儲在y_train中,用于測試的目標變量數據存儲在y_test中X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)使用scikit-learn訓練神經網絡創建一個StandardScaler對象,用于對數據進行標準化處理使用scaler的fit_transfrom方法計算數據集X_train的平均值和標準偏差并對數據進行標準化處理,之后將標準化后的結果儲存在X_train_scaled中使用transform方法對X_test中的特征數據進行標準化處理,并使用與X_train同樣的標準化標準,即X_train的均值和標準差,之后將標準化后的結果儲存在X_test_scaled中scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)使用scikit-learn訓練神經網絡創建一個MLPRegressor對象nn,用于進行多層感知機回歸分析,設置4個隱藏層,隱藏層依次有10,20,20,10個神經元,激活函數為ReLU,隨機種子設為42,最大迭代次數為200次nn=MLPRegressor(hidden_layer_sizes=(10,20,20,10),activation='relu',random_state=42,m)nn.fit(X_train_scaled,y_train)使用fit方法對X_train_scaled和y_train進行多層感知機回歸分析使用scikit-learn訓練神經網絡使用訓練好的模型對測試集特征變量進行預測,并將結果儲存在y_pred中y_pred=nn.predict(X_test_scaled)mse=mean_squared_error(y_test,y_pred)print(mse)計算預測結果與真實值之間的均方誤差(MSE),并將結果保存在mse中.打印均方誤差。使用scikit-learn訓練神經網絡顯示損失曲線獲取損失曲線,該損失曲線記錄了神經網絡在訓練過程中的損失變化情況loss_curve=nn.loss_curve_plt.figure(figsize=(10,5))plt.plot(loss_curve,label='LossCurve')plt.title('LossCurvefortheThree-LayerNeuralNetwork')plt.xlabel('Iterations')plt.ylabel('Loss')plt.legend()plt.grid(True)plt.savefig('losscurve.png')plt.show()使用Pytorch訓練神經網絡使用pandas存儲數據導入torch庫中的nn模塊,用于構建神經網絡模型導入torch中的數據加載器模塊,用于數據集的處理importpandasaspdimportnumpyasnpimporttorchfromtorchimportnn使用Pytorch訓練神經網絡導入sklearn庫model_selection模塊的train_test_split,用于劃分訓練集和測試集導入sklearn庫preprocessing模塊的StandardScaler,用于數據標準化處理fromtorch.utils.dataimportTensorDataset,DataLoaderfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScaler使用Pytorch訓練神經網絡定義一個特征列表X,包含三個特征名稱’pps’,‘bm’,‘roa’,并轉換為float32類型選取df數據中eps_basic作為目標變量,并轉換為float32類型,保存在變量y中df=pd.read_csv('ols_training.csv')X=df[['pps','bm','roa']].values.astype(np.float32)y=df['eps_basic'].values.astype(np.float32)使用Pytorch訓練神經網絡將數據集劃分為訓練集和測試集,測試集占總數據的20%,訓練集占總數據的80%,隨機種子設為42以使結果可重復其中,將用于訓練的特征變量數據存儲在X_train中,用于測試的特征變量數據存儲在X_test中,用于訓練的目標變量數據存儲在y_train中,用于測試的目標變量數據存儲在y_test中X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)使用Pytorch訓練神經網絡創建一個StandardScaler對象,用于對數據進行標準化處理使用scaler的fit_transfrom方法計算數據集X_train的平均值和標準偏差并對數據進行標準化處理,之后將標準化后的結果儲存在X_train_scaled中使用transform方法對X_test中的特征數據進行標準化處理,并使用與X_train同樣的標準化標準,即X_train的均值和標準差,之后將標準化后的結果儲存在X_test_scaled中scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)使用Pytorch訓練神經網絡將標準化處理后的訓練數據和測試數據轉換為torchtensor,分別儲存在X_train_tensor,X_test_tensor,y_train_tensor,y_test_tensor中,方便后續的深度學習計算。torch.tensor(y_train).view(-1,1)將numpyarray變成一個tensor。-1說明讓程序自動計算tensor中元素的數量。因為y中只有一個變量,因此第二個緯度的大小為1。X_train_tensor=torch.tensor(X_train_scaled)y_train_tensor=torch.tensor(y_train).view(-1,1)X_test_tensor=torch.tensor(X_test_scaled)y_test_tensor=torch.tensor(y_test).view(-1,1)使用Pytorch訓練神經網絡創建TensorDataset對象,將訓練數據和測試數據傳入,分別儲存在train_data和test_data中,生成可以用于后續深度學習計算的數據集train_data=TensorDataset(X_train_tensor,y_train_tensor)test_data=TensorDataset(X_test_tensor,y_test_tensor)使用Pytorch訓練神經網絡我們使用minibatch設置每個batch的樣本數為64。說明每一次訓練中,我們不會使用所有的數據,而是隨機選擇64個數據點。這是隨機梯度下降的一種形式。batch_size=64創建DataLoader對象train_loader和test_loader,將訓練數據集,測試數據集和batchsize傳入,生成可以用于后續深度學習訓練的數據加載器train_loader=DataLoader(dataset=train_data,batch_size=batch_size,shuffle=True)test_loader=DataLoader(dataset=test_data,batch_size=batch_size,shuffle=False)使用Pytorch訓練神經網絡檢查是否有可用的GPU,如果有則使用GPU進行計算,否則使用CPU進行計算。在深度神經網絡中,GPU可以極大增加訓練速度。device=torch.device('cuda'iftorch.cuda.is_available()else'cpu')print(torch.cuda.is_available())使用Pytorch訓練神經網絡定義神經網絡結構定義一個名為NN的神經網絡模型類,繼承自torch.nn.Module,包含以下結構:1.調用父類__init__方法,初始化網絡模型,包含多個線性層和激活層:(a)第一層全連接層,輸入特征維度3,輸出維度100,非線性激活函數ReLU(b)第二層全連接層,輸入維度100,輸出維度100,非線性激活函數ReLU(c)第三層全連接層,輸入維度100,輸出維度100,非線性激活函數ReLU(d)第四層全連接層,輸入維度100,輸出維度50,非線性激活函數ReLU(e)最后一層全連接層,輸入維度50,輸出維度12.定義前向傳播過程,輸入x經過網絡模型得到輸出classNN(nn.Module):def__init__(self):super(NN,self).__init__()work=nn.Sequential(nn.Linear(3,100),nn.ReLU(),nn.Linear(100,100),nn.ReLU(),第10章神經網絡192nn.Linear(100,100),nn.ReLU(),nn.Linear(100,50),nn.ReLU(),nn.Linear(50,1))defforward(self,x):returnwork(x)使用Pytorch訓練神經網絡實例化模型,并將其移動到指定設備上運行model=NN().to(device)定義損失函數為均方誤差損失函數criterion=nn.MSELoss()定義優化器為Adam優化器,學習率設置為0.001,權重衰減設置為1e-5optimizer=torch.optim.Adam(model.parameters(),lr=0.001,weight_decay=1e-5)使用Pytorch訓練神經網絡定義訓練模型函數train_model,它接受五個參數:model(要訓練的模型),criterion(損失函數),optimizer(優化器),train_loader(訓練數據加載器),以及epochs(訓練輪數,默認為10000輪)其結構具體包含:1.將模型設置為訓練模式2.遍歷模型訓練的輪數,每次循環都會從訓練加載器train_loader中獲取一批新的輸入和目標數據3.將輸入數據和目標數據移動到指定設備上4.清空梯度緩存5.模型對輸入數據進行前向傳播得到輸出6.根據損失函數計算模型輸出和目標之間的損失7.反向傳播,計算梯度值8.根據梯度值更新模型參數9.每10次訓練打印一次當前訓練數和損失值deftrain_model(model,criterion,optimizer,train_loader,epochs=10000):model.train()forepochinrange(epochs):forinputs,targetsintrain_loader:inputs,targets=inputs.to(device),targets.to(device)19310.7神經網絡程序optimizer.zero_grad()outputs=model(inputs)loss=criterion(outputs,targets)loss.backward()optimizer.step()if(epoch+1)%10==0:print(f'Epoch{epoch+1}/{epochs},Loss:{loss.item():.4f}')使用Pytorch訓練神經網絡調用訓練模型函數進行訓練train_model(model,criterion,optimizer,train_loader,epochs=200)將模型設置為評估模式,方便我們接下來進行評估模型表現。訓練結束。因為我們使用小批次隨機梯度下降(mini-batchgradientde_x0002_scent),因此我們不一定能看到梯度單調下降。同時,這也可能說明我們模型有過擬合的問題。接下來,我們對訓練好的模型進行驗證。model.eval()使用Pytorch訓練神經網絡在此環境下不計算梯度,不進行反向傳播,只進行前向傳播和計算損失值等操作具體包括:1.模型對測試數據進行前向傳播得到預測值2.根據損失函數計算測試損失值并轉換為python數值類型withtorch.no_grad():predictions=model(X_test_tensor)test_loss=criterion(predictions,y_test_tensor).item()打印測試損失值print(f'TestLoss:{test_loss:.4f}')習題:知識理解1.請繪制一個神經網絡。輸入層有兩個變量(??1,??2)。三個隱藏層,每一層的神經元數量依次為(3,2,3)。激活函數為ReLU。輸出層是一個線性函數。請標出每一層第一個神經元的函數。2.如果以上神經網絡與數據擬合不佳,其問題是欠擬合。我們如何能夠修改神經網絡以改善問題?習題:計算題1.我們有如上神經網絡結構。請根據以下??,??參數以及函數形式計算輸出最終輸出值。習題:程序編寫請對本章中的神經網絡程序進行以下修改,并評估修改后的模型表現:1.請減少一層隱藏層。2.請增在輸出層以前增加一層隱藏層。該層中有10個神經元。第11章監督學習的小結學習目標本章的學習目標如下:熟悉不同模型的優缺點比較了解如何使用特征重要性了解如何使用SHAP值增加模型可解釋性熟悉使用程序實現模型的可解釋性方法簡介首先,我們先回顧一下監督學習的應用場景。然后,我們將對介紹過的主要模型進行一些簡單的比較。然后,我們介紹如何為復雜模型增加可解釋性。監督學習方法的總結監督學習在金融中的應用監督學習這一類方法在金融業中有著廣泛的應用場景。監督學習既可以用于對回歸問題(即對連續變量的預測)也可以對分類問題進行預測。監督學習的特點是我們需要給一些例子用來訓練模型中的參數。而作為例子的訓練數據中必須有特征變量(即??變量)以及目標變量(即??變量)的數值。一旦模型訓練完成,我們就可以用來預測新的數據。監督學習在金融中的應用我們已經討論過幾種應用,包括預測貸款違約及對公司基本面的預測。除了這些應用之外,我們還可以將其用于其他預測問題。例如,我們可以預測公司股價變化,房價的漲跌幅度,以及經濟指數的變化。根據具體的問題以及數據量,我們可以選擇適合的監督學習的方法。監督學習模型比較監督學習模型比較該圖可見,簡單的模型的優勢是有著很好的可解釋性,也有著較低的計算成本。復雜的模型則往往會犧牲可解釋性以及較少的計算量。但是復雜的模型可以更好的對數據進行擬合。在減少過擬合問題的同時,復雜模型也有更高的過擬合的風險。為了減少過擬合的風險,我們需要對模型進行驗證。我們也可以通過正則化方法來減少模型的方差,減少過擬合問題。復雜模型的可解釋性如前一部分討論的那樣,隨著模型復雜性的增加,我們模型的可解釋性往往會極大下降。本章中,我們將簡單介紹兩種方法來給復雜的模型增加一定的可解釋性。特征重要性分析
特征重要性分析
特征重要性SHAP值
SHAP值SHAP值SHAP值
程序導入庫使用pandas存儲數據導入sklearn庫model_selection模塊的train_test_split函數,用于劃分訓練集和測試集導入sklearn庫ensemble模塊的RandomForestRegressor類,用于創建隨機森林回歸模型導入shap庫,用于解釋機器學習模型的預測結果導入庫數據讀取及處理
使用隨機森林模型創建一個隨機森林回歸模型對象rf_model,設置隨機種子為42,樹的數量設置為100,最小樣本分裂為10使用fit方法對X_train和y_train進行隨機森林回歸分析特征重要性獲取隨機森林回歸模型的特征重要性,并將其保存在變量feature_importances中打印特征重要性根據特征重要性對特征進行排序,indices為排序后的索引將特征名稱根據排序后的索引重新排列,names中存儲的即為排序后的特征名稱列表特征重要性繪制一個條形圖,x軸為特征的索引,y軸為特征的重要性,特征的重要性由feature_importances提供,特征的索引由indices提供特征重要性使用Shap增加模型可解釋性創建一個shap解釋器對象explainer,explainer可以用來解釋rf_model對任意輸入數據的預測結果使用Explainer對象對測試集數據進行解釋,得到每個特征對預測結果的影響值,存儲在shap_values變量中使用shap庫的plots.waterfall函數繪制一個瀑布圖,來可視化shap_values中第一個元素的影響使用Shap增加模型可解釋性習題知識理解
程序操作請使用隨機森林來擬合貸款違約數據。請使用特征重要性來闡述哪些變量對模型的結果有著較大的影響。請使用Shap值對特征的重要性以及其影響的方向做出解讀。請選擇數據中的前3個數據點,并使用Shap值來闡述數據中的特征如何影響到模型對這三個數據點的預測結果。第12章主成分分析學習目標本章的學習目標為下:熟悉主成分分析的應用范圍理解主成分分析法的算法熟悉使用程序實現主成分分析案例:投資策略預測股票回報是金融學學術界以及業界都非常關心的問題。在量化投資領域,研究人員發現了大量的投資策略。有論文總結出上百種不同的股票投資的信號。但是這些許多信號可能包含著類似的信息。當我們預測股票回報時,我們可以將所有的變量都作為模型特征。但是這種方法會有許多問題。第一,大量的特征可能會降低模型訓練速度。第二,當我們模型中大量特征有很高的相關性時,可能會導致模型的表現不穩定。在這一章中,我們將介紹一種有助于解決以上問題的無監督學習的方法:主成分分析。主成分分析方法方法簡介主成分分析(Principle
ComponentAnalysis)能夠從多個變量中提取出共同的信息。我們可以將大量的變量轉換為數量更少的變量,同時又能保留這些變量中的大部分信息(我們將這一過程稱為降維)。因此,我們可以通過主成分分析達到減少模型中特征數量,從而能提高模型的訓練速度的效果。同時,主成分分析降低模型特征的相關性。方法簡介(案例)
方法簡介(案例)方法簡介(案例)
方法簡介(案例)方法簡介
如何找到主成分
如何找到主成分
如何找到主成分
如何找到主成分
如何找到主成分
如何找到主成分
如何找到主成分
拓展:偏最小二乘回歸在使用主成分分析時,僅僅考慮的是特征變量間的關系,而并未考慮特征變量與目標變量之間的關系。如果,我們想在降低特征維度的的同時達到與目標變量的高相關度,那么,可以考慮使用偏最小二乘回歸方法(PartialLeastSquare或PLS)。也就是說,這種方法抽取的低維度變量需要同時與特征變量與目標變量有較高的相關性。偏最小二乘回歸算法
偏最小二乘回歸算法
主成分分析程序我們用每股收益數據做為例子來探索主成分分析的使用場景。首先,我們對該數據的三個特征進行主成分分析。接下來,使用主成分分析對數據進行降維。最后,我們分別用降維前以及降維后的數據來預測未來每股收益。導入庫使用pandas存儲數據導入sklearn.preprocessing庫中的StandardScaler類,用于數據標準化導入sklearn.linear_model庫中的LinearRegression類,用于線性回歸模型分析導入sklearn.metrics庫中的mean_squared_error函數,用于計算均方誤差導入sklearn.decomposition庫中的PCA類,用于主成分分析進行數據讀取及處理讀取名為`ols_training.csv’的CSV文件中的數據,并將其存儲在train-ing_data變量中讀取名為`ols_testing.csv’的CSV文件中的數據,并將其存儲在testing_data變量中打印訓練數據集和測試數據集的前五行,用于查看數據格式和內容進行數據讀取及處理從數據中刪除不需要的特征列在訓練集中刪除`eps_basic’列,其余變量作為特征變量,保存在X_train中,并將’eps_basic’列作為目標變量,保存在y_train中在測試集中刪除`eps_basic’列,其余變量作為特征變量,保存在X_test中,并將’eps_basic’列作為目標變量,保存在y_test中進行數據讀取及處理創建一個StandardScaler對象,用于對數據進行標準化處理使用fit_transfrom方法計算數據集X_train的平均值和標準偏差并對數據進行標準化處理,之后將標準化后的結果儲存在X_train_scaled中使用transform方法對X_test中的特征數據進行標準化處理,并使用與X_train同樣的標準化標準,即X_train的均值和標準差,之后將標準化后的結果儲存在X_test_scaled中創建一個PCA對象,設置主成分的數量為3進行數據讀取及處理使用fit方法對X_train_scaled特征矩陣進行主成分分析,返回主成分分析后的特征矩陣X_train_pca從PCA對象中獲取前三個主成分對應的方差比率,并將其保存在variance_explained中,用于可視化展示每個主成分解釋的方差比例進行數據讀取及處理創建一個新的窗口,準備進行可視化展示進行數據讀取及處理進行數據讀取及處理
進行數據讀取及處理使用fit方法對X_test_scaled進行轉換,得到降維后的測試數據X_test_pca打印原始訓練數據集和降維后的訓練數據集的前五行。可見我們數據的維度從三維降至一維。使用ols模型分別使用降維之前與之后的數據進行訓練創建一個線性回歸對象ols_model使用fit方法對X_train_scaled和y_train進行線性回歸分析再次創建一個線性回歸對象ols_pca_model,用于對主成分分析后的數據進行線性回歸分析使用fit方法對X_train_pca和y_train進行線性回歸分析使用ols模型分別使用降維之前與之后的數據進行訓練使用predict方法對原始訓練數據集進行預測,將訓練預測結果保存在train_predictions中計算訓練預測結果的均方誤差,將結果保存在train_mse中使用ols模型分別使用降維之前與之后的數據進行訓練使用predict方法對降維后的訓練數據集進行預測,將訓練預測結果保存在train_pca_predictions中計算降維后訓練預測結果的均方誤差,將結果保存在train_pca_mse中使用ols模型分別使用降維之前與之后的數據進行訓練使用predict方法對原始測試數據集進行預測,將訓練預測結果保存在test_predictions中計算測試預測結果的均方誤差,將結果保存在test_mse中使用predict對降維后的測試數據集進行預測,將測試預測結果保存在test_pca_predictions中使用ols模型分別使用降維之前與之后的數據進行訓練計算降維后測試預測結果的均方誤差,將結果保存在test_pca_mse中打印出原始模型和PCA降維后的模型的訓練集均方誤差使用ols模型分別使用降維之前與之后的數據進行訓練打印出原始模型和PCA降維后的模型的測試集均方誤差使用降維之后的數據使得訓練誤差增加。但是似乎降低了模型在驗證數據中的誤差。這可能是因為通過降維,我們減少了模型的過擬合程度。習題知識理解如果我們的數據中總共有1,000個數據點,每個數據點中有100個特征。我們通過主成份分析將數據降至10維。請問新數據中有多少個數據點?新數據中有多少個變量?如果我們使用方差作為數據中的信息含量,那么如何計算降維后我們所丟失的信息?程序操作在股票匯報預測的數據中,請使用降維的方法將該數據的維度降為10維。請計算降維后數據所丟失的信息量(方差)。糾錯P216,句尾逗號多余P219,句尾句號多余P218,句尾句號多余第13章聚類分析本章的學習目標為:理解聚類分析的使用范圍?熟悉如何使用K均值方法實現聚類分析?熟悉使用程序實現聚類分析案例:貸款違約?在監督學習的章節中,我們討論過如何用監督學習的方法對貸款違約進行預測。使用監督學習方法的前提是我們需要一些標記過的數據作為例子以供模型來學習。在貸款違約的案例中,作為例子的數據中有貸款者的信息,也有貸款是否違約的信息。案例:貸款違約假設,如表13.1我們沒有貸款是否違約的信息,能否通過貸款者以及貸款特點等數據來對貸款的風險進行分類呢?表13.1貸款數據聚類分析方法:簡介聚類分析(Clustering)是一類對無標識數據進行分類的無監督學習方法。例如,如果違約與未違約的人群在我們的特征有著顯著的區別,那么我們可能有方法通過這些區別將數據分到不同的子集中。聚類分析的目標則是使用算法通過我們已有的特征來對數據進行分類。在貸款違約的例子中,我們需要將數據分成兩個聚類(即違約人群和未違約人群)。但是在其他應用中,我們可能需要對數據區分到更多的聚類中。聚類分析方法:K均值法
圖13.1:聚類分析聚類分析方法:K均值法???均值方法中的??表示的是聚類的數量。如果我們需要將數據分到違約與不違約的兩類中,那么??=2。而圖13.1中的數據則適合將??設為3
圖13.1:聚類分析K均值法:定義首先我們需要定義什么是好的分類。通常來說,好的分類可以令每個分類中數據的差別最小化。因為我們的數據中沒有標簽??變量。因此,我們只能通過特征變量??來定義數據中的差別。最常用的定義方法數據點之間距離的兩個數據之間的平方歐幾里德距離。兩個數據點??(??),??(??)的距離定義如下:
K均值法:定義
K均值法:算法流程以下算法可以讓我們很快的找到較好的分類又不至于消耗太多的計算資源:
?將所有數據點隨機分到??個聚類中重復?以下步驟,直到分類停止變化:?對于每個聚類??,計算出聚類??的中心點,即:?將每個數據點重新分類,每個數據點的新分類為與其擁有最近中心點的聚類
K均值法:步驟?圖13.2展示的是??均值聚類方法的步驟。
圖13.2:K聚類分析步驟K均值法:步驟在第一步,聚類明顯有嚴重的問題。許多相鄰的數據點被分到兩個不同的子集中,同時許多相隔很遠的數據被分到了同一個子集中。這是因為起始的分類是隨機的。接下來的每一步中,分類質量都在不斷提高。同時,每個聚類的中心點(如三角形所示)也慢慢分離
K均值法:缺點?K均值方法能夠在無標簽的情況下為我們提供快速且有效數據分類的算法。但該算法也有許多短板:在許多數據中,子集的分類不會像我們生成的數據那樣明顯。我們用K均值方法只能達到局部最好的分類,而不是整體最好的分類。分類的效果隨著我們隨機初始化的取值不同而變化。因此,我們最好進行多次隨機初始化并進行分類,并選取多次分類中效果最好的一個。
K均值法:缺點該方法對我們每個特征變量的方差特別敏感。最好在分類前先將方差進行縮放。這樣不同特征的距離更具有可比性。?K均值方法需要我們首先確定聚類的數量??。在很多問題中,我們需要多少聚類并不是特別明確。在圖13.3中,我們選擇了??=5而不是3。因此許多貌似應屬于同一類的數據被強行分到了兩個不同的子集里。在這種情況下,我們可以考慮另一種聚類方法(層次聚類)。
K均值法:缺點圖13.3:錯誤的K值圖13.3展示了選擇錯誤K值的分類結果。K均值法:程序代碼?我們使用貸款違約數據為例。在本例子中,我們不使用之前在監督學習章節中的目標變量isDefault(即貸款違約變量)。我們試圖僅僅使用四個特征變量對數據進行聚類。最后,我們檢驗聚類的結果是否能給我們提供一些有用的信息。’
K均值法:程序代碼導入庫使用pandas存儲數據。導入sklearn.preprocessing庫中的StandardScaler類,用于數據標準化。導入sklearn.cluster模塊中的KMeans類,用于數據聚類分析。
K均值法:程序代碼數據讀取及處理讀取名為’train_sample_small.csv’的CSV文件中的數據,并將其存儲在train_sample變量中。定義一個特征列表fea_cols,包含四個特征名稱’employmentYear’,‘homeOwnership’,‘annualIncome’,‘dti’
K均值法:程序代碼數據讀取及處理使用中位數來填補缺失值
K均值法:程序代碼數據讀取及處理創建一個StandardScaler對象,用于對數據進行標準化處理使用scaler的fit方法計算數據集train_sample的平均值和標準偏差
K均值法:程序代碼數據讀取及處理使用transform方法對train_sample中的特征數據進行標準化處理(處理后的特征都是平均值為0,標準方差為1)將標準化處理后的數據train_x_standardized轉化為DataFrame格式,并將結果存儲train_x_standardized中,同時定義列名為特征列表fea_cols
K均值法:程序代碼數據讀取及處理從原始數據中選擇fea_cols中定義的列,用于后續的聚類分析。
K均值法:程序代碼進行KMeans聚類分析創建KMeans對象用于聚類分析,設置聚類數為2,隨機狀態為0。?使用特征變量對kmeans進行訓練,并將結果添加到原始DataFrame中作為新的列‘cluster’,表示每個樣本的聚類標簽。K均值法:程序代碼進行KMeans聚類分析?對聚類后的數據進行分組,計算每組的‘isDefault’列的平均值,并生成新的DataFrame顯示聚類結果。K均值法:程序代碼?結果分析我們要求程序根據四個特征(‘employmentYear’,‘homeOwnership’,‘annualIncome’,‘dti’),對樣本進行了聚類。因為我們沒有使用目標變量isDefault(是否違約),因此這一過程是無監督學習。但是我們的聚類同樣含有isDefault的信息。我們檢驗聚類結果中貸款違約的概率。
K均值法:程序代碼?結果分析?不難發現,編號1的聚類中違約率基本為0。而編號為0的聚類樣本的違約率是0.21。可見,雖然在模型訓練的過程中,我們沒有可供學習的樣本,無監督學習仍然可以幫助我們得到有用的信息。
聚類分析:習題?請闡述K均值分析方法與K近鄰分類器的相似點以及不同點。?請使用本章中的K均值分析方法的程序。移除random_state=0(這樣每次程序運行的初始狀態都是隨機)。運行程序5次,并觀察是否對結果產生影響。?請思考在哪些場景中我們可以使用K均值分析方法。
錯誤:1.
224面存在病句:第14章缺失數據本章的學習目標為:理解造成數據缺失的幾種普遍原因熟悉填充缺失數據的基本方法,以及這些方法的優缺點掌握使用程序對缺失數據進行填充案例:缺失數據我們在搜集數據的過程中經常會遇到缺失數據的問題。如表14.1所示,數據3的一個特征數據是缺失的。造成的原因可能是數據搜集過程中沒有要求用戶填寫該數據,也可能是因對數據管理的疏忽而造成一些數據丟失。表14.1缺失數據案例:缺失數據在本章中,我們將對缺失數據的問題進行分析,并介紹一些常用的缺失數據處理方法。這些方法中會用到我們之前介紹過的機器學習方法,因此我們也可以將這個章節當作對之前的機器學習方法學習的一種回顧。以財報數據為例,有的數據不一定是監管要求披露的信息。因此有的公司會對其進行披露,而另外一些公司選擇不提供這些數據。另外,數據提供商在搜集整理這些數據的過程中,也可能因為操作失誤而丟失一些數據缺失原因??通常數據缺失是由三類原因導致的。?完全隨機缺失:?全隨機數據缺失指的是數據缺失的概率與其他因素無關。例如,由于數據提供商的疏忽,可能沒能搜集到一些公司披露過的數據。這些數據與公司的基本面,公司的規模以及公司披露的習慣無關。?非隨機缺失:非隨機缺失則是我們在缺失數據的概率與數據集之外的其他變量也有關系?缺失原因?隨機缺失:隨機數據缺失問題指的是數據缺失的概率與我們分析的其他特征有關,但是在考慮我們數據的其他特征之外,數據缺失的幾率與其他變量沒有關系。例如,大型公司披露數據工作可能更為仔細,因此缺失的數據的可能性較小。但除此之外,數據缺失與其他變量沒有關系。這種數據缺失顯然不是完全隨機的。如果公司的規模是我們模型中的一個變量,那么我們將這種數據缺失稱為隨機缺失。?值得注意的是我們很難區分隨機缺失與非隨機缺失。而我們接下來介紹的大部分方法需要假設數據是完全隨機缺失或隨機缺失。缺失數據:簡單處理方法刪除數據最簡單的處理方法是直接將具有缺失特征的數據進行刪除。這種方法操作簡單,但是當有大量數據都有缺失時,可能會造成大量數據點從數據中遭到刪除。這種情況下,我們可以考慮將數據缺失較多的特征從模型中移除。
缺失數據:簡單處理方法簡單數據填充刪除數據會造成信息的丟失。因此在許多應用中,我們使用數據填充來對缺失數據進行處理。例如,對于連續變量,我們可以使用未缺失的數據計算變量的平均值或者中位數。并用這些值對缺失的數據進行填充。這些數據填充方法我們在之前章節的程序中已經進行了應用。
缺失數據:簡單處理方法簡單數據填充——分類數據如果缺失的數據是分類數據。那么,我們可以考慮用頻率最高的分類用于填充缺失數據。例如,如果我們將貸款申請人的房產數量當成一個分類數據,那么0套住房的申請者應該會比擁有房產的人更多,因此我們可以考慮將缺失的數據設置為0。
缺失數據:簡單處理方法簡單數據填充——時間序列數據如果我們數據中有時間序列,那么我們可以考慮用前一期的非缺失數據對當期的數據進行填充。例如,如果某公司市凈率數據(bm)在2020年缺失,那么我們可以考慮用2019年的數據對其進行填充。這種填充方法通常只有在該變量相對穩定的情況下才能使用。變化較大的數據(例如月度股票回報)則不能用這個方法進行處理。
缺失數據:進階填充方法進階填充方法雖然將數據用平均值或中位數進行填充的操作簡單有效,并且應用廣泛,但這些方法也有一些問題。例如這些方法會造成過多的數據出現在平均數或中位數上。另外,我們沒有充分運用到數據中的一些相關性信息。接下來我們介紹的數據填充方法主要思路是利用數據之間的相關性來對缺失數據進行填充。例如,如果我們數據中有兩個相關度較高的變量(比如市凈率,?市盈率)。
缺失數據:進階填充方法進階填充方法?某公司的市凈率數據可能有缺失,但是我們可以通過該公司未缺失的市盈率數據對缺失的市凈率數據進行預測。并用模型的預測值來填充缺失的數據。?這一類方法的好處是我們填充的缺失數據相較于平均值/中位數應該更接近于缺失數據原本的數值。因此,這些填充方法所取得的數據應該能幫助我們的模型取得更好的預測效果。進階填充方法:多重插補鏈式方程
多重插補鏈式方程?第一種常用方法是多重插補鏈式方程(MICE)。這種方法如下:?
進階填充方法:多重插補鏈式方程
多重插補鏈式方程?用表14.1中的數據為例。我們做以下數據填補。表14.2很好的說明了數據填補的步驟。第一步(如上表所示)先用每列的平均值來填補缺失的數據(每股股價的平均值為18.934,市凈率平均值為0.531)。
進階填充方法:多重插補鏈式方程
多重插補鏈式方程?下表為MICE數據填補??=1的情況,我們通過每股股價與其他兩個變量之間的關系,將每股價格修正為23.275(通過回歸分析,我們發現股價=16.164?1.138×市凈率+201.89×資產回報率)。進階填充方法:多重插補鏈式方程
多重插補鏈式方程同時我們將市凈率進行同樣的調整,得到0.523的數值。如果我們設置更高的??值,那么我們將重復以上步驟來對缺失的數據值進行更新。我們將MICE填充方法與平均值填充法進行比較。可以發現MICE跟原始數據更為接近。3因此,可以得知我們可以通過MICE方法得到更好的數據填充效果。?
進階填充方法:?矩陣補完法
矩陣補完法另一種廣泛使用的方法是使用主成分分析法(PCA),在計算主成分的時候我們同時能對缺失數據值進行推算:?
進階填充方法:?矩陣補完法
?
?重復以下步驟,直至目標函數停止下降:?用??個主成分的線性組合更新??中缺失的數據:?計算目標函數:輸出???
進階填充方法:?K近鄰法和其他方法
K近鄰法我們也可以用??????方法來對數據進行填補。簡單來說,對于一個數據點,我們通過其未缺失的變量來找到離該變量接近的其他數據點,并用這些數據點中為缺失的數據的平均值對該數據點的缺失數據進行填補。?進階填充方法:?K近鄰法和其他方法
其他方法?有些機器學習算法可以自動處理含有缺失值的數據。例如我們之前提到的一種提升算法xgboost。使用該算法之前不需要對缺失數據進行預處理。xgboost算法自動將缺失的數據當成特征中一個特殊的值來進行運用。如果算法無法自動處理缺失數據,而數據填充也不合適,那么我們可以考慮對數據進行如下操作。首先,將缺失數據進行填充(例如將其設置為0)。然后,再生成一個變量,當發生數據缺失時該變量取值為1,否則為0。缺失數據:程序代碼導入庫使用pandas存儲數據導入sklearn庫中的SimpleImputer,用于簡單的均值插補,通過平均值、中位數或眾數等統計指標來填充數據集中的缺失值?導入sklearn庫中的experimental模塊的enable_iterative_imputer,用于啟用迭代插值功能缺失數據:程序代碼導入庫導入sklearn庫中的IterativeImputer,用于迭代插補導入sklearn.metrics庫中的mean_squared_error函數,用于計算均方誤差缺失數據:程序代碼數據讀取及處理讀取名為’missing_values.csv’的CSV文件中的數據,并將其存儲在df變量中打印df數據集的前五行,用于查看數據格式和內容缺失數據:程序代碼?用平均值來填補缺失數據創建一個SimpleImputer對象,采用mean策略,即使用每一列的平均值來填充該列的缺失值?使用fit_transform方法對數據進行填充處理,并將結果存儲在bm_mean_imputed中缺失數據:程序代碼?用MICE進行缺失數據填補?創建一個IterativeImputer對象,用于使用多重插補方法填充缺失值?使用fit_transform方法對數據進行填充處理,并將結果存儲在bm_mice_imputed中缺失數據:程序代碼?繪制兩種缺失數據填補方法得到數據的分布創建畫布,分別繪畫兩張子圖,代碼如下:缺失數據:程序代碼?繪制兩種缺失數據填補方法得到數據的分布左圖的用平均值填補的數據中有大量數據集中在0.5附近。右圖是用MICE進行填補,其分布更為均勻。缺失數據:習題?請將本章中使用的數據分成訓練數據以及驗證數據兩部分,并進行以下工作???請根據本章中的程序填補缺失數據。請使用數據填補的方法對驗證數據中的缺失值進行填補。?請思考一個具體的例子來說明什么時候不適合使用本章中的數據填充方法。
基礎文本分析學習目標本章學習目標為:1、掌握使用詞典對金融文本進行分析,并了解常用的中英文金融詞典2、了解常用的文本預處理步驟3、理解如計算文本相似度4、了解詞嵌入模型以及其優點5、熟悉如何使用程序進行簡單的文本分析文本分析簡介在金融市場中,各種文本信息都傳遞著豐富且重要的信息。雙方的交易經常需要通過合同文本來制定交易的條件。上市公司需要定期以文本的形式向廣大股東披露公司的經營現狀以及對未來業務發展的展望。新聞媒體用文本的形式向訂閱者推送經濟以及金融市場的最新消息。分析師用文本給客戶傳達對公司的分析。雖然文本中有著極其豐富的信息,但是不同于數據,文本中的信息不能直接放到機器學習模型中。在本章中我們將簡單介紹一些方法將文本中的信息轉化成機器學習模型中可以直接應用的結構化的數量信息,并且介紹如何使用這些信息。在以下介紹中,我們先從英文文本為例對文本分析的方法進行介紹。在本章最后,我們將介紹如何將這些文本分析的方法應用到中文文本上。詞袋模型詞袋模型(Bag-of-words,簡稱BOW)是最基本的文本分析方法。該方法將文本分解成不同的詞匯,并匯總文本中詞匯的意思來獲取信息。以下這段文字是摘取自微軟公司(MicrosoftCorporation)2023財年的年報。TheinvestmentswearemakingincloudandAIinfrastructureanddeviceswillcontinuetoincreaseouroperatingcostsandmaydecreaseouroperatingmargins.Wecontinuetoidentifyandevaluateopportu-nitiestoexpandourdatacenterlocationsandincreaseourserverca-pacitytomeettheevolvingneedsofourcustomers,particularlygiventhegrowingdemandforAIservices.Ourdatacentersdependontheavailabilityofpermittedandbuildableland,predictableenergy,net-workingsupplies,andservers,includinggraphicsprocessingunits("GPUs”)andothercomponents.Ourdevicesareprimarilymanu-facturedbythird-partycontractmanufacturers.Forthemajorityofourproducts,wehavetheabilitytouseothermanufacturersifacur-rentvendorbecomesunavailableorunabletomeetourrequirements.However,someofourproductscontaincertaincomponentsforwhichthereareveryfewqualifiedsuppliers.Extendeddisruptionsatthesesupplierscouldimpactourabilitytomanufacturedevicesontimetomeetconsumerdemand.詞袋模型——預處理使用詞袋模型的第一步是對段落分拆成單詞的集合。在英文中這一步非常容易。因為在英語中空格和標點(如逗號,句點)自然地將段落或句子分割成了單詞。接下來,對每個單詞出現的次數進行統計。因為在英文中,同一個單詞有許多變形。例如段落中的單詞“operating”的變形有“operate”,”operated”,”operation”
等。為了方便后續的處理,可以對單詞進行詞干提取(stemming)或詞型還原(lemmatization)。詞干提取:詞干提取通過去除單詞的詞綴(如后綴和前綴)來將其還原到根形式。這比詞形還原更基本,有時會產生非實際單詞的根。例如:?Running(跑步)→Run(跑)?Better(更好)→Bett詞袋模型——預處理詞型還原:詞形還原是一種更復雜的過程,它使用詞匯和形態分析來將單詞還原到其詞典形式或詞元。例如:?Running(跑步)→Run(跑)?Better(更好)→Good(好)詞干提取通常更快,適用于計算資源有限而數據量較大的時候。詞形還原適合計算資源豐富的應用場景。中文文本的分詞任務比英文更為復雜。但是,有一些分詞算法可以對中文進行非常準確的分詞。例如,“結巴”是一個簡單易用的中文分詞程序包。我們可以直接調用這一類的程序對文本進行分詞。詞袋模型——預處理詞頻統計:簡單來說,我們將每個單詞在文本中出現的頻率進行統計。如果我們對單詞進行過詞干提取或詞形還原,那么一般來說我們會對單詞的詞干或還原后的單詞進行詞頻統計。我們對上述文本進行詞頻統計,并將結果整理成如下的形式:單詞詞頻datacenter2manufacturer1device3investment1consumer1表15.1:詞頻統計詞袋模型——預處理否定詞:我們往往需要對否定詞進行特殊處理,比如“growth”表示增長,而“nogrowth”表達的意思與之完全不同。在中文“不”和“否”或是“非”都表達了否定的意思。經過這些詞的修飾,我們本來詞匯的表意會發生巨大的改變。為了防止錯誤的解釋,我們往往需要將附近有否定表達的詞匯進行刪除。停用詞:在預處理中,我們往往會刪除掉一部分往往不傳達重要信息的詞匯。這些詞匯又被稱為“停用詞”(Stopwords)。例如﹐在英文中常見的停用詞有“and”,“has”,“your”等等。在中文中“是”,“且”,“個”,“有些”等詞匯也是停用詞。我們可以根據實際數據處理的要求找到合適的停用詞列表,并將這些停用詞排除在數據處理任務之外。詞袋模型——預處理詞頻法:最簡單的詞匯權重分配方法。即每個詞對應的權重都是1。這種均等權重的好處是計算簡單。另外一種常見的詞匯權重分配方案是詞頻-逆文檔頻率TF-IDF)。該方法的思路
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省大同市渾源縣第七中學校2024-2025學年高一下學期第三次月考 數學試題(含解析)
- 小學語文試題及答案
- 藝術課程試題及答案
- 政策變革中的利益相關者試題及答案
- 西方民主制度的短期與長期影響試題及答案
- 機電工程自動化設備識別試題及答案
- 西方政治制度與地方治理的案例研究試題及答案
- 時事熱點對軟件設計師的影響試題及答案
- 社區參與在政策制定中的作用試題及答案
- 機電工程綜合能力提升策略及試題與答案
- 25學年四年級數學下期末復習每日一練
- 2024年江蘇省無錫市中考歷史真題(原卷版)
- 金礦合作協議書
- 人教版三年級數學下冊100道口算題大全(全冊)
- 2025年中國電瓷器材市場調查研究報告
- AQ∕T 7009-2013 機械制造企業安全生產標準化規范
- 閥門重量及法蘭規格重量參考明細表
- 低壓電氣基礎知識培訓課件
- 人民調解業務知識培訓講座課件
- 武漢市第五醫院醫聯體探索和思考張斌課件
- LNG加注站考核標準表
評論
0/150
提交評論