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