《《机器学习基础及应用》教案第6课使用k近邻算法实现分类与回归.docx》由会员分享,可在线阅读,更多相关《《机器学习基础及应用》教案第6课使用k近邻算法实现分类与回归.docx(9页珍藏版)》请在第壹文秘上搜索。
1、课题使用k近邻算法实现分类与回归课时2课时(90min)教学目标知识技能目标:(1)掌握k近邻算法解决分类问题的基本原理(2)掌握k近邻算法解决回归问题的基本原理(3)了解k近邻算法的常见问题及解决方法(4)掌握k近邻算法的Skleam实现方法(5)能够使用k近邻算法训练分类模型(6)能够使用k近邻算法训练回归模型(7)能够编写程序,寻找最优的k值素质目标:了解科技前沿新应用,开阔视野,抓住机遇,展现新作为增强创新意识,培养探究精神教学重难点教学重点:k近邻算法解决分类问题和回归问题的基本原理,k近邻算法的常见问题及解决方法,k近邻算法的Sklearn实现方法教学难点:使用k近邻算法训练分类模
2、型和回归模型;编写程序,寻找最优的k值教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务,扫码观看“k近邻算法基本原理”视频,并思考以下问题:k近邻算法可以解决哪两类问题?解决的原理是什么?【学生】完成课前任务考勤【教师】使用APP迸行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:k近邻算法解决分类问题的基本原理曷十么?【学生】思考、举手回答传授新知【教师】通过学生的回答引入要讲的知识,介绍k近邻算法的基本原理、k近邻
3、算法的Sklearn实现等知识4.1 k近邻算法的基本原理k近邻算法(k-NearestNeighbor,kNN)由科弗和哈特提出,是机器学习中最简单也是应用最广泛的算法之一,它根据距离函数计算待测样本与所在特征空间中各个样本的距离,找到距离待测样本最近的k个样本,依此判定待测样本属于某类或用于回归计算。4.1.1 k近邻算法的原理分析1.k近邻算法解决分类问题的原理k近邻算法解决分类问题的原理是给定一个训练数据集,对新输入的样本,在训练数据集中找到与该样本距离最邻近的k个样本(也就是k个邻居),若这k个样本中多数属于某个类别,就把该输入样本划分为这个类别。要寻找与新输入样本最邻近的k个样本,
4、需要计算两点之间的距离,此时,可使用欧式距离进行计算.假设两个点的坐标分别为D和为),则这两点之间的欧式距离公式为=J(2%)2+(%一)?【教师】通过多媒体展示“k近邻算法解决分类问题”图片(详见教材),并介绍相关知识例如有两类不同的样本数据Dl和D2,Dl用小正方形表示,D2用实圆表示,小三角形表示新输入的未知类别样本。现在要对新样本进行分类,判断它属于Dl还是D2k近邻分类的过程:先主观设置k的值,假设k的值为5,然后通过距离计算找出与新样本距离最近的5个样本点,从图4-1中可以看出,这5个近邻点中有4个属于D2类,1个属于Dl类,从而可判定新样本属于D2类。2.k近邻算法解决回归问题的
5、原理回归问题研究的是一组变量与另一组变量之间的关系,其预测结果是连续的数值。使用k近邻算法解决回归问题时,仍然需要计算待测样本与所在特征空间中每个样本的距离,基于计算结果,找到与待测样本最邻近的k个样本,通过对这k个样本的某个值(如平均值)进行统计,依据各个待测样本的统计值画出回归曲线,进而预测新样本的值。【教师】通过多媒体展示“k近邻算法解决回归问题”图片(详见教材),并介绍相关知识在研究二手房房价与面积之间关系的实例中,使用k近邻算法建立模型。使用k近邻算法建立回归模型的过程:先主观设置k的值,假设k的值为5,通过计算找到所在特征空间中与待测样本距离最近的5个样本,然后计算这5个样本的某个
6、统计值(如平均值),将这个值作为待测样本的预测值,依据各个样本的预测值得到回归曲线。4.1.2k近邻算法的常见问题及解决方法k近邻算法通常用于光学字符识SU(opticalcharacterrecognition,OCR)系统、电商平台用户分类、银行数据预测客户行为等领域。在实际应用中,k近邻算法可能会遇到以下几个需要解决的问题。1 .样本不平衡对算法的影响k近邻算法解决分类问题时,经常会遇到这样的问题:当样本分布不平衡时(即数据集中一个类的样本容量很大,而其他类的样本容量很小),很可能会出现对新样本的预测不准确的情况。因为样本分布不均匀,当输入一个新样本时,该样本的k个邻居中大数量类的样本占
7、多数,很可能将新样本预测为大数量的样本类型,导致预测误差。新样本应属于Dl类,但是应用k近邻算法会将其错误地划分为D2类。【教师】通过多媒体展示“样本不平衡时k近邻算法的预测效果”图片(详见教材),并介绍相关知识对于这类问题,可以采用对近邻点赋权值的方法改进,即与该样本距离小的邻居权值大,与该样本距离大的邻居权值小.由此,将距离远近的因素也考虑在内,避免了因某个类别样本的容量过大而导致误判的情况。2 .k的取值对算法的影响【教师】通过多媒体展示“k值与预测误差率的关系”图片(详见教材),并介绍相关知识在k近邻算法中,k值是主观设定的,但人为设定k值是不科学的,会影响模型的性能。一般情况下,k值
8、与预测误差率的关系如图4-4所示。即随着k值的增大,误差率先降彳氐后增高。这很好理解,在一定范围内,k值越大,周围可以借鉴的样本就越多,预测误差率就会第氐;但是当k值非常大时,几乎每个样本都变成了待测样本的邻居,预测误差率肯定就会增高.例如,训练集中共有30个样本,当k值增大到30时,k近邻算法基本上就没有意义了.要选出最优的k值,需要分别尝试不同k值下的预测效果。在Skleam中,可使用交叉验证法或网格搜索法确定k的取值。【教师】讲解“素养之窗”的内容(详见教材),引导学生了解中国科技对世界的贡献4.2k近邻算法的SkIeanl实现4.2.1 Sklearn中的k近邻模块【教师】组织学生扫码
9、现看“KD树算法”的视频(详见教材),并进行讲解Skleam的neighbors模块提供了KNeighborsClassifier和KNeighborsRegressor类,分别用于实现k近邻分类和回归算法.在Sklearn中,可通过下面语句导入k近邻算法模块。fromsklearn.neighborsimportKNeighborsClassifier#导入k近邻分类模块fromsklearn.neighborsimportKNeighborsRegressor#导入k近邻回归模块KNeighborsClassifier和KNeighborsRegressor类都有如下几个参数。(1)参数n
10、.neighbors用来指定k近邻算法中的k值,该参数必须指定.(2)参数weights用于指定权重,其取值有uniform,distance与自定义函数3种:uniform表示不管近邻点远近,权重值都一样,这是最普通的k近邻算法;distance表示权重和距离成反比,即距离预测目标越近权重值越大:自定义函数表示用户可以自定义一个函数,根据输入的坐标值返回对应的权重值。(3)参数algorithm用来设置k近邻模型使用的算法,其取值有brutexkdjreesbalLtree与auto:brute表示直接计算所有距离再排序;kd_tree表示使用kd树实现k近邻算法;ball.tree表示使用
11、球树实现k近邻算法;auto为默认参数,表示自动选择合适的方法构建模型。4.2.2k近邻算法的应用举例【例4-1】某学校话剧社团要招收新人,发出招新通知后,报名的学生非常多。于是,话剧社团决定组织一场个人比赛,比赛分为两个项目一表演和台词。表演项目得分用x,表示,台词项目得分用表示,最终成绩如表4-2所示(表中y的取值,】表示能进入话剧社团,0表示不能进入话剧社团),使用k近邻算法建立模型,判断最后一个学生(=55,A2=65)是否能够进入该话剧社团。【教师】通过多媒体展示“话剧社团比赛成绩数据集”表格,并介绍相关知识定最优的k值。在Sklearn中,可以使用交叉验证法得到最佳的k值。【参考代
12、码】#导入需要的模块importma(plotlib.pyplotaspitimportnumpyasnpfromskleam.neighborsimportKNeighborsClassifierfromSkleam.HiodeLseleciionimporttrain_test_splitfromsklearn.model_selectionimportcross_val_score#导入交叉验证模块x=np.airay(19,30,30,40,39,47,40,52,47,50,50,55,60,60,62,65,73,70,75,82,77,85,90,95,92,90)y=np.ar
13、ray(0,0.0,0,0,0,1,1,1,1.1.1.1)x_train.x_iest,yjrain,y_test=irain_iest_spli(x,y,test_size=0.3,random_s(a(e=0)#k取不同值的情况下,模型的预测误差率计算k_range=range(2,11)峻置k值的取值范围#保存预测误差率的数组#交叉验证中,cv参数决定数据集划分k-error=forkink-range:model=KNeighborsClassifier(n_neighbors=k)scores=cross_val_score(model,x,y,cv=5,scoring=accur
14、acy,)比例,这里的训练集与测试集的比例是5:1k-error.append(1-scores.mean()#画图,X轴表示k的取值,y轴表示预测误差率plt.rcParamsfbnt.sans-serifJ-Siniheiplt.plot(k_range,k_error,r-)plt.xlabel(k的取值lt.ylabel(预测误差率)pl(.show()【运行结果】程序运行结果如下图所示。可见,k的取值为5或7时,模型的预测误差率最低。下面将选择这两个值作为k值,训练模型。O. IO-0.05- 2345678910k的取值355 0 5 2241 0.60. 给糊些房K(2)当k值为
15、5或7时,使用k近邻算法分别训练模型,并对新样本进行预测。【参考代码】#k=5与k=7时,分别训练模型model1=KNeighborsClassifier(三)#k=5时,建立模型model1.fit(x_train,y_train)model2=KNeighborsClassifier(7)#k=7时,建立模型mode!2.fit(x_train,y_train)除别使用两个模型预测新样本Pred1=model1.predict(55,65)pred2=model2.predict(55.65)print(k=5时,预测样本的分类结果为二PredI)print(k=7时,预测样本的分类结果为”,pred2)【运行结果】程序运行结果如图所示。可见,k=5与4=7时,两个模型的分类结果都是O,即最后Ti学生(X=55,毛=65)不能进入该话剧社团。k=5时,预测样本的分类结果为0k=7时,预测样本的分类结果为0【例4-2表4-3是某班级学生身高和体重的数据集,表中最后一名学生只有身高信息,体重信息丢