围绕机器学习整合信息技术教学内容

    陈凯

    

    

    

    课程整合是课程改革中的一项重要研究项目,从文字上看,所谓“整合”,就是联系不同的部分使之成为整体,或者是将原来分散的部件纳入到某个具有特定主题的系统框架中。查阅当前文献资料可知,在多种与信息技术学科有关的课程整合的探索中,利用信息技术手段促进其他学科教学的研究和实践案例可谓是汗牛充栋,而将重点落在信息技术本学科核心素养培养方面的课程整合案例颇为稀少,本文尝试以K近邻算法为例,谈一谈在信息技术学科内实施课程整合以提高教学效率的策略。

    ● 虚拟情境:一只尴尬的兔子

    这里先介绍一下情境故事里的主角——一只尴尬的兔子。关心本栏目往期文章的读者可能会发现,笔者常常编写和兔子有关的故事来帮助教学,这是因为在实际的教学中,笔者倾向于创设虚拟的、背景连贯的、问题纯粹的情境,但在这个具有整体性特点的教学情境中发生的事件,与现实世界有着遥相对应的同构关系。

    故事是这样的:假设有若干只兔子,有些是黄色的,有些是灰色的,它们被随机安置在了n×n大小的正方形的区域内,总共有n的平方个单位空间,每一只兔子占用一个单位空间中的兔子洞,当然,也有相当多的单位空间内是没有兔子的。然而,有一只介于黄色和灰色之间的咖啡色兔子,它有些尴尬,不知道应该加入黄兔子的团队,还是灰兔子的团队,最后它这样决定,自己周围哪一种颜色的兔子多,就加入哪个团队。可兔子们全都躲在洞里,看不清其中底细。聪明的咖啡色兔子找来不少白菜,将它们扔到不同的洞口,好引诱洞里的兔子出来一窥究竟,然而,它不仅力气不大,投掷白菜的准头又十分差劲……

    ● 教学需求1:体现抽象和编码的思想

    建议在教学进程刚开始的时候,先将目光投向未来的教学内容,看看是否有可能在不同的教学内容之间建立联系,而是否能体现出学科核心素养的培育,就成为如何建立联系的主要依据。

    将故事场景抽象和编码为数据,这就需要一定的计算思维,如将空的兔子洞编码为0,有黄兔子的洞编码为1,有灰兔子的洞编码为2,咖啡色兔子编码为3。在一般的K近邻算法中,大多使用标签加特征值的做法来存储数据,以兔子的故事为例,存储结构大致如左表所示。

    而本文的例子中,是用二维空间列表的数值,代表每个空间的状态:0表示没有兔子,1表示黄兔子,2表示灰兔子,3表示咖啡色兔子。下面是建立这个列表的Python代码:

    bunny=[[0 for col in range(25)] for row in range(25)]

    bunny[6][10]=1

    bunny[7][8]=1

    bunny[10][8]=2

    bunny[10][16]=2

    #这里略过更多兔子分布情况

    这样做的用意是,能比较直观地在抽象符号和空间形象之间保留联系,有助于学习者逐渐熟悉如何组织数据使之成为反映某种“现实”的模型。这里的“现实”打上了引号,是因为例子中这些数据所反映的兔子世界是一个简单纯粹的虚拟世界。尽管如此,虚拟的兔子世界其实可以直接与多种现实需求建立起密切的联系,如图像处理、数据分析等;一个虚拟世界还可以作为抽取自然客观世界特征的一个中介,如机器学习中常将某观察对象的特征值的关系投射到几何空间中。另外值得注意的是,为“现实”建立數据模型,计算机科学的方法与传统数学方法相比较有其独特性,可以看成是数学方法的一个子集。

    可以将列表中所有数据打印出来观察,兔子如何分布可以由用户自行通过改变列表数据来决定。例如,某兔子世界分布情况如图1所示,为清晰起见,数据0打印为空格,生成此图的程序代码非常简单,这里就不列出了。

    在信息技术教学的许多阶段,都可以借助与兔子世界有类似场景的例子来展开教学,体现抽象和编码的思想。例如,在信息数字化的教学内容中,可以用兔子颜色状态的组合来作为图像存储的数据;在数据压缩的教学内容中,可以用兔子颜色状态的变化来实现压缩;在程序算法模块中,可以用这个例子来讲解数据结构和循环结构的使用;在人工智能的学习中,可以用这个例子来讲解K近邻算法,加以变化后还可以用来讲解决策树、K均值等算法等。

    ● 教学需求2:体现模拟与仿真的思想

    常用的K近邻算法的思路很简单,对于等待判定类别的对象来说,需要在已有(训练)数据集中找到与该对象最邻近的K个实例,如果这K个实例的多数属于某个类,就把该判别对象归到这个类。相关详细过程和代码很容易在网络上找到,这里不再赘述。

    但兔子世界的情境设定有其特殊性,对咖啡色兔子来说,除非将其他兔子洞里的兔子引出洞口,不然它是无法知晓每个单位空间中兔子的状况的,也就是说,它没有如图1所示的那样的全局视角。这只咖啡色兔子只是随意抛掷白菜,假设兔子力气有限,那么越是接近自己的空间,被投掷到的次数越多,越是距离远的空间,被投掷到的次数越少,为了控制投掷距离,可以利用呈正态分布的随机函数。这里其实用到了蒙特卡洛法,投掷次数越多,结果也越准确。程序代码如下页图2所示。

    从程序代码中可以看出,咖啡色兔子一共投掷了500次,由于随机函数的作用,每次结果数据都不一样,但灰兔子更多的结果是显然的。其实,即便将投掷次数减少为50次,在大部分情况下,也能得到应当归类为灰色兔子的结果。

    所以说,程序代码结合了K近邻算法和蒙特卡洛法两者的特征。一方面,程序执行过程和行为密切相关,很大程度上降低了理解上的难度;另一方面,代码中提供了不少供学习者调整变化的地方,如改变兔子的分布情况、改变循环次数、改变正态分布的标准差等。这其实就是一个通过模拟和仿真来进行研究并获得结果的过程。

    ● 教学需求3:体现迭代和自动化的思想

    这个情境稍作修改,就可以用在K均值算法的教学上,K均值算法的思路和一般解决方法,也很容易在网络上找到,这里不再赘述。

    假设兔子世界里所有的兔子都是咖啡色的,但它们自己想要根据如图3所示的空间分布情况分成黄兔子组和灰兔子组,而在缺少全局视角的情况下,兔子自己是不知道该怎么分类的,那么根据K均值算法的思路,同样可以采用随意扔白菜的方法来进行归类,而先前任务中的大部分程序代码可以直接应用到新的任务中。限于篇幅,这里不列出相关程序代码,如有需要可向作者发送邮件索取。初始时,所有咖啡色兔子在空间上的分布情况如图3所示。虽然人眼一望便知分类结果,但兔子自己是不知道的。

    解决问题的思路很简单,先在任意位置添加两只兔子,它们分别是可以四处活动的黄兔子队长(用字母a表示)和灰兔子队长(用字母b表示),两位队长轮流扔白菜若干次,被黄兔子队长砸中的兔子归黄兔子组,被灰兔子队长砸中的兔子归灰兔子组。在第一轮投掷结束后,黄兔子组的成员和灰兔子组的成员可以初步确定下来,但仍然有部分兔子没有被归类,由于随机函数的作用,黄兔子偶尔也可能拉拢到较远的兔子,灰兔子也是这样。第一轮投掷结束后情况如图4所示。

    根据K均值算法,接下来,两位队长应该尽量站到自己组员中间的位置,然后再进一步收服周边兔子归入己方队伍,这样反复迭代后,每只兔子所属团队就越来越清晰了。很显然,将同样方法反复应用于数据并由逐步迭代得出结果的做法体现出计算思维中形式化和自动化的思想。程序执行变化情况如图5所示。

    在程序运行中,迭代的过程颇有趣味性,因为随机函数的存在,难免会有极个别的兔子临时“叛变”到对方的团队中,要解决这个问题,可以逐渐收缩随机函数正态分布的标准差,这样就可以提高分类效果了,这也就使得算法有进一步改进的潜力,可供学习者深入探索。

    本文所介绍任务情境,形式上将多个处于不同阶段的信息技术教学内容整合在了一起,同时,也始终将如何落实计算思维培养作为教学设计的主要需求,希望能对大家有所启发,从而设计出更多更好的教学情境和活动任务。