張紅霞 高榮 徐輝 柯琦
摘? 要: 為了讓計(jì)算機(jī)專業(yè)學(xué)生在專業(yè)基礎(chǔ)課中盡早接觸人工智能中的一些概念和算法,激發(fā)學(xué)生的學(xué)習(xí)興趣,設(shè)計(jì)了一個(gè)融入K-近鄰算法 (K-Nearest Neighbor, KNN)的二維數(shù)組教學(xué)案例,并對(duì)案例教學(xué)實(shí)施過程、實(shí)踐任務(wù)分解、案例運(yùn)用效果等方面進(jìn)行了闡述。實(shí)踐結(jié)果表明,使用該案例進(jìn)行教學(xué)有利于提高課程教學(xué)質(zhì)量。
關(guān)鍵詞: 二維數(shù)組; KNN; 教學(xué)案例; 人工智能
中圖分類號(hào):G420? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ?文章編號(hào):1006-8228(2023)06-142-03
Teaching case design of two-dimensional array integrating KNN algorithm
Zhang Hongxia, Gao Rong, Xu Hui, Ke Qi
(School of Big Data and Artificial Intelligence, Guangxi University of Finance and Economics, Nanning, Guangxi 530003, China)
Abstract: In order to expose computer major students to some concepts and algorithms in artificial intelligence as early as possible in their professional foundation courses and to stimulate their learning interest, a two-dimensional array teaching case integrating KNN algorithm is designed, and the implementation process of case teaching, practical task decomposition and case application effect are described. The practice results show that the use of the teaching case is conducive to improving the quality of curriculum teaching.
Key words: two-dimension array; K-Nearest Neighbor (KNN); teaching case; artificial intelligence
0 引言
如今,人才已成為人工智能技術(shù)發(fā)展及應(yīng)用所需的戰(zhàn)略資源,社會(huì)對(duì)人工智能人才的需求也逐年激增。國家高度重視并逐步布局智能化人才培養(yǎng)工作,以應(yīng)對(duì)新一輪科技革命與產(chǎn)業(yè)革命帶來的挑戰(zhàn)[1]。
人工智能是個(gè)多學(xué)科交叉融合的知識(shí)領(lǐng)域,研究內(nèi)容較為豐富,有一定的學(xué)習(xí)難度,初學(xué)者學(xué)習(xí)時(shí)很容易產(chǎn)生畏難情緒[2]。因此,在前期的基礎(chǔ)課程教學(xué)中,需要教師精心設(shè)計(jì),將人工智能算法中涉及的一些知識(shí)融入到課程教學(xué)內(nèi)容當(dāng)中,讓學(xué)生盡早接觸人工智能中的一些常用概念和算法,這些新知識(shí)的引入,不僅能改進(jìn)課程的教學(xué)內(nèi)容、提高課程的教學(xué)質(zhì)量[3],還有助于激發(fā)學(xué)生的學(xué)習(xí)興趣,引發(fā)學(xué)生對(duì)人工智能技術(shù)進(jìn)一步探究的好奇心,幫助學(xué)生克服初學(xué)時(shí)的畏難情緒。
1 教學(xué)現(xiàn)狀分析
二維數(shù)組是程序設(shè)計(jì)中一種常用的數(shù)據(jù)結(jié)構(gòu),在很多程序設(shè)計(jì)語言中,需要解決與矩陣有關(guān)的問題時(shí),通常都是采用二維數(shù)組。而矩陣及其運(yùn)算可說是人工智能、機(jī)器學(xué)習(xí)算法中不可或缺的,人工智能都是基于大量的數(shù)據(jù)在矩陣中進(jìn)行各種龐雜而基礎(chǔ)的運(yùn)算和變換,從而找出其中的規(guī)律,最后訓(xùn)練出數(shù)學(xué)模型的[4]。如在程序設(shè)計(jì)語言C或Java中,矩陣可以用二維數(shù)組來表示。講解二維數(shù)組這個(gè)知識(shí)點(diǎn)時(shí),當(dāng)前一般的教學(xué)順序就是講解其概念、定義,然后通過一些實(shí)例講解,常用的實(shí)例有行列互換(矩陣轉(zhuǎn)置)、求最值、找鞍點(diǎn)、楊輝三角等[5]。這些例子之間并沒有什么關(guān)聯(lián),相互之間是孤立的,與實(shí)際應(yīng)用也缺乏聯(lián)系。學(xué)生體會(huì)不到這些例子在實(shí)際項(xiàng)目中有什么作用,難以和機(jī)器學(xué)習(xí)、人工智能等聯(lián)系起來。
2 案例設(shè)計(jì)與實(shí)施
本案例以鳶尾花數(shù)據(jù)集、分類問題及K-近鄰算法(KNN,K-Nearest Neighbor)為元素,將其融入到二維數(shù)組的教學(xué)案例中。分類問題是機(jī)器學(xué)習(xí)中的常見問題,也是日常生活中常見的一類問題,而KNN算法則是機(jī)器學(xué)習(xí)中一個(gè)簡單的分類算法[6],是機(jī)器學(xué)習(xí)中惟一的一個(gè)不需要訓(xùn)練過程的分類算法,算法可直接用數(shù)據(jù)集對(duì)測(cè)試樣本分類,學(xué)生學(xué)習(xí)起來會(huì)比較容易理解。在教學(xué)過程中,精心設(shè)計(jì)案例教學(xué)過程,采用啟發(fā)式教學(xué)[7],授課的同時(shí)逐漸引導(dǎo)學(xué)生理解KNN算法及人工智能中的一些常用概念。
2.1 引入知識(shí)點(diǎn)
鳶尾花數(shù)據(jù)集是機(jī)器學(xué)習(xí)中一個(gè)經(jīng)典、小巧的分類實(shí)驗(yàn)數(shù)據(jù)集,數(shù)據(jù)集包含3類共150個(gè)數(shù)據(jù)樣本,每個(gè)樣本包含花萼長、花萼寬、花瓣長、花瓣寬4個(gè)屬性,類標(biāo)簽有三個(gè):setosa、versicolor、virginica,其部分?jǐn)?shù)據(jù)樣本見表1。
在已經(jīng)有數(shù)據(jù)集的條件下,需要判斷新的鳶尾花數(shù)據(jù):花萼長、花萼寬、花瓣長、花瓣寬分別是7.1、3.1、5.3、1.7,屬于哪一類鳶尾花。編程解決這個(gè)分類任務(wù),第一個(gè)問題就是如何在程序中表示這些數(shù)據(jù),由此引入并講解二維數(shù)組的知識(shí)。把問題簡化成用二維數(shù)組來存放鳶尾花的4個(gè)屬性數(shù)據(jù),Java代碼段如下:
double iris[][]={ {5.1,3.8,1.5,0.2},
{4.9,3.0,1.4,0.2},
{7.0,3.2,4.7,1.4},
{4.9,2.4,3.3,1.0},
{6.3,3.3,6.0,2.5} };
//用一個(gè)二維數(shù)組存放了5個(gè)鳶尾花數(shù)據(jù)
教學(xué)中像這樣用一組具有實(shí)際意義的數(shù)據(jù),比類似于“int[][] a={{1,2,3},{4,5,6},{7,8,9}}”這樣的例子更具有實(shí)用性和吸引力。在這個(gè)過程中,學(xué)生除了學(xué)習(xí)二維數(shù)組的定義、初始化方法外,還會(huì)接觸到數(shù)據(jù)集、分類問題等機(jī)器學(xué)習(xí)中的概念。
2.2 引入KNN算法
數(shù)據(jù)存放問題解決后,需要通過KNN算法實(shí)現(xiàn)分類,要求學(xué)生只要理解算法思想即可。KNN分類算法的基本步驟是:
① 將數(shù)據(jù)集中的數(shù)據(jù)打亂;
② 劃分成訓(xùn)練集(通常取數(shù)據(jù)集的70%-90%)和測(cè)試集;
③ 計(jì)算待預(yù)測(cè)樣本與樣本集中每個(gè)樣本的距離(如歐氏距離);
④ 將計(jì)算好的距離排序;
⑤ 選擇K個(gè)距離最近的樣本,采用少數(shù)服從多數(shù)的方法對(duì)預(yù)測(cè)樣本進(jìn)行分類。
教學(xué)過程中通過圖1來講解算法思想。圖1是一個(gè)具有二維數(shù)據(jù)特征的樣本的二分類過程,五角星是待分類樣本,當(dāng)K=3時(shí),3個(gè)最近鄰中有2個(gè)是A類,分類結(jié)果為class A,而當(dāng)K=5時(shí),5個(gè)最近鄰中有3個(gè)是B類,分類結(jié)果為class B??梢钥闯鰴C(jī)器學(xué)習(xí)、人工智能算法中分類結(jié)果并不一定準(zhǔn)確的特點(diǎn)[8]。
KNN算法是一個(gè)不需要訓(xùn)練過程的分類算法,可以不劃分訓(xùn)練集和測(cè)試集,因?yàn)閷W(xué)習(xí)的重點(diǎn)是二維數(shù)組,所以直接選擇第三步實(shí)現(xiàn):計(jì)算待預(yù)測(cè)樣本與樣本集中每個(gè)樣本間的歐氏距離。主要代碼為:
double[][] iris={ {5.1,3.5,1.4,0.2,1},...{7.0,3.2,4.7,1.4,2},...{ 6.3,3.3,6.0,2.5,3} };
//每類鳶尾花選擇3個(gè)數(shù)據(jù)放入數(shù)組,每個(gè)元素中最后的1,2,3分別代表3種類型
double[] newIris={7.1,3.1,5.3,1.7}; //待判斷樣本
double[] dist=new double[iris.length];
//dist用來存放計(jì)算出的歐氏距離
for(inti=0;i double d=0; for(int j=0; j d=d+Math.pow(newIris[j]-iris[i][j],2); } dist[i]=Math.sqrt(d); } for(inti=0; i System.out.println(dist[i]+" "+iris[i][4]); //輸出計(jì)算出的歐氏距離 } 程序運(yùn)行效果如圖2所示。 程序中只選用九個(gè)鳶尾花數(shù)據(jù),可以直接分析后續(xù)的分類過程:取K=3,選擇三個(gè)距離最近的近鄰,有二個(gè)是第二類versicolor鳶尾花,據(jù)此預(yù)測(cè)樣本為versicolor鳶尾花。這個(gè)實(shí)例中還用到了一維數(shù)組、數(shù)學(xué)函數(shù)等知識(shí),實(shí)用性強(qiáng),比常規(guī)實(shí)例如楊輝三角這樣的程序更能激發(fā)學(xué)生的學(xué)習(xí)興趣。 2.3 實(shí)踐任務(wù)分解 根據(jù)理論教學(xué)內(nèi)容,將KNN算法按功能進(jìn)行分解后作為上機(jī)實(shí)踐任務(wù)。結(jié)合學(xué)生的基礎(chǔ),對(duì)問題作了簡單化處理,分解出的實(shí)踐任務(wù)見表2。 實(shí)踐任務(wù)做了簡單化處理,同時(shí)也不乏挑戰(zhàn)性,但都是在學(xué)生的能力范圍內(nèi)可以完成的。實(shí)踐內(nèi)容都與KNN算法有關(guān),把所有的實(shí)踐任務(wù)整合起來就是一個(gè)有機(jī)的整體。完成這些實(shí)踐任務(wù),除了熟練掌握二維數(shù)組這個(gè)知識(shí)點(diǎn)外,還能理解KNN算法。 2.4 案例運(yùn)用效果 本案例應(yīng)用于廣西財(cái)經(jīng)學(xué)院2021級(jí)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的“Java語言程序設(shè)計(jì)”課程教學(xué)中,有100多名學(xué)生參與了課程教學(xué),整體反映效果良好。體現(xiàn)在課堂教學(xué)上,學(xué)生注意力更集中,課后會(huì)主動(dòng)上網(wǎng)查閱相關(guān)資料,并積極與老師進(jìn)行線上線下溝通與交流,表現(xiàn)出很強(qiáng)的好奇心和求知欲。在實(shí)踐任務(wù)方面,大部分學(xué)生都能順利完成所有實(shí)踐任務(wù),少數(shù)學(xué)生在老師、同學(xué)的指導(dǎo)和幫助下也能順利完成。從學(xué)生評(píng)教結(jié)果也可以看出,學(xué)生對(duì)融入了機(jī)器學(xué)習(xí)算法的案例教學(xué)非常滿意,都希望能更深入地學(xué)習(xí)關(guān)于人工智能的課程。 3 結(jié)束語 本文只是針對(duì)二維數(shù)組這個(gè)知識(shí)點(diǎn),進(jìn)行了融入KNN算法的案例教學(xué)設(shè)計(jì)。這個(gè)案例在整個(gè)課程教學(xué)中并不是孤立使用的,在后續(xù)的函數(shù)、文件、結(jié)構(gòu)體等章節(jié)中,還繼續(xù)將本案例與這些知識(shí)點(diǎn)結(jié)合,如將各功能分別用函數(shù)實(shí)現(xiàn);從文件中讀入數(shù)據(jù),放入二維數(shù)組中;帶字符串類標(biāo)簽的鳶尾花數(shù)據(jù)可以用結(jié)構(gòu)體數(shù)組存放等。今后需要進(jìn)一步對(duì)案例進(jìn)行擴(kuò)充和改進(jìn),不斷將新知識(shí)、新技術(shù)融合到傳統(tǒng)的課程教學(xué)中,讓整個(gè)課程有一個(gè)更加系統(tǒng)的教學(xué)案例,進(jìn)一步提高課程教學(xué)質(zhì)量。 參考文獻(xiàn)(References): [1] 胡純?nèi)氐?人工智能專業(yè)教育的教學(xué)模式探討[J].計(jì)算機(jī) 教育,2021(11):67-71 [2] 陳龍等.新工科背景下大學(xué)計(jì)算機(jī)人工智能實(shí)驗(yàn)案例設(shè)計(jì)[J]. 計(jì)算機(jī)教育,2022(3):29-33 [3] 王毅,黃建忠,張滬寅.基于成果導(dǎo)向理念的計(jì)算機(jī)新工科 人才培養(yǎng)[J].計(jì)算機(jī)教育,2020(2):8-11 [4] 卷兒哥.人工智能-線性代數(shù)之矩陣篇[EB/OL]. 2020- 03-17.https://blog.csdn.net/DahlinSky/article/details/104907710 [5] 譚浩強(qiáng).C程序設(shè)計(jì)(第五版)[M].北京:清華大學(xué)出版社,2017 [6] 肖云鵬,盧星宇等.機(jī)器學(xué)習(xí)經(jīng)典算法實(shí)踐[M].北京:清華 大學(xué)出版社,2018 [7] 王建軍.面向產(chǎn)業(yè)構(gòu)建實(shí)踐共同體的地方高校新工科課程 改革[J].計(jì)算機(jī)教育,2020(11):12l-125 [8] 周志華.機(jī)器學(xué)習(xí)[M].北京:清華大學(xué)出版社,2016