劉永芬 賴曉燕 李盼盼
摘? 要: 人工智能重在實(shí)現(xiàn)機(jī)器智能,實(shí)現(xiàn)的主要方式是機(jī)器學(xué)習(xí)?;赑ython簡(jiǎn)潔及其強(qiáng)大的人工智能算法庫(kù),將機(jī)器學(xué)習(xí)方法融入Python課程的教學(xué)中顯得尤為重要。讓學(xué)生領(lǐng)悟方法原理并學(xué)會(huì)使用,是教學(xué)的重點(diǎn)和難點(diǎn)。提出了一種直觀簡(jiǎn)易的機(jī)器學(xué)習(xí)方法與Python課程相融合的案例教學(xué)方式,能幫助學(xué)生更深刻地掌握Python語(yǔ)言,為他們今后在企業(yè)中應(yīng)用奠定基礎(chǔ)。
關(guān)鍵詞: Python; 案例教學(xué); 人工智能; 機(jī)器學(xué)習(xí)
中圖分類號(hào):G642? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ?文章編號(hào):1006-8228(2019)04-89-04
Abstract: Artificial intelligence focuses on the realization of machine intelligence, and the main way to realize it is machine learning. Because of the simplicity of Python and its powerful artificial intelligence algorithm library, it is very important to integrate the machine learning method into the teaching of Python course. It is the key and difficult point of teaching to let students understand the principle of method and learn to use it. In this paper, a case-teaching method combined intuitive and simple method of machine learning with Python course is put forward, which can help students to master Python language more deeply and lay a foundation for them to use in enterprises in the future.
Key words: Python; case-teaching; artificial intelligence; machine learning
0 引言
當(dāng)前各國(guó)的人工智能政策、計(jì)劃層出不窮。2017年,我國(guó)發(fā)布了具有里程碑意義的人工智能發(fā)展計(jì)劃——《新一代人工智能發(fā)展規(guī)劃》[1]。2018 年,教育部制訂了《高等學(xué)校人工智能創(chuàng)新行動(dòng)計(jì)劃》,為我國(guó)新一代人工智能發(fā)展提供了戰(zhàn)略支撐。美國(guó)布魯格林研究機(jī)構(gòu)發(fā)布報(bào)告認(rèn)為,現(xiàn)在的企業(yè)都是人工智能企業(yè)。歐盟計(jì)劃在人工智能領(lǐng)域設(shè)立基準(zhǔn),并發(fā)布人工智能倫理指導(dǎo)框架。自此,作為最適合人工智能開(kāi)發(fā)研究工作的 Python 語(yǔ)言受到愈多業(yè)界人士的關(guān)注。目前,高等教育培養(yǎng)計(jì)劃中面向計(jì)算機(jī)專業(yè)開(kāi)設(shè)的主要編程語(yǔ)言有C、C++、Java等。在人工智能背景下,Python程序設(shè)計(jì)在應(yīng)用型本科教育中有著重要的地位。
在大數(shù)據(jù)、云計(jì)算、人工智能等技術(shù)浪潮的推動(dòng)下,當(dāng)代計(jì)算機(jī)專業(yè)的應(yīng)用型本科生除了要具備基本計(jì)算機(jī)編程技能,還需要涉獵一定的機(jī)器學(xué)習(xí)方法,以期解決工作中遇到的非通用性計(jì)算問(wèn)題。從目前人才市場(chǎng)的需求來(lái)看,具有扎實(shí)專業(yè)基礎(chǔ)和人工智能應(yīng)用經(jīng)驗(yàn)的復(fù)合型人才更加受到青睞。
然而人工智能、機(jī)器學(xué)習(xí)等熱門(mén)詞匯對(duì)大部分沒(méi)有實(shí)踐經(jīng)驗(yàn)的學(xué)生來(lái)說(shuō),還是比較抽象。人工智能教育尚未全面融入基礎(chǔ)教育各學(xué)科的教學(xué)之中[2]。因此,從應(yīng)用型人才培養(yǎng)的角度,在Python課程中引入機(jī)器學(xué)習(xí)方法,作為案例教學(xué)是不可避免的趨勢(shì)。
1 Python課程的教學(xué)重點(diǎn)
1.1 Python的特點(diǎn)
Python作為計(jì)算機(jī)專業(yè)的選修課程,課程設(shè)置通常安排在C/C++課程之后。學(xué)生在有一定編程基礎(chǔ)的情況下,對(duì)編程語(yǔ)言基本的數(shù)據(jù)類型已經(jīng)有較深刻地認(rèn)識(shí)。課程伊始,有必要著重描述語(yǔ)言的特點(diǎn),以及與其他高級(jí)語(yǔ)言之間的區(qū)別,讓學(xué)生對(duì)課程有初步的認(rèn)識(shí),有助于形成系統(tǒng)的編程思維體系。
Python語(yǔ)言簡(jiǎn)潔易懂,有完善的程序包管理系統(tǒng)pip命令,可便捷地安裝與編寫(xiě)程序包。Python提供了豐富的數(shù)據(jù)分析模塊,以高度重用機(jī)制、不同平臺(tái)的可移植性、內(nèi)置功能強(qiáng)大的標(biāo)準(zhǔn)模塊、可與其他語(yǔ)言混合編程,其應(yīng)用領(lǐng)域相當(dāng)廣泛,涵蓋游戲編程、圖像處理、人工智能、自然語(yǔ)言分析等。
對(duì)比時(shí)下常用的計(jì)算機(jī)語(yǔ)言,如圖1所示,在TIOBE開(kāi)發(fā)語(yǔ)言2018年12月的排行榜[3]中,我們發(fā)現(xiàn)Python語(yǔ)言的熱門(mén)程度從之前的第四上升到了第三,創(chuàng)歷史評(píng)價(jià)指標(biāo)新高。
1.2 基本語(yǔ)法
由于新版本的Python語(yǔ)言與低版本的部分不兼容,建議在教學(xué)環(huán)節(jié)采用新版本Python3的語(yǔ)法結(jié)構(gòu),常見(jiàn)的數(shù)據(jù)類型有元組、列表、字典、集合,元組內(nèi)部元素寫(xiě)在小括號(hào)中,元素間用逗號(hào)分隔,每個(gè)元素的類型可以不同,但是元素不能修改;列表是有序集合,屬于“序列”類型,元素寫(xiě)在方括號(hào)中,元素的類型可以不相同,可以嵌套使用;字典用大括號(hào)標(biāo)識(shí),是一種映射類型,內(nèi)部元素以鍵值對(duì)形式出現(xiàn),關(guān)鍵字(key)必須是不可變類型;集合是一個(gè)無(wú)序不重復(fù)元素的序列,用set()函數(shù)或者大括號(hào)創(chuàng)建集合,可用于刪除重復(fù)元素,各數(shù)據(jù)類型及其實(shí)例如表1所示。
對(duì)于計(jì)算機(jī)專業(yè)的學(xué)生而言,在具有C++語(yǔ)言基礎(chǔ)的情況下,學(xué)習(xí)Python中的set、dictionary,由于它們與C++標(biāo)準(zhǔn)模板庫(kù)STL中的set、map容器具有類似的功能,在教學(xué)環(huán)節(jié)可以進(jìn)行知識(shí)點(diǎn)回顧,使學(xué)生更容易理解,觸類旁通,易學(xué)易用。
1.3 機(jī)器學(xué)習(xí)方法概述
機(jī)器學(xué)習(xí)本身是一項(xiàng)通過(guò)計(jì)算手段,利用經(jīng)驗(yàn)改善系統(tǒng)自身的技術(shù),其目的是基于經(jīng)驗(yàn)數(shù)據(jù)運(yùn)用學(xué)習(xí)算法產(chǎn)生數(shù)據(jù)模型,并對(duì)新的情況提供相應(yīng)的判斷。機(jī)器學(xué)習(xí)方法有很多,其中比較經(jīng)典的有聚類分析方法、分類方法、關(guān)聯(lián)分析方法、序列模式分析方法等。
在Python課程教學(xué)過(guò)程中,以聚類方法為例,由于K-means、DBSCAN是十分簡(jiǎn)單的聚類算法,原理非常簡(jiǎn)明清晰,可以作為教學(xué)案例,以下給出這兩種方法的簡(jiǎn)潔描述。
⑴ K-means聚類算法
K-means聚類[4]是常見(jiàn)的劃分方法,是1967年MacQueen首次提出的,常用誤差平方和函數(shù)作為聚類準(zhǔn)則函數(shù),在簇與簇之間區(qū)別明顯的情況下,聚類效果最好。K-means將包含n個(gè)數(shù)據(jù)對(duì)象集合劃分成k份(k?n),其中每個(gè)劃分代表一個(gè)聚類,算法描述如表2所示。
表2? K-means算法描述
[輸入:聚類個(gè)數(shù)k,包含n個(gè)樣本點(diǎn)的數(shù)據(jù)對(duì)象集合 輸出:滿足方差最小標(biāo)準(zhǔn)的k個(gè)聚類 步驟 描述 Step1 任意選擇k個(gè)樣本點(diǎn)作為初始聚類中心。 Step2 對(duì)于其他數(shù)據(jù)對(duì)象采用距離公式度量其到這k個(gè)初始聚類中心的相似度,分別將它們分配到最相似的聚類中。 Step3 重新計(jì)算聚類中心。 Step4 循環(huán)步驟Step2 Step3,直到標(biāo)準(zhǔn)測(cè)度函數(shù)開(kāi)始收斂為止。 ]
⑵ DBSCAN聚類算法
DBSCAN算法的顯著特點(diǎn)是能夠發(fā)現(xiàn)空間中任意形狀的簇,基于密度的聚類方法通常將簇視為空間中被低密度區(qū)域分割開(kāi)的稠密對(duì)象區(qū)域。DBSCAN是一種基于高密度連通區(qū)域的聚類方法,它將簇定義為密度相連的點(diǎn)的最大集合,將具有高密度的區(qū)域劃分為簇,具體算法描述如表3所示。
正整數(shù)MinPts,領(lǐng)域半徑ε 輸出:簇集合C={C1,C2,…,Ck} 步驟 描述 Step1 選取一個(gè)樣本對(duì)象p,根據(jù)參數(shù)MinPts和領(lǐng)域半徑ε提取所有從p密度可達(dá)的對(duì)象。 Step2 如果p是核心對(duì)象,則從p密度可達(dá)的所有對(duì)象被標(biāo)記為當(dāng)前類,并從它們進(jìn)一步擴(kuò)展。 Step3 如果p是邊界對(duì)象Step1,Step2,直到找到所有完整的聚類簇。 Step4 選擇新的起始對(duì)象開(kāi)始擴(kuò)展,得到下一個(gè)聚類簇,直到所有對(duì)象都被標(biāo)記為止。 ]
2 案例教學(xué)在Python課程中的應(yīng)用
根據(jù)Python課程的特點(diǎn),鼓勵(lì)學(xué)生開(kāi)發(fā)一些小的項(xiàng)目,在實(shí)踐中增長(zhǎng)見(jiàn)識(shí)?,F(xiàn)有的教材對(duì)基礎(chǔ)語(yǔ)法和程序設(shè)計(jì)結(jié)構(gòu)介紹得較多,人工智能方法應(yīng)用的案例也相對(duì)復(fù)雜,很容易讓學(xué)生感到抽象。由于實(shí)驗(yàn)課時(shí)有限,要在較短的實(shí)驗(yàn)課時(shí)中掌握更多的知識(shí),還需精心設(shè)計(jì)實(shí)驗(yàn)內(nèi)容,同時(shí)建議增加實(shí)踐課時(shí),在實(shí)踐教學(xué)環(huán)節(jié)引入案例,幫學(xué)生增強(qiáng)對(duì)人工智能算法的深刻理解。
通過(guò)案例教學(xué),將機(jī)器學(xué)習(xí)方法進(jìn)一步向?qū)嶋H應(yīng)用推廣。在實(shí)際的應(yīng)用中,以電子商務(wù)領(lǐng)域?yàn)槔?,通過(guò)聚類分析發(fā)現(xiàn)具有相似瀏覽行為的客戶,劃分不同的客戶群,為后續(xù)分析同類客戶的共同特征,刻畫(huà)客戶群的購(gòu)買(mǎi)模式提供依據(jù),進(jìn)而可以更好地幫助電商平臺(tái)了解客戶,向客戶提供更適合的服務(wù)。
2.1 常用標(biāo)準(zhǔn)模塊
Python中機(jī)器學(xué)習(xí)相關(guān)的標(biāo)準(zhǔn)模塊有numpy,pandas,scipy,matplotlib,sklearn等。在實(shí)踐教學(xué)環(huán)節(jié),可以著重介紹幾個(gè)機(jī)器學(xué)習(xí)方法應(yīng)用常用的標(biāo)準(zhǔn)模塊,如numpy,pandas,sklearn等。numpy是一個(gè)高性能的科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包,可用于存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效得多。sklearn是廣泛應(yīng)用的重要機(jī)器學(xué)習(xí)庫(kù),其中封裝了大量的機(jī)器學(xué)習(xí)算法,如分類、聚類、回歸、降維等,還包含了監(jiān)督學(xué)習(xí)、非監(jiān)督學(xué)習(xí)、數(shù)據(jù)變換三大模塊。matplotlib是一個(gè)繪圖庫(kù),可在跨平臺(tái)上生成直方圖、功率譜、柱狀圖、誤差圖、散點(diǎn)圖等圖像,提供了高質(zhì)量的效果呈現(xiàn)。
2.2 構(gòu)建案例數(shù)據(jù)集
每一位客戶的特征數(shù)據(jù),可看作是空間上的一個(gè)數(shù)據(jù)點(diǎn)。簡(jiǎn)單起見(jiàn),我們可以通過(guò)sklearn快速生成二維空間的樣本點(diǎn),構(gòu)成聚類分析的數(shù)據(jù)集,調(diào)用make_moons方法生成月牙型離散數(shù)據(jù),通過(guò)make_blobs方法生成團(tuán)狀離散數(shù)據(jù)樣本點(diǎn),從方法的名稱上很容易理解其功能,也體現(xiàn)了Python標(biāo)準(zhǔn)庫(kù)方法的直觀和良好的閱讀感知。構(gòu)建數(shù)據(jù)集方法實(shí)例如下:
2.3 實(shí)現(xiàn)與結(jié)果評(píng)價(jià)
通過(guò)導(dǎo)入sklearn.cluster 中的K-means類,創(chuàng)建對(duì)象調(diào)用fit_predict方法實(shí)現(xiàn)k-means方法在數(shù)據(jù)集中的聚類,程序簡(jiǎn)單易懂。其中創(chuàng)建K-means類對(duì)象常用的參數(shù)有:n_clusters表示最終K-means方法的聚類數(shù)量。random_state表示隨機(jī)生成器的種子,和初始化中心有關(guān)。max_iter表示每次迭代的最大次數(shù)。Tol為容忍的最小誤差,當(dāng)誤差小于tol,程序退出迭代。具體程序如下:
3 結(jié)束語(yǔ)
本文通過(guò)在Python課程中引入案例,直觀地對(duì)比兩種不同機(jī)器學(xué)習(xí)方法呈現(xiàn)的效果,有助于學(xué)生將理論與實(shí)際,實(shí)際與時(shí)代背景相結(jié)合,從而提高學(xué)習(xí)熱情,以期達(dá)到人工智能領(lǐng)域人才培養(yǎng)的要求。Python語(yǔ)言的特點(diǎn)決定了這門(mén)課程需要在教學(xué)內(nèi)容上與時(shí)代接軌,教學(xué)方法上采用以案例導(dǎo)入的形式避免了枯燥的敘述,將理論融入到實(shí)際的熱點(diǎn)話題中,提高了學(xué)生的學(xué)習(xí)積極性。因此,以案例促進(jìn)Python課程與人工智能領(lǐng)域的融合,具有一定的現(xiàn)實(shí)意義。希望本文能為計(jì)算機(jī)類課程的教學(xué)人員提供新的教學(xué)思路和方法,從而有利于人工智能思想的傳播和發(fā)展。
參考文獻(xiàn)(References):
[1] 新一代人工智能發(fā)展規(guī)劃[Z].國(guó)發(fā)[2017]35號(hào).
[2] 王婷婷,任友群.人工智能時(shí)代的人才戰(zhàn)略《高等學(xué)校人工智能創(chuàng)新行動(dòng)計(jì)劃》解讀之三[J].遠(yuǎn)程教育雜志,2018.5:52-59
[3] TIOBE Programming Community Index[EB/OL].https://www.tiobe.com/tiobe-index/.
[4] 王麗娟,郝志峰等.K-means聚類算法的實(shí)例教學(xué)研究[J]計(jì)算機(jī)教育,2016.8:152-157