APP下载

高中人工智能——初探感知器(下)

2022-03-01程凯

中国科技教育 2022年1期
关键词:分类器次数直线

程凯

分类器的建立及参数调整

人类可以根据散点图的分布直接给出分类直线所在的位置,但是机器看不到,也不知道这条分类直线应该放在哪里,它只能一点点地将样本点带入分段函数中。如果分段函数判断的结果与实际类别匹配就说明该直线能够正确分类;否则不能正确分类,需要修正直线的位置,直到全部样本带入后都能正确分类为止。因此,机器需要具备判断能力。基于此,给定判断规则,机器就可以通过自身学习迭代出正确的分类直线的位置。

感知器就是训练分类器的一种算法,在分类模型形式确定的情况下,可以通过感知器训练算法获得模型的参数,进而获得分类器。感知器训练算法本质上是一种迭代算法,通过不断修正参数减少误分类的程度。因此,感知器训练算法不同于最小二乘法,感知器训练算法不是一步到位求取模型的参数,是不断迭代、不断接近最优的分类位置。迭代的快慢依赖于问题的复杂程度和迭代过程中一些初始参数和学习率的选择。高中学生初次接触迭代算法,要理解迭代算法不能给出一步到位的解析解的原因,应先从理解迭代算法出现的实际必然性出发,也可以结合实验的演示,观察在参数修正迭代的时候,分类直线如何不断摆动,逼近最佳的分类位置,从感性上理解迭代的思想。

因为建立的是二维坐标,可以使用一条直线将平面分开。如果是多维的,我们可以使用n-1维将它们分开,这叫作超平面。为了显示方便,我们以二维为例,需要两个点确定一条直线,将数据分开。我们在初中学过一条直线可以表示为ax+b=y,将这个移项可以变为ax+b-y=0,在这里不表示x和y的对应关系,而表示已输入的2个参数的关系,我们可以把y用参数x代替,那么这个函数就变为ax-x+b=0,为了能更好地计算,我们这里可以先学一点矩阵的构成和运算。这时就把它变成[a,-1,1]与[x,x,b]两个矩阵的相乘了。我们在输入数据的时候只输入了2个变量x和x,我们可以使用np.one人为地制造一个全为1的数据。这样一个函数方程就建立了,然后通过调整参数改变方程,最后方程将2组数据完全分开。下面是方程的前期建立。

X=np.hstack((np.ones((X.shape[0],1)),X))

w=np.ones((3,1))

注意:參数的设置可以使用随机方法,使它们的分布符合高斯分布,本次为了更好地观察数据的变化我们将所有参数设置为1,使用numpy建立。

调整参数使用学习率,在课本上介绍的方法是通过计算真实值和预测值的偏差调整参数,a←a+ηy'x',a←a+ηy'x',b←b+ηy,为了方便计算这在y值输入的时候选取两类1,-1。

下面是程序代码,有能力的学生可以尝试理解。

初步设置学习率为0.01。使用循环语句逐渐尝试,刚开始实验的次数为100次,得不到结果,后将实验次数更改为5000,经过多次调试,发现大约需要1500次左右就可以形成图像。同时,这里可以学习一下循环语句,判断语句的使用,重点对break和continue的讲解,以及np.where条件语句的使用。当所有的数据都完全分类后跳出循环。

将所有的鸢尾花分类后,权重的参数显示为w[0],w[1],w[2],分别表示a,a,b。参数带入直线方程为ax+ax+b=0,变形为matplotlib容易显示的直线。

设计意图:通过讲解可以使学生更好地理解感知器,感知器其实属于线性分类器,对异常或问题还不能处理。在教学中增加部分简单的大学内容(矩阵简单应用),更能激发学生学习的热情,使得学生看待问题的方式发生改变。并不强调学生能看懂代码,但可以让学生调整部分代码,更好地理解感知器通过迭代的方法,最后通过matplotlib显示结果。

学习率分析

提出问题学习率或系数大小应该如何选择,过大过小会出现什么问题。

通过程序检测哪个学习率能更快得到收敛,得到分类的结果。本次从0.1到0.2,步长为0.001,最高分类次数为5000次,如果能完全分类,则跳出循环,并将学习率和次数添加到list,通过matplotlib显示检测结果。代码如下:

通过检测可以发现当学习率为0.1630、0.190、0.194时学习次数为3次,其他学习率的学习次数较高。

设计意图:通过实验的方法能进一步了解学习率在快速收敛中选择的重要性。学习率过高可能导致发散,过低则会导致迭代次数太多。实验的尝试也为高三学习导数作好铺垫,提高学生学习的积极性。

反思总结

本次实验对从原始鸢尾花数据集的观察、调用、显示、分类,让学生更好地体会人工智能中使用python进行应用,使我们有了更深层次的思考,是否可以使用同样的方法对其他东西分类。在高中阶段我们已经学了部分知识,在实验中得到了应用,更加深了学生对数学的学习兴趣。同时,学生对矩阵有了初步的认识。

通过鸢尾花的数据分析很好地认识了感知器模型。对数据集的处理及感知器的参数如何调整和学习率的选择有了更深的理解。通过matplotlib的显示,使抽象数据可以更为直观地展示,激发学生学习的热情。

当然,实验和代码编写过程中也出现了一些不足之处,希望以后能尽力避免并成为借鉴。比如,数据集中只能存在-1和+1,如果出现多个分类要如何使用感知器模型?在高中信息课python学习中,只是简单地对语言本身的学习,对编程理解还是不到位,学生不能很好地理解程序代码

猜你喜欢

分类器次数直线
分类器集成综述
少样本条件下基于K-最近邻及多分类器协同的样本扩增分类
学贯中西(6):阐述ML分类器的工作流程
最后才吃梨
俄罗斯是全球阅兵次数最多的国家吗?
基于AdaBoost算法的在线连续极限学习机集成算法
画直线
一样长吗?
你喜欢直线吗?
如何在IMS网络中计算呼叫接通率