陳 珂,湯 鑫,楊業(yè)壯
(蘇州市職業(yè)大學,江蘇 蘇州 215004)
隨著大數(shù)據(jù)、機器學習等技術(shù)的迅速發(fā)展,美國、英國、澳大利亞等國家已發(fā)布各自利用技術(shù)促進學習的相關計劃,《中國教育現(xiàn)代化2035》中也明確指出要努力推動信息技術(shù)與教育教學的深度融合,可見用信息技術(shù)改變教育已成為各國教育研究者關注的焦點。教育領域倡導以學習者為中心,為學習者提供精準化服務,隨著網(wǎng)絡在線課程的發(fā)展和教育應用軟件的升級,學習者畫像[1]的研究逐漸進入學界視野,與學習者畫像定義相關的更多是以“學習者畫像”“學生畫像”“數(shù)字畫像”“學習者肖像”等名詞呈現(xiàn),這使得學習者畫像在教育領域[2]的應用更加貼切于教育教學的實際情境。
本文對學習者畫像構(gòu)建[3]進行研究,將圍繞研究目標設計在線學習者畫像模型及其構(gòu)建流程,并在此基礎上將其應用于在線學習過程,用于展現(xiàn)在線學習者的多維度特征[4],幫助學習者直觀明了地了解自己的整體學習情況,有利于促進學習者的參與度和學習效果。本研究獲取學習者學習過程中的行為數(shù)據(jù),并利用該行為數(shù)據(jù)和在線評測結(jié)果數(shù)據(jù)為學習者畫像,從而客觀地揭示學習者狀態(tài),對使用在線教學系統(tǒng)的學習者提高教學質(zhì)量、提高學習水平起到重要作用。
本文首先對在線學習者的學習行為痕跡進行了清洗和預處理,數(shù)據(jù)清洗主要包括去重、去空和刪除異常值等步驟,數(shù)據(jù)預處理是對清洗后的數(shù)據(jù)做處理匯總,得出分析處理后的數(shù)據(jù)。本文編寫MapReduce程序?qū)W習痕跡數(shù)據(jù)做清洗和預先處理,然后將學習行為數(shù)據(jù)導出為csv文件,以便為后續(xù)的學習者畫像分析做準備,這些學習行為數(shù)據(jù)的結(jié)構(gòu)包括用戶ID、學習天數(shù)、學習總時長、學習的章節(jié)數(shù)和在線測試成績等字段。具體的實現(xiàn)方法如下。
Map()利用并行化思想來對數(shù)據(jù)進行有意義的篩選,去除csv文件中第1行的字段名和空值,提取登錄時間、學習時長、章節(jié)名稱等相關數(shù)據(jù)。Map輸出的
if (key.get()==0){
System.out.println(value.toString());
return;//拋棄第一行數(shù)據(jù),
}
String rowvalue = value.toString();
if (rowvalue.equals("") ∣∣ rowvalue =="") {
return;//數(shù)據(jù)中存在空字符串
}
String[] strs = rowvalue.split("");
//由登錄時間、學習時長、章節(jié)名稱組成的字符串
String text =strs[1]+","+strs[2]+","+strs[3];
key.set(strs[0]);//用戶id
value.set(text);
context.write(key,value);
Map過程輸出的
List
List
Set
List
for(Text t:values)
list.add(t.toString());
for(String str:list){
String[] strs = str.split(",");
logintime.add(strs[0]);
duration.add(strs[1]);
chaptername.add(strs[2]);
}
long dur_sum=0;
for(String d :duration){
dur_sum += Long.parseLong(d);//統(tǒng)計學習總時長
}
//用戶id、學習總時長、學習天數(shù)、學習的章節(jié)數(shù)、在線測試成績,組成一個字符串
String recordstr = key.toString()+""+dur_sum+""+ dur_sum /24+""+chaptername.size()+""+score;
text.set(recordstr);
context.write(text,NullWritable.get());
在main()主函數(shù)中新建一個Job對象,負責管理和運行MapReduce的一個計算任務,并設定任務的輸出和輸入路徑,將預處理后的數(shù)據(jù)保存為csv文件。
經(jīng)過MapReduce清洗和預處理后的在線學習者的學習行為數(shù)據(jù)將用于構(gòu)建機器學習模型。為了挖掘?qū)W習行為與學業(yè)表現(xiàn)的相關性,本文運用Scikit-Learn庫中K-means模型,對學生各行為指標和學習績效指標進行相關分析[5]。學習者的參與程度和努力程度將會對學習者的學習質(zhì)量產(chǎn)生影響,因此了解學生的學習投入情況是至關重要的,并對學習投入程度過低的學習者進行有針對性的干預。本文確定了學習者2個特征指標,如表1所示。
表1 學習者特征要素
K-means是一種典型的聚類算法,該算法是基于不同對象特征值間的相似度,來確定對象的歸屬問題。本文使用K-means模型對預處理后的數(shù)據(jù)文件takypen.csv中數(shù)據(jù)進行聚類,以便分析成績與學習投入之間關系。takypen.csv文件包含有4個特征,分別如下:day_mean(學習天數(shù));play_mean(學習時長);chapters_mean(學習章節(jié)數(shù));score(在線測試成績)。前3個字段對應學習投入指標,score字段對應學習績效指標,通過KMeans模型訓練得到預測列type,該列即為預測出的學習投入度。
sklearn.cluster.KMeans(n_clusters=8,init='k-means++',n_init=10,max_iter=300,tol=0.0001,
precompute_distances='auto',verbose=0,random_state=None,
copy_x=True,n_jobs=1,algorithm='auto')
kmeans=KMeans(n_clusters=3,n_init=10,tol=0.0002, random_state=0).fit(X)
#屬性Labels_是獲取每個點的分類
labels=kmeans.labels_
acc = float((labels==y).sum())/len(y)
print('KMeans 準確率為:%.2f' %(acc))
本文使用Scikit-Learn庫提供的高斯樸素貝葉斯模型構(gòu)建分類器,根據(jù)學習天數(shù)、學習時長、學習的章節(jié)數(shù)等行為特征來判斷學習者屬于哪一類,為學習者加一個分類標簽。takypen.csv文件中存放了學習行為特征數(shù)據(jù),使用GaussianNB類建立高斯樸素貝葉斯模型并進行學習者分類預測,實現(xiàn)方法如下。
(1)數(shù)據(jù)歸一化處理,并建立訓練數(shù)據(jù)集。
數(shù)據(jù)歸一化處理對于大部分機器學習算法而言都是一種常規(guī)要求,如果單個特征沒有或多或少地接近于標準正態(tài)分布,那么它可能并不能在模型中表現(xiàn)出很好的性能。利用preprocessing類的MinMaxScaler()提前對特征數(shù)據(jù)進行歸一化后再使用高斯樸素貝葉斯模型做訓練,模型準確率將會大大提升,即數(shù)據(jù)歸一化處理對模型評分會有一定程度的提升。
data_csv = pd.read_csv('takypen.csv')
X_train = preprocessing. MinMaxScaler (data_csv.drop(['type'],axis=1))
y_train = np.ravel(data_csv[['type']])
(2)通過訓練集,構(gòu)建高斯樸素貝葉斯模型。
gb= GaussianNB()
model_GaussinaNB = gb.fit(X_train,y_train)
y_predict_GaussianNB= model_GaussinaNB.predict(X_test)
print("y_predict_GaussianNB: ",y_predict_GaussianNB)
(3)將一個新的測試數(shù)據(jù)(33,40,10)帶入模型得到預測結(jié)果如圖2所示,該模塊預測出學習者的標簽為簡單體驗者(Easy_learning),如圖1所示。
圖1 運行結(jié)果
z_data ={'day_mean':['33'],'play_mean':['40'],'chapters_mean':['10']}
Z_data =pd.DataFrame(z_data,columns=['day_mean','play_mean','chapters_mean'])
print('Test_data: ',Z_data)
Z_model_predict=model_GaussinaNB.predict(Z_data)
#每個標簽下樣本最大的概率
Z_model_proba=model_GaussinaNB.predict_proba(Z_data)
print('Test_predict:',Z_model_predict)
print('Test_probability:',Z_model_proba)
(4)預測結(jié)果的平均值和預測正確率,如圖1所示。
y_test_mean=np.mean(y_predict_GaussianNB==y_test)
print('y_test_GaussianNB_mean:%.2f '%y_test_mean)
print('y_test_GaussianNB_ave_accuracy:%.2f '%gb.score(X_test,y_test))
本研究以準確性、召回率和F1這3個指標對高斯樸素貝葉斯模型在分類任務上的性能進行評估,如圖2所示。
圖2 分類任務評估
由圖2可知,本研究通過高斯樸素貝葉斯分類器對測試樣本分類,可以得到平均準確率、平均召回率以及平均F1指標,分別為0.79,0.78和0.78。
本文選取了用戶學習過程中12天的數(shù)據(jù)作為樣本進行研究,在前端JS文件中引用echarts.js來獲取學習者行為數(shù)據(jù),使用折線圖和柱狀圖進行展示。圖3可以很直觀地看出用戶訪問的次數(shù)和學習時長的總和及平均值分析結(jié)果。
圖3 學習者畫像展示
采用構(gòu)建的K-means模型對takypen.csv中的數(shù)據(jù)進行訓練,得到的訓練結(jié)果中包含4個特征值列和1個目標值列。其中,目標值列包含了3個數(shù)字0,1,2,分別對應的分類標簽為:Highl-yinvestment,Moderateinvestment,Lowinvestment。本文根據(jù)107個結(jié)果樣本數(shù)據(jù)中的這4個特征以及3類標簽來研究學習者的學習投入度與在線測試成績之間的關系[6],實現(xiàn)方法如下。
4.1.1 導入數(shù)據(jù)并提取特征值和目標值
訓練數(shù)據(jù)是由107個樣本和4列特征值組成,其中4列特征值為day_mean,play_mean,chapters_mean和score,學習投入度標簽Highlyinvestment,Moderatei-nvestment,Lowinvestment分別用數(shù)字0,1,2表示,type列是由標簽數(shù)組轉(zhuǎn)換成的數(shù)字數(shù)組。
4.1.2 數(shù)據(jù)解析
本研究通過describe()函數(shù)對每一個特征列數(shù)據(jù)進行統(tǒng)計,包括計數(shù)、均值、標準偏差、最小值、最大值、各個分位數(shù)等,執(zhí)行print(takypen.describe())后的運行結(jié)果如圖4所示。
本研究以三維散點圖分析各特征變量對學習成績的影響,并借助3個維度特征來反映學習者的學習效果,這三維特征分別是:在線測試成績、學習次數(shù)和學習時長。學習者群體畫像的三維散點圖如圖5所示。
圖4 運行結(jié)果
由圖5可知,學習者的學習投入偏高時,知識點掌握水平多為優(yōu)秀;學習投入中等偏低時,知識點掌握水平為中等水平;學習投入偏低時,知識點掌握水平則較差。綜上,聚類為高度投入的學習者整體學習情況優(yōu)秀,聚類為中度投入的學習者整體學習情況良好,聚類為低投入的學習者的整體學習情況較差。
首先,本文通過MapReduce程序?qū)υ诰€學習者的痕跡數(shù)據(jù)進行數(shù)據(jù)清洗和預處理,從而得到了學習者的學習行為數(shù)據(jù)。其次,構(gòu)建K-means聚類模型為學習者生成學習投入度和學習效果的畫像信息,并根據(jù)學習天數(shù)、學習總時長、學習章節(jié)數(shù)等行為特征指標,使用高斯樸素貝葉斯模型構(gòu)建分類器對學習者分類,并采用K-means回歸方法對學習者進行了群體畫像分析,形成了3類學習者的群體畫像標簽。最后,本文使用Echarts和Seaborn生成相關數(shù)據(jù)圖表,以便對學習者畫像進行可視化展示。因為采集的學習者行為數(shù)據(jù)樣本數(shù)量不夠,所以本文選擇了高斯樸素貝葉斯的模型,該模型的特點就是對訓練數(shù)據(jù)量要求不大,如果訓練數(shù)據(jù)量比較大,還可以選擇其他的分類模型。
圖5 群體畫像三維散點圖