陳永保
(上海理工大學(xué) 能源與動(dòng)力工程學(xué)院,上海)
大數(shù)據(jù)科學(xué)伴隨著信息技術(shù)發(fā)展而來(lái),是信息化進(jìn)程的發(fā)展新階段,其發(fā)展推動(dòng)了數(shù)字經(jīng)濟(jì)的形成與繁榮[1]?,F(xiàn)今,在“萬(wàn)物物聯(lián)”的背景下,大數(shù)據(jù)的獲取變得更加容易,海量的大數(shù)據(jù)為各行各業(yè)所遇到的理論及技術(shù)難題分析與研究提供了新的角度。大數(shù)據(jù)技術(shù)促進(jìn)了包括人工智能、機(jī)器學(xué)習(xí)等領(lǐng)域的發(fā)展,從而服務(wù)于各行各業(yè)[2-3]。
例如,在醫(yī)學(xué)領(lǐng)域,2020年3月,海軍軍醫(yī)大學(xué)長(zhǎng)海醫(yī)院等學(xué)者在Nature上發(fā)文,他們通過(guò)大數(shù)據(jù)技術(shù)揭示了全球首份中國(guó)前列腺癌大數(shù)據(jù)圖譜[4]。基于這些數(shù)據(jù)圖譜,科學(xué)家就能夠了解到個(gè)體的哪些基因突變可能致癌,哪些人更容易患該病,從而具備了理論依據(jù)去尋找預(yù)防和精準(zhǔn)治療這些患者的方法。類似利用大數(shù)據(jù)技術(shù)在各類疾病防控及治療等方面均獲得了較好的效果,例如遺傳影像[5]、神經(jīng)系統(tǒng)疾病[6]、心血管疾病[7]等。在農(nóng)業(yè)領(lǐng)域,2021年8月,河北農(nóng)業(yè)大學(xué)等學(xué)者通過(guò)大數(shù)據(jù)技術(shù)破譯了陸地棉和海島棉的結(jié)構(gòu)變異圖譜,相關(guān)研究成果也發(fā)表于國(guó)際頂級(jí)期刊Nature Genetics上[8]。大數(shù)據(jù)技術(shù)的應(yīng)用幾乎涵蓋了現(xiàn)有的所有工程領(lǐng)域,可以從不同維度去理解、解釋一些傳統(tǒng)方法尚未解決的理論和工程難題。
實(shí)際工程應(yīng)用的急劇需求加速了大數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)在課程建設(shè)方面的發(fā)展[9-10],高校則承擔(dān)著為社會(huì)輸送大數(shù)據(jù)人才的重要職責(zé)。2016年2月,北京大學(xué)等首次成功申請(qǐng)?jiān)搶I(yè),日前我國(guó)已有超過(guò)250所高校獲批了大數(shù)據(jù)相關(guān)專業(yè)辦學(xué)資格[11]。數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)本科專業(yè)是一個(gè)新興專業(yè),在教學(xué)經(jīng)驗(yàn)上的積累較傳統(tǒng)學(xué)科少,而且該專業(yè)具有很強(qiáng)的實(shí)踐性,課堂的互動(dòng)性效果將直接影響課程教學(xué)的好壞。因此本文在課程交互式教學(xué)建設(shè)方面進(jìn)行相關(guān)問(wèn)題探討,旨在提供一些提高課程教學(xué)效率的方法。
Python編程語(yǔ)言因語(yǔ)法結(jié)構(gòu)簡(jiǎn)單,相較于傳統(tǒng)C、C++、Java、Matlab、R語(yǔ)言等編程語(yǔ)言,更符合人類語(yǔ)言習(xí)慣,易于入門(mén),非常適合各專業(yè)大學(xué)生學(xué)習(xí)使用。隨著各類數(shù)據(jù)處理包的開(kāi)發(fā)與應(yīng)用,其中包括Numpy、 Pandans、 Matplotlib等,Python已成為目前世界上最流行的數(shù)據(jù)編程語(yǔ)言[12]。然而,基本的Python界面相對(duì)簡(jiǎn)單,可視化和互動(dòng)性較差,因此一款集成開(kāi)發(fā)環(huán)境(Integrated development environment, IDE)的使用非常重要。目前常用的IDE包括Jupyter Notebook、Pycharm、Spyder等。
Jupyter Notebook是一款開(kāi)源交互式筆記本編輯Web程序,開(kāi)發(fā)環(huán)境繼承了IPython,可直接在網(wǎng)頁(yè)界面上運(yùn)行,且其安裝所需內(nèi)存小。此外,其支持多種編程語(yǔ)言,具有簡(jiǎn)單易學(xué)、邊學(xué)邊練、逐行逐代碼塊運(yùn)行、代碼即編即運(yùn)行、代碼與結(jié)果交互存儲(chǔ)等優(yōu)點(diǎn)。因此,可非常容易實(shí)現(xiàn)課堂教學(xué)下列幾方面的效果[13]。a)代碼與運(yùn)行結(jié)果交替展示,教與學(xué)交互式即時(shí)呈現(xiàn);b)數(shù)據(jù)模塊包多且安裝方便,幾乎所有數(shù)據(jù)處理現(xiàn)實(shí)需求均有對(duì)應(yīng)的開(kāi)源Python安裝包(模塊),同時(shí)各類機(jī)器學(xué)習(xí)、深度學(xué)習(xí)開(kāi)發(fā)包也非常多,其安裝也非常方便;c) 支持Markdown和Code模式,非常方便類似于傳統(tǒng)筆記本的記錄模式;d) 支持分布式運(yùn)行,可以利用本地資源或遠(yuǎn)程計(jì)算資源,進(jìn)而解決公共計(jì)算機(jī)所需運(yùn)行環(huán)境配置不正確的常見(jiàn)問(wèn)題,可實(shí)現(xiàn)一處安裝,多處輕松授課效果;e) 交互式展現(xiàn),利用各類專業(yè)繪圖包,可以輕松實(shí)現(xiàn)圖片、視頻、數(shù)學(xué)公式展示,便于全過(guò)程沉浸式教學(xué),運(yùn)行生成的文件即可代替?zhèn)鹘y(tǒng)的PPT課件,避免教師二次制作課件的重復(fù)工作。
Pycharm和Spyder兩個(gè)Python IDE幾乎可實(shí)現(xiàn)相同的功能,通常,在管理大工程項(xiàng)目時(shí)建議采用Pycharm,而僅做基本數(shù)據(jù)分析,建議采用Spyder,而一些特殊項(xiàng)目則需要結(jié)合上述兩種IDE。在教學(xué)或?yàn)榱己每梢暬故緯r(shí),則建議采用Jupyter Notebook。
為展示教學(xué)交互式過(guò)程,本文以實(shí)際房?jī)r(jià)預(yù)測(cè)為實(shí)例,該實(shí)例為Kaggle網(wǎng)站的一個(gè)競(jìng)賽賽題,相關(guān)原始數(shù)據(jù)可從網(wǎng)站[14]下載。實(shí)例是通過(guò)已有的歷史數(shù)據(jù)信息(影響房?jī)r(jià)因素),預(yù)測(cè)未來(lái)房?jī)r(jià)。數(shù)據(jù)集包含1460*2個(gè)樣本,均分為訓(xùn)練集和驗(yàn)證集,數(shù)據(jù)集中包含79維度影響房?jī)r(jià)的影響因素,包括歷史房?jī)r(jià)、建筑面積、建筑裝修情況、建筑建成時(shí)間等。以下就數(shù)據(jù)預(yù)處理以及數(shù)據(jù)建模的教學(xué)展示分步驟介紹,完整Python代碼可參見(jiàn)[15]。
Juypter Notebook安裝及環(huán)境配置較簡(jiǎn)單,詳細(xì)步驟可參見(jiàn)[16]。命令行運(yùn)行Jupyter Notebook系統(tǒng)默認(rèn)瀏覽器將打開(kāi)主頁(yè),如下圖1所示,通過(guò)新建Notebook文檔,便可進(jìn)行單元式的代碼開(kāi)發(fā)與運(yùn)行。因數(shù)據(jù)處理需要預(yù)先安裝所需的數(shù)據(jù)模塊,包括張量數(shù)據(jù)處理模塊Numpy和Pandas,機(jī)器學(xué)習(xí)算法模塊sklearn,圖像繪制及展示模塊Matplotlib和seaborn等,如圖2所示。所有模塊在導(dǎo)入(import)前需安裝正確版本,通??稍诿钚兄苯舆\(yùn)行命令pip install 模塊名==版本號(hào)(例如,pip install numpy==1.14.4)。當(dāng)運(yùn)行Notebook代碼塊未報(bào)錯(cuò)即說(shuō)明各模塊已安裝成功。
圖2 數(shù)據(jù)處理所需導(dǎo)入的計(jì)算模塊
在進(jìn)行數(shù)據(jù)建模之前,需要確保數(shù)據(jù)無(wú)異常和格式滿足建模要求。數(shù)據(jù)的預(yù)處理包括缺失值及異常值處理、標(biāo)準(zhǔn)化、相關(guān)性分析等。缺失值及異常值的處理可根據(jù)不同工程領(lǐng)域及特定任務(wù)設(shè)定處理規(guī)則,例如對(duì)于本案例的數(shù)據(jù)提出如下規(guī)則:a)當(dāng)缺失數(shù)據(jù)超過(guò)總樣本量一定比例時(shí)(例如,15%),對(duì)所缺失的影響變量進(jìn)行全部剔除;b)當(dāng)缺失數(shù)據(jù)小于總樣本量一定比例時(shí)(例如,5%),可對(duì)缺失值進(jìn)行上下樣本插值或類似樣本直接補(bǔ)值;c)當(dāng)出現(xiàn)異常值時(shí),直接刪除對(duì)應(yīng)樣本,如下圖3所示標(biāo)記的異常點(diǎn),直接刪除該樣本點(diǎn)。此外,機(jī)器學(xué)習(xí)算法通常要求輸入的各特征維度(即各影響參數(shù))的取值符合正態(tài)分布,本案例數(shù)據(jù)標(biāo)準(zhǔn)化采用Log變換函數(shù)。
圖3 建筑面積和房?jī)r(jià)關(guān)系圖
由于影響房?jī)r(jià)的因素較多,本案例中提供了79個(gè)維度因素,而通常輸入影響因素(或變量)對(duì)房?jī)r(jià)影響權(quán)重不一,且各因素之間存在相關(guān)性。通過(guò)數(shù)據(jù)處理方法可實(shí)現(xiàn)影響因素權(quán)重排序,以及得到相關(guān)性矩陣。影響因素的相關(guān)性分析可采用corr()函數(shù)和Numpy模塊中的corrcoef()函數(shù),并利用seaborn模塊中的heatmap函數(shù)顯示最為重要的幾項(xiàng)影響因素之間的關(guān)系熱圖(heatmap),如下圖4所示。對(duì)房?jī)r(jià)幾項(xiàng)重要影響因素說(shuō)明如下:建筑建造時(shí)間-YearBuilt,房間數(shù)- TotRmsAbvGrd,總衛(wèi)生間數(shù)-FullBath,一樓建筑總面積-1stFlrSF,地下室總面積- TotalBsmtSF,車(chē)庫(kù)面積-GarageArea,建筑總面積(不含地下室、車(chē)庫(kù))- GrLivArea,建筑裝修情況-OverallQual,銷售總價(jià)-SalePrice。
圖4 重要影響特征因素相關(guān)性熱圖
最后,把所選擇的數(shù)據(jù)進(jìn)行格式及類型轉(zhuǎn)換,把分類變量轉(zhuǎn)化為模型算法能夠識(shí)別的數(shù)據(jù)類型,本案例采用Pandas模塊中的get_dummies()函數(shù)實(shí)現(xiàn)。
完成數(shù)據(jù)預(yù)處理后,下一步將建立數(shù)據(jù)預(yù)測(cè)模型。本案例采用淺層機(jī)器學(xué)習(xí)算法lightgbm進(jìn)行預(yù)測(cè)模型建模,有關(guān)lightgbm理論介紹詳見(jiàn)文獻(xiàn)[17]。lightgbm主體模型代碼及模型保存見(jiàn)圖5,圖6為預(yù)測(cè)精度結(jié)果計(jì)算及打印,完整代碼參見(jiàn)[15]。
圖5 lightgbm模型
圖6 預(yù)測(cè)結(jié)果精度計(jì)算及打印
在模型訓(xùn)練過(guò)程中,需要對(duì)lightgbm模型超參數(shù)進(jìn)行優(yōu)化選擇,從而確保模型具有良好的泛化性能,即在欠擬合和過(guò)擬合之間達(dá)到平衡。模型的優(yōu)化超參數(shù)很多,主要包括葉子節(jié)點(diǎn)數(shù)、網(wǎng)絡(luò)最大深度、學(xué)習(xí)率等。學(xué)習(xí)曲線的繪制是一種非常直觀的方法,可通過(guò)學(xué)習(xí)曲線的變化趨勢(shì)進(jìn)行超參數(shù)選取。在模型確定后,保存模型及預(yù)測(cè)結(jié)果,提交預(yù)測(cè)結(jié)果數(shù)據(jù)后Kaggle競(jìng)賽網(wǎng)站將自動(dòng)計(jì)算預(yù)測(cè)得分及排名。若排名結(jié)果未達(dá)預(yù)期,可通過(guò)調(diào)整lightgbm模型超參數(shù),或選用其他算法模型,重復(fù)提交預(yù)測(cè)結(jié)果,直到達(dá)到預(yù)期目標(biāo)為止。通過(guò)實(shí)際數(shù)據(jù)競(jìng)賽項(xiàng)目,結(jié)合Jupyter Notebook的交互教學(xué),能夠加深學(xué)生的印象以及調(diào)動(dòng)學(xué)生的積極性,達(dá)到良好的教學(xué)效果。
通過(guò)Jupyter Notebook房?jī)r(jià)預(yù)測(cè)實(shí)際案例的實(shí)操練習(xí),可使學(xué)生快速掌握數(shù)據(jù)挖掘技術(shù)及機(jī)器學(xué)習(xí)算法建模的基本知識(shí)和大數(shù)據(jù)處理技能,同時(shí)可為學(xué)生進(jìn)一步學(xué)習(xí)基于大數(shù)據(jù)的深度學(xué)習(xí)等高階課程打下堅(jiān)實(shí)的基礎(chǔ)。Jupyter Notebook平臺(tái)將文字備注、Python代碼、圖表、公式和運(yùn)行結(jié)果整合在一個(gè)文檔中,不僅可以在文檔中運(yùn)行代碼,還能以網(wǎng)頁(yè)版的形式分享文件,相較于傳統(tǒng)的數(shù)據(jù)處理平臺(tái)和教學(xué)模式,基于Jupyter Notebook開(kāi)展數(shù)據(jù)科學(xué)教學(xué)具備多重優(yōu)勢(shì)。首先,可代替?zhèn)鹘y(tǒng)的教學(xué)課件,.ipynb的文件格式可直接在網(wǎng)頁(yè)上交互式展示,直接代替?zhèn)鹘y(tǒng)課件,省去教師重復(fù)制作課件的工作。其次,良好的交互式展示,數(shù)據(jù)處理所需代碼的講解和代碼的執(zhí)行可同時(shí)進(jìn)行,可非常方便地實(shí)現(xiàn)交互式教學(xué)。最后,學(xué)生的作業(yè)、作品的提交和批改變得更加簡(jiǎn)單,學(xué)生可將編好的代碼運(yùn)行后,在Notebook上保存結(jié)果,即可直接提交執(zhí)行后的.ipynb文件,教師可查看作業(yè)完成情況。
Jupyter Notebook提供了一個(gè)良好的教學(xué)展示及交互式平臺(tái),但數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)專業(yè)課程的發(fā)展同時(shí)需要針對(duì)不同工程應(yīng)用領(lǐng)域課程教學(xué)內(nèi)容的長(zhǎng)期研究與探索,從而開(kāi)發(fā)出針對(duì)性強(qiáng),效果好的授課案例。目前隨著大數(shù)據(jù)人才涌現(xiàn)、數(shù)據(jù)處理技巧和數(shù)據(jù)處理模塊的發(fā)展、機(jī)器學(xué)習(xí)算法的更新迭代,留下海量的研究、學(xué)習(xí)資料,大數(shù)據(jù)教學(xué)課程也變得更加高效和多樣化。國(guó)立臺(tái)灣大學(xué)名師李宏毅針對(duì)機(jī)器學(xué)習(xí)的教學(xué)課程,就是一個(gè)值得借鑒的教學(xué)案例,目前已公開(kāi)在YouTube和嗶哩嗶哩等視頻網(wǎng)站。
本文介紹了一種交互式網(wǎng)頁(yè)教學(xué)平臺(tái),并利用案例進(jìn)行了教學(xué)方法展示,旨在對(duì)相關(guān)教師的教學(xué)思路和方法有所啟發(fā),同時(shí)宣傳和推廣基于Jupyter Notebook平臺(tái)的交互式教學(xué)理念,從而促進(jìn)大數(shù)據(jù)科學(xué)相關(guān)專業(yè)的教學(xué)方法的創(chuàng)新。