方 歡,方賢文,郭 娟,陳小奎
(安徽理工大學(xué)數(shù)學(xué)與大數(shù)據(jù)學(xué)院,安徽淮南 232001)
近年來,隨著大數(shù)據(jù)技術(shù)應(yīng)用的深入,開設(shè)“數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)”(專業(yè)代碼:080910T)以及在已有專業(yè)的基礎(chǔ)上增設(shè)“數(shù)據(jù)分析與挖掘”專業(yè)方向的本科院校越來越多,而在市場(chǎng)招聘中,對(duì)于數(shù)據(jù)分析與挖掘類人才的能力與要求也各有不同。根據(jù)領(lǐng)英人才報(bào)告,相關(guān)的大數(shù)據(jù)人才需求可以分為幾個(gè)層次,具體如表1所示。從表1的崗位和技術(shù)能力要求可以看出,雖然大數(shù)據(jù)分析師是目前的亟需人才,但是這個(gè)崗位對(duì)專業(yè)技術(shù)能力的要求也較高。因此,在本科院校中研究如何展開數(shù)據(jù)分析師相關(guān)課程的教學(xué)工作十分必要。
表1 市場(chǎng)對(duì)大數(shù)據(jù)人才的需求層次
以筆者所在學(xué)校為例,其目前在應(yīng)用統(tǒng)計(jì)學(xué)、信息與計(jì)算科學(xué)兩個(gè)理科專業(yè),都開設(shè)有“數(shù)據(jù)分析與處理”“數(shù)據(jù)挖掘技術(shù)”以及“Python程序設(shè)計(jì)方法”等課程[1-3],用以支撐這兩個(gè)專業(yè)學(xué)生在數(shù)據(jù)分析方向的就業(yè),這也進(jìn)一步促進(jìn)了有關(guān)數(shù)據(jù)挖掘相關(guān)課程的教學(xué)研究[4-7]。本文針對(duì)“數(shù)據(jù)挖掘技術(shù)”課程中“分類與預(yù)測(cè)”內(nèi)容的教學(xué)方法進(jìn)行深入探討,結(jié)合教學(xué)實(shí)踐,闡述在案例驅(qū)動(dòng)的條件下使用Python程序?qū)Ψ诸惻c預(yù)測(cè)方法進(jìn)行教學(xué),并給出相關(guān)的實(shí)驗(yàn)設(shè)計(jì)方案。
在“數(shù)據(jù)挖掘技術(shù)”課程中,主要介紹以下六種分類與預(yù)測(cè)方法:(1)基于決策樹的分類預(yù)測(cè)方法;(2)基于條件規(guī)則的分類預(yù)測(cè)方法;(3)基于神經(jīng)網(wǎng)絡(luò)的分類預(yù)測(cè)方法;(4)基于支持向量機(jī)的分類預(yù)測(cè)方法;(5)基于樸素貝葉斯及貝葉斯信念網(wǎng)絡(luò)的分類預(yù)測(cè)方法;(6)基于記憶的推理分類預(yù)測(cè)方法。
在這些方法中,基于決策樹的方法、樸素貝葉斯方法以及基于條件規(guī)則的方法不需要太多的預(yù)備知識(shí),只需要掌握經(jīng)典的概率論方法即可,因此在本科生教學(xué)時(shí)選擇這三種方法為主要講解內(nèi)容,調(diào)整后的分類預(yù)測(cè)方法教學(xué)內(nèi)容如下:(1)信息熵理論、信息的不確定性理論;(2)決策樹的概念;(3)ID3分類預(yù)測(cè)算法;(4)規(guī)則條件系統(tǒng)以及決策樹與條件規(guī)則系統(tǒng)的轉(zhuǎn)換;(5)樸素貝葉斯分類預(yù)測(cè)算法;(6)分類預(yù)測(cè)算法的評(píng)價(jià)。
表2 采集的案例數(shù)據(jù)集
表3 需要分類預(yù)測(cè)的數(shù)據(jù)集
2.1.1 基于古典概率模型的信息熵
例 有32個(gè)足球隊(duì)比賽,每個(gè)隊(duì)實(shí)力相當(dāng),每一個(gè)隊(duì)勝出的概率都是1/32,那么要猜對(duì)哪個(gè)足球隊(duì)勝出非常困難,此時(shí)熵H(X)=5。試想如果32個(gè)隊(duì)中有1個(gè)是AC米蘭隊(duì),另外31個(gè)隊(duì)是安理信計(jì)1班、2班、…、31班,那么幾乎只有一個(gè)可能,即AC米蘭隊(duì)勝利的概率是100%,其他球隊(duì)的獲勝概率都為0,此時(shí)這個(gè)系統(tǒng)的熵就是H(X)=0。
2.1.2 熵的性質(zhì)
(1)有序的系統(tǒng),熵為0;(2)熵也可以作為一個(gè)系統(tǒng)的混亂程度的標(biāo)準(zhǔn),系統(tǒng)越混亂,熵越大。因此,熵可以作為衡量信息量大小的度量標(biāo)準(zhǔn)之一。
決策樹是樣本知識(shí)的一種表現(xiàn)形式,主要由三類結(jié)點(diǎn)組成:決策結(jié)點(diǎn)、分支以及葉子結(jié)點(diǎn),其中決策結(jié)點(diǎn)由樣本屬性構(gòu)成,而分支則來源于樣本屬性的取值,葉子結(jié)點(diǎn)為分類標(biāo)簽值。圖1給出了一個(gè)流感問題描述的決策樹模型,方形為決策結(jié)點(diǎn),圓形是葉子結(jié)點(diǎn),而邊上的標(biāo)注為屬性分支。
2.3.1 決策樹構(gòu)造思路
使用貪心法來選擇具有最高信息增益的屬性作為當(dāng)前計(jì)算的分裂屬性,因此一顆ID3決策樹一定滿足以下三個(gè)條件:(1)決策樹的根結(jié)點(diǎn)是所有樣本中信息量最大的屬性;(2)樹的中間結(jié)點(diǎn)是以該結(jié)點(diǎn)為根的子樹所包含的樣本子集中信息量最大的屬性;(3)決策樹的葉子結(jié)點(diǎn)是樣本的類別值。
2.3.2 決策樹的計(jì)算過程
2.3.3 算法示例
根據(jù)決策樹構(gòu)造算法,對(duì)表2的樣本數(shù)據(jù)進(jìn)行計(jì)算,可以得到如圖2所示的決策樹模型。
根據(jù)決策樹模型,可以很容易得到相關(guān)樣本的條件規(guī)則系統(tǒng)。轉(zhuǎn)換規(guī)則如下:從樹根開始,選擇任意一條可以達(dá)到葉子結(jié)點(diǎn)的路徑,將分裂屬性及其對(duì)應(yīng)的分支條件結(jié)合起來,并使用合取條件進(jìn)行條件復(fù)合,即可得到一條規(guī)則,重復(fù)這個(gè)過程直至所有的路徑都被遍歷。
根據(jù)這個(gè)思路,圖2的決策樹表達(dá)成條件規(guī)則系統(tǒng),如下所示:
(1)age<=30 and student=’no’ then buys_computer=’no’;
(2)age<=30 and student=’yes’ then buys_computer=’yes’;
(3)age in 31..40 then buys_computer=’yes’;
(4)age>40 and credit_rating=’excellent’ then buys_computer=’no’;
(5)age>40 and credit_rating=’fair’ then buys_computer=’yes’.
由此,這五條規(guī)則構(gòu)成了表2樣本的條件規(guī)則系統(tǒng)。
所謂的“樸素”是指樣本的屬性特征相互獨(dú)立,在此條件下才可以進(jìn)行樸素貝葉斯的分類預(yù)測(cè)算法。
樸素貝葉斯分類的思想如下:
step1 設(shè)x={a1,a2,…,am}為一個(gè)待分類項(xiàng),而每個(gè)ai為x的一個(gè)特征屬性;
step2 有類別集合C={y1,y2,…,yn};
樸素貝葉斯分類決策算法的決策過程如圖3所示。
以表2的樣本數(shù)據(jù)為例,假設(shè)待分類數(shù)據(jù)x為x={age=”<=30”,income=”medium”,student=”yes”,credit_rating=”fair”},表2的樣本可以分為兩類:Class y1:buys_computer=“yes”和Class y2:buys_computer=“no”。
計(jì)算過程如下:
step1 計(jì)算每個(gè)類的先驗(yàn)概率P(yi):P(y1)=9/14,P(y2)=5/14;
step2 計(jì)算每個(gè)特征屬性對(duì)于每個(gè)類別的條件概率:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
step5 結(jié)論
對(duì)于樣本x,樸素貝葉斯分類預(yù)測(cè)buys_computer=”yes”。
Python程序是目前數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)最常用的一門設(shè)計(jì)語言,使用Python對(duì)上述的ID3以及樸素貝葉斯算法進(jìn)行使用大致有兩種途徑:(1)可以根據(jù)本文給出的算法思路進(jìn)行個(gè)性化設(shè)計(jì),將算法過程用Python進(jìn)行展示;(2)通過調(diào)用Python中的scikit-learn包庫來進(jìn)行算法調(diào)用。前者耗時(shí)較大,后者使用比較簡(jiǎn)單。本文主要講解后者的調(diào)用方法。
在scikit-learn包庫中存在decision-tree-id3模型,可以使用如下格式進(jìn)行調(diào)用(其中l(wèi)oad_breast_cancer為調(diào)用的數(shù)據(jù)集名稱):
>>>from sklearn.datasets import load_breast_cancer
>>>from id3 import Id3Estimator
>>>from id3 import export_graphviz
>>>bunch = load_breast_cancer()
>>>estimator = Id3Estimator()
>>>estimator.fit(bunch.data, bunch.target)
>>>export_graphviz(estimator.tree_, ’tree.dot’, bunch.feature_names)
在scikit-learn中存在三種不同屬性的樸素貝葉斯模型。(1)高斯分布模型:假定屬性(特征)服從整體分布;(2)多項(xiàng)式模型:用于離散值模型,比如文本分類與挖掘問題;(3)伯努利模型:在這種情形下,特征只能表述為0(沒出現(xiàn))或1(出現(xiàn)過)。
其各自的調(diào)用方式分別為:
>>>fromsklearn import metrics
>>>fromsklearn.naive_bayes import GaussianNB
>>>fromsklearn.naive_bayes import MultinomialNB
>>>fromsklearn.naive_bayes import BernoulliNB
以其中的GaussianNB模型為例,下面給出一組GaussianNB的分類預(yù)測(cè)算法實(shí)現(xiàn)過程:
>>>model= GaussianNB()
>>> start_time= time.time()
>>>model.fit(X,y)
>>>print(’training took %fs!’%(time.time()-start_time))
>>>print(model)
>>>expected= y
>>>predicted= model.predict(X)
>>>print(metrics.classification_report(expected,predicted))
>>>print(metrics.confusion_matrix(expected,predicted))
在目前大數(shù)據(jù)背景下,我們把分類和預(yù)測(cè)統(tǒng)稱為推測(cè)。分類就是應(yīng)用已知的一些屬性數(shù)據(jù)去推測(cè)一個(gè)未知的離散型的屬性數(shù)據(jù),而這個(gè)被推測(cè)的屬性數(shù)據(jù)的可取值是預(yù)先定義的。想要很好地實(shí)現(xiàn)這種推測(cè),就需要事先在已知的一些屬性和未知的離散型屬性之間建立一個(gè)有效的模型,即分類模型。本文主要講解了應(yīng)用古典概率模型就可以計(jì)算的ID3決策樹模型、樸素貝葉斯算法模型。除此之外,還有很多可以應(yīng)用的數(shù)學(xué)模型,比如神經(jīng)網(wǎng)絡(luò)、logistic回歸、支持向量機(jī)等。這些數(shù)學(xué)模型可能比較難,如何將這些數(shù)學(xué)模型與編程語言結(jié)合起來是一件非常困難的事情,需要教師不斷地應(yīng)用各種案例進(jìn)行引導(dǎo),加深學(xué)生的理解。另外,在實(shí)際教學(xué)過程中,還可引入一些案例讓學(xué)生動(dòng)手實(shí)踐,使學(xué)生對(duì)分類預(yù)測(cè)方法有更深刻的理解,提高學(xué)生的實(shí)踐動(dòng)手能力。