楊麗萍,郭宏升
(1.包頭師范學院信息科學與技術學院,內蒙古包頭,014030;2.包頭師范學院政治與法律學院,內蒙古包頭,014030)
近年來,隨著教育系統對大數據應用的不斷探討,大數據對高校教師教學與管理的支持日益加強,同時,在高校教育管理中,人們深刻認識到大數據在管理與決策中的重要作用,不再依賴于傳統意義上的經驗管理和直覺推斷。大數據可以深度挖掘教育教學數據中的隱藏信息,發現教育過程中存在的問題和關鍵點,提供決策來優化教育管理。
利用大數據分析技術可以系統全面地整合學生的行為數據,對課堂教學實現全面的評價與分析。教師通過對學生行為相關的海量數據進行分析,可以發現學生的學習行為之間的關聯關系,以及學習行為與學習結果之間的關聯關系,從而對學生的學習成績、課堂表現、知識掌握情況進行預測與評估,制定更為合理的教學方案,對有個性化需要的學生提供幫助。
決策樹是一類常見的機器學習方法,是對訓練集中數據表現出的屬性進行總結分類,為表現出來的屬性找到一個確切的描述與分類的模型,由該模型可以對未來不可預測的數據進行分類[1]。決策樹分類算法是以給定數據樣本為基礎的歸納學習方法。在給定已知類標號的數據集的情況下,采用自頂向下的遞歸方式產生一棵樹結構[2]。樹的最頂層結點稱為根結點,最底層結點稱為葉結點,每個葉結點代表樣本的類別。根結點和葉結點之間的結點稱為內部結點。決策樹分類算法首先選擇具有最高信息增益的描述屬性作為給定數據集的分支屬性,從而創建決策樹中的一個結點,并且根據該描述屬性的不同取值再創建分支,之后對各分支中的樣本子集遞歸調用上述方法建立該結點的各個子結點[3]。當某個分支上的所有數據樣本都屬于同一個類別時劃分停止,形成葉結點;或者當某個分支上的樣本不屬于同一個類別,但是又沒有剩余的描述屬性可以進一步劃分數據集時也形成葉結點,并且用多數樣本所屬的類別來標記這個葉結點。對未知類標號的數據樣本進行分類時,從根結點開始逐層向下判斷,直到葉結點,就可以得到該數據樣本的類標號。
假設給定的數據集為X={(xi,yi)|i=1,2,…,total},其中樣本xi(i=1,2,…,total)用d維特征向量xi=(xi1,xi2,…,xid)來表示,xi1,xi2,…,xid分別對應d個描述屬性A1,A2,…,Ad的具體取值;yi(i=1,2,…,total)表示樣本xi的類標號,假設要研究的分類問題含有m個類別,則yi∈{c1,c2,…,cm}。在創建根結點時,數據集X是最初給定的所有數據,在創建內部結點時,數據集X是上層結點的某個分枝對應的數據集。
假設nj是數據集X中屬于類別cj的樣本數量,則各類別的先驗概率為P(cj)=nj/total,j=1,2,…,m。對給定數據集X分類所需的期望信息為:

設描述屬性Af(f=1,2,…,d)具有q個不同的取值{a1f,a2f,…,aqf},利用描述屬性Af可以將數據集X劃分為q個子集{X1,X2,…,Xq},其中Xs(s=1,2,…,q)中的樣本在Af上具有相同的取值asf。設ns表示子集Xs中的樣本數量,njs表示子集Xs中屬于類別cj的樣本數量。則由描述屬性Af劃分數據集X所得的熵為:

其中,pjs=njs/ns表示在子集Xs中類別為cj的數據樣本所占的比例。則利用描述屬性Af(f=1,2,…,d)劃分數據集時的信息增益為:

選擇具有最高信息增益的描述屬性作為給定數據集X的分枝屬性,從而創建決策樹中的一個結點,并且根據該描述屬性的不同取值再創建分枝,之后對各分枝中的樣本子集遞歸調用上述方法建立該結點的各個子結點。當某個分枝上的所有數據樣本都屬于同一個類別時劃分停止,形成葉結點;或者當某個分枝上的樣本不屬于同一個類別,但是又沒有剩余的描述屬性可以進一步劃分數據集時也形成葉結點,并且用多數樣本所屬的類別來標記這個葉結點。
本文采用2020學年度20電子班“C語言程序設計”課程教學中學生的課程學習數據以及期末考試成績數據作為樣本數據,每一個樣本數據的描述屬性包括學號、姓名、出勤率、課堂互動、小組討論、課后作業、PTA平臺程序設計,其中學號和姓名不作為構造決策樹的屬性,分類類別為期末成績,包括3個類別,分別是良好(80~100分)、中等(60~79分)和不合格(0~59分)。表1給出了部分樣本數據的描述屬性和類別標記。

表1 部分樣本數據
對于出勤率,0表示滿,1表示不滿;對于課堂互動,0表示積極,1表示不積極;對于小組討論,0表示積極,1表示不積極;對于課后作業,0表示優,1表示良,2表示中;對于PTA平臺程序設計,0表示優,1表示良,2表示中;對于期末成績,80~100表示良好, 60~79表示中等,0~59表示不合格。例如,邏輯化后,學號1的數據可以表示為{0,0,0,0,0,”良好”}。
本文采用java語言實現該算法,主要包括以下幾個方法:
Object[][] createDataSet():建立樣本數據集
double calcShannonEnt(Object[][] dataSet):計算對訓練集分類所需的期望信息
int chooseBestFeatureToSplit(Object dataSet[][]):求信息增益最大的描述屬性
Object createTree(Object dataSet[][], String labels[]):構造決策樹[5]
String classify(HashMap
根據表1給定的樣本數據構造決策樹,運行結果如圖1所示。

圖1 構造決策樹運行結果
該運行結果對應的決策樹如圖2所示。

圖2 運行結果對應的決策樹
當給定的未知分類的數據為{1,1,1,2,2},采用上述決策樹進行分類,運行結果如圖3所示。

圖3 采用決策樹進行分類的結果
本文采用2020學年度“C語言程序設計”課程教學中學生的課程學習數據以及期末考試成績數據作為樣本數據,采用決策樹分類算法構造決策樹分類器,并利用該決策樹分類器對2021學年度“C語言程序設計”課程前期階段學生的學習數據進行分類,對分類結果為不合格的學生有針對性地進行重點關注和課程知識點專項輔導,同時根據分類結果,對課程的教學方案進行適當調整,最終2021學年度“C語言程序設計”課程取得了優異的教學效果,學生通過率達到98%,成績優秀率達到90%。