张红霞 高荣 徐辉 柯琦
摘 要: 为了让计算机专业学生在专业基础课中尽早接触人工智能中的一些概念和算法,激发学生的学习兴趣,设计了一个融入K-近邻算法 (K-Nearest Neighbor, KNN)的二维数组教学案例,并对案例教学实施过程、实践任务分解、案例运用效果等方面进行了阐述。实践结果表明,使用该案例进行教学有利于提高课程教学质量。
关键词: 二维数组; 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 引言
如今,人才已成為人工智能技术发展及应用所需的战略资源,社会对人工智能人才的需求也逐年激增。国家高度重视并逐步布局智能化人才培养工作,以应对新一轮科技革命与产业革命带来的挑战[1]。
人工智能是个多学科交叉融合的知识领域,研究内容较为丰富,有一定的学习难度,初学者学习时很容易产生畏难情绪[2]。因此,在前期的基础课程教学中,需要教师精心设计,将人工智能算法中涉及的一些知识融入到课程教学内容当中,让学生尽早接触人工智能中的一些常用概念和算法,这些新知识的引入,不仅能改进课程的教学内容、提高课程的教学质量[3],还有助于激发学生的学习兴趣,引发学生对人工智能技术进一步探究的好奇心,帮助学生克服初学时的畏难情绪。
1 教学现状分析
二维数组是程序设计中一种常用的数据结构,在很多程序设计语言中,需要解决与矩阵有关的问题时,通常都是采用二维数组。而矩阵及其运算可说是人工智能、机器学习算法中不可或缺的,人工智能都是基于大量的数据在矩阵中进行各种庞杂而基础的运算和变换,从而找出其中的规律,最后训练出数学模型的[4]。如在程序设计语言C或Java中,矩阵可以用二维数组来表示。讲解二维数组这个知识点时,当前一般的教学顺序就是讲解其概念、定义,然后通过一些实例讲解,常用的实例有行列互换(矩阵转置)、求最值、找鞍点、杨辉三角等[5]。这些例子之间并没有什么关联,相互之间是孤立的,与实际应用也缺乏联系。学生体会不到这些例子在实际项目中有什么作用,难以和机器学习、人工智能等联系起来。
2 案例设计与实施
本案例以鸢尾花数据集、分类问题及K-近邻算法(KNN,K-Nearest Neighbor)为元素,将其融入到二维数组的教学案例中。分类问题是机器学习中的常见问题,也是日常生活中常见的一类问题,而KNN算法则是机器学习中一个简单的分类算法[6],是机器学习中惟一的一个不需要训练过程的分类算法,算法可直接用数据集对测试样本分类,学生学习起来会比较容易理解。在教学过程中,精心设计案例教学过程,采用启发式教学[7],授课的同时逐渐引导学生理解KNN算法及人工智能中的一些常用概念。
2.1 引入知识点
鸢尾花数据集是机器学习中一个经典、小巧的分类实验数据集,数据集包含3类共150个数据样本,每个样本包含花萼长、花萼宽、花瓣长、花瓣宽4个属性,类标签有三个:setosa、versicolor、virginica,其部分数据样本见表1。
在已经有数据集的条件下,需要判断新的鸢尾花数据:花萼长、花萼宽、花瓣长、花瓣宽分别是7.1、3.1、5.3、1.7,属于哪一类鸢尾花。编程解决这个分类任务,第一个问题就是如何在程序中表示这些数据,由此引入并讲解二维数组的知识。把问题简化成用二维数组来存放鸢尾花的4个属性数据,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} };
//用一个二维数组存放了5个鸢尾花数据
教学中像这样用一组具有实际意义的数据,比类似于“int[][] a={{1,2,3},{4,5,6},{7,8,9}}”这样的例子更具有实用性和吸引力。在这个过程中,学生除了学习二维数组的定义、初始化方法外,还会接触到数据集、分类问题等机器学习中的概念。
2.2 引入KNN算法
数据存放问题解决后,需要通过KNN算法实现分类,要求学生只要理解算法思想即可。KNN分类算法的基本步骤是:
① 将数据集中的数据打乱;
② 划分成训练集(通常取数据集的70%-90%)和测试集;
③ 计算待预测样本与样本集中每个样本的距离(如欧氏距离);
④ 将计算好的距离排序;
⑤ 选择K个距离最近的样本,采用少数服从多数的方法對预测样本进行分类。
教学过程中通过图1来讲解算法思想。图1是一个具有二维数据特征的样本的二分类过程,五角星是待分类样本,当K=3时,3个最近邻中有2个是A类,分类结果为class A,而当K=5时,5个最近邻中有3个是B类,分类结果为class B。可以看出机器学习、人工智能算法中分类结果并不一定准确的特点[8]。
KNN算法是一个不需要训练过程的分类算法,可以不划分训练集和测试集,因为学习的重点是二维数组,所以直接选择第三步实现:计算待预测样本与样本集中每个样本间的欧氏距离。主要代码为:
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个数据放入数组,每个元素中最后的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所示。 程序中只选用九个鸢尾花数据,可以直接分析后续的分类过程:取K=3,选择三个距离最近的近邻,有二个是第二类versicolor鸢尾花,据此预测样本为versicolor鸢尾花。这个实例中还用到了一维数组、数学函数等知识,实用性强,比常规实例如杨辉三角这样的程序更能激发学生的学习兴趣。 2.3 实践任务分解 根据理论教学内容,将KNN算法按功能进行分解后作为上机实践任务。结合学生的基础,对问题作了简单化处理,分解出的实践任务见表2。 实践任务做了简单化处理,同时也不乏挑战性,但都是在学生的能力范围内可以完成的。实践内容都与KNN算法有关,把所有的实践任务整合起来就是一个有机的整体。完成这些实践任务,除了熟练掌握二维数组这个知识点外,还能理解KNN算法。 2.4 案例运用效果 本案例应用于广西财经学院2021级计算机科学与技术专业的“Java语言程序设计”课程教学中,有100多名学生参与了课程教学,整体反映效果良好。体现在课堂教学上,学生注意力更集中,课后会主动上网查阅相关资料,并积极与老师进行线上线下沟通与交流,表现出很强的好奇心和求知欲。在实践任务方面,大部分学生都能顺利完成所有实践任务,少数学生在老师、同学的指导和帮助下也能顺利完成。从学生评教结果也可以看出,学生对融入了机器学习算法的案例教学非常满意,都希望能更深入地学习关于人工智能的课程。 3 结束语 本文只是针对二维数组这个知识点,进行了融入KNN算法的案例教学设计。这个案例在整个课程教学中并不是孤立使用的,在后续的函数、文件、结构体等章节中,还继续将本案例与这些知识点结合,如将各功能分别用函数实现;从文件中读入数据,放入二维数组中;带字符串类标签的鸢尾花数据可以用结构体数组存放等。今后需要进一步对案例进行扩充和改进,不断将新知识、新技术融合到传统的课程教学中,让整个课程有一个更加系统的教学案例,进一步提高课程教学质量。 参考文献(References): [1] 胡纯蓉等.人工智能专业教育的教学模式探讨[J].计算机 教育,2021(11):67-71 [2] 陈龙等.新工科背景下大学计算机人工智能实验案例设计[J]. 计算机教育,2022(3):29-33 [3] 王毅,黄建忠,张沪寅.基于成果导向理念的计算机新工科 人才培养[J].计算机教育,2020(2):8-11 [4] 卷儿哥.人工智能-线性代数之矩阵篇[EB/OL]. 2020- 03-17.https://blog.csdn.net/DahlinSky/article/details/104907710 [5] 谭浩强.C程序设计(第五版)[M].北京:清华大学出版社,2017 [6] 肖云鹏,卢星宇等.机器学习经典算法实践[M].北京:清华 大学出版社,2018 [7] 王建军.面向产业构建实践共同体的地方高校新工科课程 改革[J].计算机教育,2020(11):12l-125 [8] 周志华.机器学习[M].北京:清华大学出版社,2016