王茂發(fā) 王子民 汪華登 劉振丙
(桂林電子科技大學計算機與信息安全學院,廣西 桂林 541004)
Jupyter Notebook是一個開源的Web應用程序,可用于創(chuàng)建和共享包含實代碼、公式、可視化和敘述文本的文檔。其用途包括:數據清洗和轉換、數值模擬、統(tǒng)計建模、數據可視化、機器學習、深度學習、元學習等。當前,在Jupyter平臺下最為流行的應用方式之一,即為采用Python語言結合各種機器學習工具包進行數據挖掘開發(fā)和教學。
選擇Jupyter為數據挖掘課程的教學和實踐平臺有以下5個優(yōu)點:(1)代碼與結果展示一體融合,教與學的結果即時呈現;(2)支持當下最為流行的Python語言及其各種數值分析、數據處理和機器學習、深度學習開發(fā)包[1,2],如:Numpy、Pandas、Scikit-learn、Tensorflow、Pytorch、Keras等;(3)支持以網頁的形式分享,并對多種格式無縫兼容,如:HTML、Markdown、PDF、Python源碼等;(4)分布式運行,在數據挖掘教學過程中,可以利用本地資源、遠程資源、共享資源同時進行代碼運行和展示,進而屏蔽課堂對于各種復雜運行環(huán)境配置和安裝的要求,進而實現一處安裝到處輕松講課和完美展示的效果;(5)交互式展現,不僅可以輸出圖片、視頻、數學公式,還可以通過交互式插件呈現可互動的可視化內容,比如可縮放的地圖和可旋轉的三維模型,進而實現理論與實踐同步,便于全過程開展沉浸式數據挖掘教學,甚至完全代替?zhèn)鹘y(tǒng)的PPT教學。
數據挖掘是計算機等專業(yè)必選課之一[3,4]。數據挖掘又稱知識發(fā)現,是一個從海量數據中根據某種法則抽取的,有價值或知識的數據的過程。它包括數據清洗、數據集成、數據轉換、數據挖掘、模式評估和知識表示等部分。數據挖掘涉及數據庫技術、機器學習、人工神經網絡、統(tǒng)計學、模式識別、運籌與優(yōu)化、面向對象編程等多個學科中的知識。它的挖掘對象可以是圖像、文本、影音、數據庫、數據倉庫、Web數據庫等。就功能而言,數據挖掘主要是對所挖掘對象中的數據進行概念描述、關聯規(guī)則的獲取、分類與預測、聚類分析、孤立點的發(fā)現、模式評估等。
通過本課程的學習可使學生獲得數據挖掘的基本理論、基本知識和基本技能、樹立理論聯系實際的工程觀點,培養(yǎng)學生用人工智能的方法和觀點分析和解決數據領域問題的能力,同時為學生后續(xù)學習深度學習、機器學習等專業(yè)課程提供必要的基礎知識、理論背景和平臺經驗[5,6]。
基于Jupyter開展數據挖掘教學實踐,有異于傳統(tǒng)的教學方法,如:(1)可以少用或不用PPT展示;(2)算法講解和代碼演示可以同時進行,理論教學和實踐教學須合二為一;(3)近年來,基于Jupyter平臺的開發(fā)各種數據挖掘、機器學習算法和模型工具包層出不窮、日新月異,如XGBoost、LightGBM等模型在Kaggle等數據競賽平臺上被廣泛應用,最新的數據挖掘教學內容必須予以動態(tài)體現這些最新的變化[7,8]。
在Jupyter環(huán)境,教學大綱和教學安排須進一步體現以下兩點要求:(1)理論和實踐無縫鏈接,緊密結合,同步進行,有條件布置好遠程服務器教與學可同時在終端上進行,教的內容即時呈現,學的東西即時實踐;(2)為了體現平臺優(yōu)勢,需要在基礎教學內容中安排若干課時,講授Python基礎、數值處理工具Numpy、數據處理工具Pandas和Scikit-learn下的基本數據挖掘工具包。進而將基于Jupyter環(huán)境下的數據挖掘教學大綱分為基礎和提升兩部分,其中基礎教學內容主要培養(yǎng)學生基本的數據收集、數據分析、數據處理、數據清洗、數據可視化能力,主要的講授內容有:數據挖掘概論、Python基礎、Numpy與Pandas、爬蟲技術基礎、數據清洗、數據可視化。提升教學內容主要培養(yǎng)學生針對具體任務的數據挖掘能力,主要講授內容有:分類、聚類、回歸、關聯規(guī)則、深度學習、元學習初步。一般來說,針對本科生開設的數據挖掘課程總學時控制在32~40學時之間為宜[9,10],表1給出了建議的教學大綱。
表1 教學大綱
下面以數據挖掘中常用的K近鄰(KNN)模型為例,詳細闡述如何利用Jupyter為載體開展數據挖掘課堂教學。
(1)基礎概念
KNN模型是一種有監(jiān)督的學習算法,中文名稱為K最近鄰算法。它屬于“惰性”學習算法,即不會預先生成一個分類或預測模型,用于新樣本的預測,而是將模型的構建與未知數據的預測同時進行。該算法既可以針對離散因變量做分類,又可以對連續(xù)因變量做預測,其核心思想就是比較已知y值的樣本與未知y值樣本的相似度,然后尋找最相似的k個樣本,用作未知樣本的y值預測。
首先,介紹一下KNN的算法原理和流程步驟。如圖1所示,模型的本質就是尋找k個最近樣本,然后基于最近樣本做“預測”。對于離散型的因變量來說,從k個最近的已知類別樣本中挑選出頻率最高的類別用于未知樣本的判斷;對于連續(xù)型的因變量來說,則是將k個最近的已知樣本均值用作未知樣本的預測。以分類問題為例,具體算法步驟如下:
圖1 KNN算法示意圖
1)確定未知樣本近鄰的個數k值;
2)根據某種度量樣本間相似度的指標(如歐氏距離)將每一個未知類別樣本的最近k個已知樣本搜尋出來,形成一個個簇;
3)對搜尋出來的已知樣本進行投票,將各簇下類別最多的分類用作未知樣本點的預測。
接下來,可以向學生具體講授K值的選擇方法,及具體度量算法(如歐式距離、曼哈頓距離、余弦相似度、卡德相似系數等),這里不再做具體展開,我們重點介紹下如何使用Jupyter進行算法的演示教學。
(2)基于Jupyter教學
這里通過針對UCI提供的學生學習過程記錄數據,搭建KNN模型,預測學生的知識掌握程度(Very Low、Low、Middle和High)來演示基于Jupyter的教學過程。首先,使用markdown語言列出可能用到的基礎模塊包,并對每個模塊包進行詳細介紹,如圖2所示,為后續(xù)模型代碼的開發(fā)打下堅實的基礎。
圖2 可能用到的基礎包說明和加載
接著,導入數據,并預覽一下該數據集的前幾行,使得學生對數據集有一個更為清晰和直觀的認識,代碼及運行結果如圖3所示,通過這種方式可以讓學生清晰地看到數據的基本結構。數據集一共包含403個觀測對象和6個變量,首先前5列分別為學員在目標學科上的學習時長(STG)、重復次數(SCG)、學習時長(STR)、兩個相關科目的考試成績(LPR和PEG);最后1列是學員對知識掌握程度(UNS),一共含有四種不同的值,分別為Very Low、Low、Middle和High。
圖3 數據導入和展示
繼續(xù)將導入的樣本按照3:1拆分成訓練集和測試集,如圖4所示。這里要注意講解函數model_selection.train_test_split的幾個參數的意義:第1個參數是自變量,第2個參數是因變量,test_size表示測試樣本所占的百分比,最后一個參數random_state表示隨機數發(fā)生器的種子。
圖4 數據拆分
接著進行K值選擇,具體代碼如圖5所示。采用10重交叉驗證,測試不同的K值對應的KNN模型的平均準確率。這里要給學生講清楚K取值上限的計算方法:用樣本總量求以2為底的對數。最終通過圖示法給出最佳的K值,這里取5,如圖6所示。
圖5 交叉驗證法確定KNN模型最終的K值
圖6 不同K值對應的KNN模型的效果分析
再接下來,構造混淆矩陣,并可視化,如圖7所示?;煜仃嚨膶蔷€數值是各個分類預測準確的樣本量。利用混淆矩陣的可視化結果,讓學生理解每個分類的召回率、準確率的概念和相互區(qū)別。
圖7 構造最佳KNN模型的預測結果的混淆矩陣
最后通過Jupyter給出最終模型的準確率和模型效能的評估,并講述每個指標的具體含義,如圖8所示。
圖8 模型結果分析
通過以上基于Jupyter的代碼和結果講述過程,可以讓學生對KNN模型的建模、實驗、結果分析有一個非常直觀的認識,從而建立起EDA分析、數據建模到結論分析一整套標準建模思想。
基于Jupyter,既可以開展理論與實踐過程的教學,也可以開展課后作業(yè)及期末考核工作。
在課后作業(yè)的布置環(huán)節(jié),可將作業(yè)以數據+任務的形式進行線下部署,要求學生以Juypter形式進行EDA分析、模型建模和結果展示及分析,最終以Juypter網頁形式進行統(tǒng)一發(fā)布或截屏上傳,這種方式非常有利于學生數據建模連續(xù)思維的培養(yǎng),也有利于教師進行線上作業(yè)檢查,全面評估學生的實操能力。
在期末考核環(huán)節(jié),可以將典型的數據分析和建模案例以Jupyter形式發(fā)布,具體可以填空、判斷、結論預測與分析等方式出題,全面考察學生數據挖掘過程中對各個具體知識節(jié)點的掌握程度。
數據挖掘是計算機大類學科,尤其是人工智能方向必修課之一,也是學生走入機器學習的入門課,課程的內涵和實用價值都非常大。如何在實戰(zhàn)環(huán)境下方便自如地開展理論與實踐教學一直是一個痛點問題。本文首先介紹了Jupyter平臺,然后針對數據挖掘課程教與學過程中普遍存在的問題,進行了系統(tǒng)分析和方案研究。主要從教學大綱、課堂組織、考核手段等環(huán)節(jié)進行闡述,啟發(fā)教師的備課思路和方法,目的提升學生的數據挖掘課程的學習興趣,拓展數據挖掘課程教學研究的廣度和深度。