楊 光 陳亞睿
(防災(zāi)科技學(xué)院,河北 廊坊 065201)
在大數(shù)據(jù)和人工智能背景下,數(shù)據(jù)正以驚人的速度產(chǎn)出并滲透到各行各業(yè)中,成為重要的生產(chǎn)要素[1]。機(jī)器學(xué)習(xí)技術(shù)作為數(shù)據(jù)分析的主要技術(shù)手段之一,作為人才市場(chǎng)的主要需求之一,成為當(dāng)前學(xué)習(xí)和研究的熱點(diǎn),是計(jì)算機(jī)和信息處理相關(guān)專業(yè)本科和研究生人才培養(yǎng)的重要方面[2]。
機(jī)器學(xué)習(xí)課程的學(xué)習(xí)需要有統(tǒng)計(jì)、線性代數(shù)等數(shù)學(xué)基礎(chǔ),理論知識(shí)相對(duì)比較抽象,不易理解,并且知識(shí)點(diǎn)相對(duì)比較零散。學(xué)生在學(xué)習(xí)過程中容易陷入一個(gè)方法中,很難準(zhǔn)確掌握整體知識(shí)脈絡(luò),導(dǎo)致學(xué)習(xí)到的知識(shí)難以應(yīng)用于實(shí)際問題的解決,嚴(yán)重影響了學(xué)生的應(yīng)用創(chuàng)新能力[3-4]。針對(duì)上述問題,本文擬在OBE-CDIO教育理念指導(dǎo)下,結(jié)合我校防災(zāi)特色,從實(shí)際地震災(zāi)害數(shù)據(jù)出發(fā),設(shè)計(jì)機(jī)器學(xué)習(xí)各階段處理的綜合案例,以提問式、啟發(fā)式等教學(xué)方法[5],在體系化講解理論知識(shí)的同時(shí),引導(dǎo)學(xué)生自主完成算法的編寫和調(diào)優(yōu),實(shí)現(xiàn)理論知識(shí)和算法實(shí)驗(yàn)的相互驗(yàn)證,不斷提升學(xué)生對(duì)理論知識(shí)的理解和實(shí)踐動(dòng)手能力。
本文采用Kaggle競(jìng)賽中的Significant Earthquakes:1965-2016數(shù)據(jù)集設(shè)計(jì)教學(xué)案例[6],將機(jī)器學(xué)習(xí)的數(shù)據(jù)預(yù)處理、模型選擇、策略定義、算法設(shè)計(jì)、算法實(shí)現(xiàn)和算法測(cè)試調(diào)優(yōu)等內(nèi)容融合成為一個(gè)知識(shí)體系,進(jìn)行講解與實(shí)驗(yàn)。該數(shù)據(jù)集包含23412條從1965至2016年發(fā)生的、大于5.5級(jí)的地震信息樣本數(shù)據(jù),包括地震發(fā)生的時(shí)間、經(jīng)緯度位置、震級(jí)和深度等21個(gè)維度特征,其中有16個(gè)特征的數(shù)據(jù)類型是字符串,并且某些特征存在特征值大量為空的情況,該數(shù)據(jù)集的典型字段示例如表1所示。
表1 數(shù)據(jù)集典型字段示例
教學(xué)過程中,以啟發(fā)式教學(xué)為主,首先通過字符串?dāng)?shù)據(jù)、時(shí)間數(shù)據(jù)如何參與運(yùn)算,引出數(shù)據(jù)預(yù)處理的相關(guān)理論知識(shí),并在深入介紹特征編碼、標(biāo)準(zhǔn)化等方法原理的基礎(chǔ)上,講解算法實(shí)現(xiàn)步驟,并在該數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)測(cè)試與參數(shù)調(diào)整。然后,通過地震震源深度預(yù)測(cè)和地震震級(jí)分類,引出機(jī)器學(xué)習(xí)中回歸和分類的概念,典型機(jī)器學(xué)習(xí)方法如線性模型、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)和貝葉斯等的基本原理,以及算法的設(shè)計(jì)與實(shí)現(xiàn)。通過如何選擇最優(yōu)的機(jī)器學(xué)習(xí)方法實(shí)現(xiàn)上面的預(yù)測(cè)和分類問題,引出性能度量典型方法,并通過不斷對(duì)實(shí)現(xiàn)的典型方法進(jìn)行比較分析,講解典型的性能度量方法和算法調(diào)優(yōu)的一般步驟。最后,通過性能度量方法進(jìn)一步驗(yàn)證各類方法的優(yōu)缺點(diǎn)和適用的場(chǎng)景。
以支持向量機(jī)(SVM)方法為例,在教學(xué)過程中,通過提問“什么樣的模型是最優(yōu)線性模型,如何在一個(gè)學(xué)習(xí)訓(xùn)練過程內(nèi)找到最優(yōu)的線性模型?”,引出SVM的基本原理。針對(duì)該原理詳細(xì)介紹SVM中間隔、支持向量以及損失函數(shù)的定義,并講解最優(yōu)SVM模型的求解過程。將模型求解算法用Python語言實(shí)現(xiàn),并在“地震震源深度預(yù)測(cè)問題”上進(jìn)行實(shí)驗(yàn)分析,發(fā)現(xiàn)當(dāng)采用最基本的SVM方法解決該預(yù)測(cè)問題時(shí),效果很差、準(zhǔn)確度很低。通過提問“該方法的準(zhǔn)確很低,是不是說明這個(gè)問題的假設(shè)空間不應(yīng)該是線性空間,或者是不是當(dāng)前的線性空間維度太低?”,引出SVM方法中的核函數(shù)方法,詳細(xì)介紹其基本原理和典型的核函數(shù),并通過適當(dāng)?shù)睦碚摼毩?xí)題鍛煉大家對(duì)核函數(shù)的理解。再通過算法實(shí)現(xiàn)和實(shí)驗(yàn)結(jié)果分析,迭代式地?cái)U(kuò)展理論知識(shí)和算法實(shí)現(xiàn)以及模型優(yōu)化。從而,在理論與實(shí)驗(yàn)分析交替過程中,使學(xué)生更加準(zhǔn)確地掌握方法的原理與意義,并能夠在解決實(shí)際問題中把握基本的模型選擇和模型調(diào)整方向與方法。
本文中的案例是在Windows10操作系統(tǒng),Python3.6環(huán)境下進(jìn)行的設(shè)計(jì)與實(shí)現(xiàn)。本文的綜合案例主要包括數(shù)據(jù)預(yù)處理、回歸方法、分類方法和方法度量四個(gè)主要內(nèi)容。
在課程開始階段,為了實(shí)現(xiàn)各字段數(shù)據(jù)能夠參與計(jì)算,首先需要對(duì)于空值字段要進(jìn)行缺失值處理,對(duì)于時(shí)間數(shù)據(jù)需要轉(zhuǎn)化為以某一個(gè)時(shí)間點(diǎn)為基準(zhǔn)的毫秒數(shù)據(jù),對(duì)于地震震級(jí)類別等字符串?dāng)?shù)據(jù)進(jìn)行特征編碼等。因此,為了保證各個(gè)特征數(shù)據(jù)能夠參與運(yùn)算,引出了數(shù)據(jù)預(yù)處理的概念,依據(jù)該數(shù)據(jù)集講解數(shù)據(jù)預(yù)處理典型方法的基本原理與思路,并基于scikit-learn等第三方庫實(shí)現(xiàn)。該部分內(nèi)容盡管不是機(jī)器學(xué)習(xí)的重點(diǎn)內(nèi)容,但是對(duì)機(jī)器模型方法的準(zhǔn)確性有重要影響,因此在教學(xué)過程中也需要著重講解與實(shí)驗(yàn)。
在數(shù)據(jù)預(yù)處理后,選取有效的20000條數(shù)據(jù)構(gòu)建數(shù)據(jù)集,并按照8:2比例將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集。以如何預(yù)測(cè)地震震源深度這個(gè)回歸問題為引,讓同學(xué)們通過觀察這些數(shù)據(jù)后,人為地、簡(jiǎn)單預(yù)測(cè)震源深度的可能值。在此基礎(chǔ)上,歸納總結(jié)學(xué)習(xí)的步驟和過程,然后由淺入深地講解線性模型、神經(jīng)網(wǎng)絡(luò)和隨機(jī)森林等理論知識(shí),并在每一個(gè)方法講解之后進(jìn)行實(shí)驗(yàn),判斷預(yù)測(cè)的準(zhǔn)確性,從而進(jìn)一步引出預(yù)測(cè)問題的性能度量準(zhǔn)則。
在第三方庫的基礎(chǔ)上,以綜合案例中SVM模型代碼為例,使用時(shí)間戳、經(jīng)度、緯度和地震震級(jí)四個(gè)特征進(jìn)行震源深度預(yù)測(cè)。通過下面的代碼可以實(shí)現(xiàn)SVM模型的訓(xùn)練和預(yù)測(cè),以及基于R2方法的性能評(píng)估。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import svm
data=pd.read_csv("./database.csv")#讀入數(shù)據(jù)
#進(jìn)行數(shù)據(jù)預(yù)處理,訓(xùn)練集特征為x_train,
#訓(xùn)練集標(biāo)簽為y_train,測(cè)試集特征為x_test,
#測(cè)試集標(biāo)簽為y_test
regr=svm.SVR(kernel=‘rbf’,C=1.0)
regr.fit(x_train,y_train)
regr.predict(x_test,y_test)
regr.score(x_train,y_train)
regr.score(x_test,y_test)
其中,模型中的核函數(shù)選擇高斯核函數(shù),懲罰參數(shù)的值為1.0。在訓(xùn)練集和測(cè)試集上得到的R2評(píng)估結(jié)果分別為-0.1323和-0.2451,即使用該方法進(jìn)行預(yù)測(cè)的準(zhǔn)確度沒有直接用平均值直接代替預(yù)測(cè)結(jié)果來得好。
那么是什么原因?qū)е碌纳鲜鰡栴}呢,應(yīng)該如何調(diào)整模型呢?首先,引導(dǎo)學(xué)生利用所學(xué)的理論知識(shí),自主思考上述結(jié)果可能產(chǎn)生的原因,然后針對(duì)每個(gè)原因找出相應(yīng)的解決方法,并逐個(gè)進(jìn)行代碼調(diào)整。
通過訓(xùn)練集和測(cè)試集上的測(cè)試結(jié)果可以看出,當(dāng)前訓(xùn)練得到的模型明顯是欠擬合了。通過所學(xué)的理論知識(shí)指導(dǎo)可以從增大訓(xùn)練數(shù)據(jù)集、調(diào)整模型復(fù)雜度、調(diào)大懲罰參數(shù)、進(jìn)行交叉驗(yàn)證等多個(gè)角度進(jìn)行優(yōu)化。因此,在明確的問題原因和大致的解決思路基礎(chǔ)上,指導(dǎo)學(xué)生逐一實(shí)現(xiàn)模型的參數(shù)調(diào)整和模型優(yōu)化。例如,當(dāng)懲罰參數(shù)C設(shè)置為100后,其在訓(xùn)練集和測(cè)試集上的R2測(cè)試結(jié)果可以分別達(dá)到了0.8792和0.8203。通過該參數(shù)調(diào)整的結(jié)果,可以看出懲罰參數(shù)C對(duì)于SVM模型準(zhǔn)確度的影響比較大,并且有通過調(diào)大懲罰參數(shù)C值可以在一定程度上解決欠擬合問題這個(gè)規(guī)律,從而有效地驗(yàn)證了所學(xué)的理論知識(shí),能夠強(qiáng)化學(xué)生對(duì)于SVM方法相關(guān)知識(shí)的理解和記憶。
圖1(a)是使用時(shí)間戳、經(jīng)度、緯度和地震震級(jí)四個(gè)特征進(jìn)行震源深度預(yù)測(cè)的結(jié)果(使用R2度量),圖1(b)是使用經(jīng)度、緯度和地震震級(jí)三個(gè)特征實(shí)現(xiàn)震源深度預(yù)測(cè)的結(jié)果。從結(jié)果中可以看出,(1)對(duì)于該數(shù)據(jù)集數(shù)據(jù),線性模型等方法的準(zhǔn)確度明顯低于隨機(jī)森林的方法;(2)某些特征在一些問題中不一定適用,比如在該問題中時(shí)間戳明顯不適用于該問題的預(yù)測(cè),因此數(shù)據(jù)選擇非常重要,從而引出數(shù)據(jù)選擇的內(nèi)容。
圖1 典型機(jī)器學(xué)習(xí)方法的震源深度測(cè)試結(jié)果
在上述講解和實(shí)驗(yàn)回歸問題的基礎(chǔ)上,進(jìn)一步講解分類問題的解決思路和具體實(shí)現(xiàn)步驟。首先,定義分類任務(wù),并構(gòu)建分類數(shù)據(jù)集。按照地震震級(jí)將地震強(qiáng)度標(biāo)記為中震和大震兩個(gè)等級(jí)(其中地震強(qiáng)度小于等于7級(jí)的為中震,其他情況為大震),根據(jù)其他20維特征實(shí)現(xiàn)對(duì)地震震級(jí)的分類。然后,講解回歸過程中學(xué)習(xí)的方法(如線性模型等)在分類問題中如何構(gòu)建損失函數(shù)和性能評(píng)估,并重點(diǎn)講解貝葉斯、K最近鄰等方法的基本原理和實(shí)現(xiàn)過程。最后,對(duì)分類問題的性能度量方法進(jìn)行介紹,并通過不斷比較不同方法的優(yōu)劣,選擇當(dāng)前最好的模型,并在該模型的基礎(chǔ)上,通過調(diào)整典型的超參數(shù)如學(xué)習(xí)率等實(shí)現(xiàn)算法調(diào)優(yōu)。該階段的案例設(shè)計(jì)結(jié)果與回歸問題案例設(shè)計(jì)結(jié)果比較相似,主要不同點(diǎn)在于模型的評(píng)估方法,本文中不再贅述。
在課程最后,分析總結(jié)機(jī)器學(xué)習(xí)的基本步驟、常見問題及解決方法,并有針對(duì)性地對(duì)過擬合、欠擬合問題的解決思路和處理方法進(jìn)行強(qiáng)化,從而提高學(xué)生解決實(shí)際問題的能力。
本文方法應(yīng)用過程中,通過在實(shí)際案例中查找問題及其產(chǎn)生的原因,能夠在不斷鞏固基礎(chǔ)知識(shí)的基礎(chǔ)上,強(qiáng)化學(xué)生的動(dòng)手能力和解決實(shí)際問題的能力,并且增強(qiáng)對(duì)難點(diǎn)知識(shí)的消化理解。同時(shí),在教學(xué)過程中也充分發(fā)揮學(xué)生的主觀能動(dòng)性,除了上述設(shè)計(jì)的典型案例之外,鼓勵(lì)學(xué)生依據(jù)現(xiàn)有或者感興趣的內(nèi)容構(gòu)建數(shù)據(jù)集,進(jìn)行學(xué)習(xí)和測(cè)試。在課程教學(xué)期間,部分學(xué)生自行構(gòu)建了地震預(yù)測(cè)數(shù)據(jù)集,并開展了地震預(yù)測(cè)相關(guān)的實(shí)驗(yàn),將所學(xué)知識(shí)進(jìn)行了靈活應(yīng)用,得到了較好的模型訓(xùn)練結(jié)果,積累了比較豐富的訓(xùn)練和調(diào)優(yōu)經(jīng)驗(yàn)。
本文案例化教學(xué)方法綜合詮釋了機(jī)器學(xué)習(xí)的知識(shí)體系和學(xué)習(xí)過程。通過對(duì)地震數(shù)據(jù)集的分析研究,使得學(xué)生掌握了如何利用已有知識(shí),從大量的數(shù)據(jù)中獲取、學(xué)習(xí)到有價(jià)值的信息。該案例化教學(xué)方法能夠有效地將理論知識(shí)進(jìn)行梳理、整合,具有一定的深度和綜合性。通過對(duì)案例中各個(gè)階段算法的實(shí)現(xiàn)與調(diào)試優(yōu)化,學(xué)生可以有效增強(qiáng)對(duì)所學(xué)理論知識(shí)的理解,提升在實(shí)際問題中選擇合適的方法、解決實(shí)際問題的能力,為將來進(jìn)一步深造和進(jìn)入工作崗位奠定了良好的基礎(chǔ)。