《《机器学习基础及应用》教案第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时,预测样本的分类结果
16、为”,pred2)【运行结果】程序运行结果如图所示。可见,k=5与4=7时,两个模型的分类结果都是O,即最后Ti学生(X=55,毛=65)不能进入该话剧社团。k=5时,预测样本的分类结果为0k=7时,预测样本的分类结果为0【例4-2表4-3是某班级学生身高和体重的数据集,表中最后一名学生只有身高信息,体重信息丢失.要求使用k近邻算法建立模型,预测最后一名学生(身高:173Cm)的体重。(本实例只用于学习,不代表实际值)表4-3学生身高与体重数据集学生身高/(Cm)体重/(kg)学生身高/(cm)体重/(kg)1182113715872217810581544531708691494941688
17、3101444351658611173?616274【程序分析】(1)题目要求预测身高为173Cm学生的体重,这是一个回归问题,使用k近邻算法建立模型,需要先确定最优的k值。在Sklearn中,可以测试不同k值下,模型的预测准确率,从而找到最优的k值。【参考代码】# 导入需要的模块importmatplotlib.pyplotaspitimportnumpyasnpfromsklearn.neighborsimportKNeighborsRegressorfromsklearn.model_selectionimporttrain_test_split# 数据处理x=np.array(l82,
18、(l78,I701,168,l65,162458,(154,149,144)y=np.array(l13,IO5486,83,86,74,72,45,49,43)x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=0)# k取不同值的情况下,模型的预测误差率计算k-range=range(2,8)#设置k值的取值范围k-error=#保存预测误差率的数组forkink_range:model=KNeighborsRegresso(n-neighbors=k)model.fit(x_train
19、,y_train)scores=model.score(x_test,y_test)k-error.append(1-scores)# 画图,x轴表示k的取值,y轴表示预测误差率plt.rcParamsfont.sans-serif=Simheiplt.plot(k_range,k_error,r-)plt.xlabel(k的取值)plt.ykbelC预测误差率,)plt.show()【运行结果】程序运行结果如图所示.可见,k的取值为3时,模型的预测误差率最低。下面将选择这个值作为k值,训练模型。招捌曜2345(k的取值(2)当k值为3时,使用k近邻算法训练模型,并画出回归曲线图。【参考代码】
20、#建立模型,训I练模型健立模型的Il练模型#图形横轴的标签名称model=KNeighborsRegressor(3)model.fit(x_train,y_train)plt.xlabel(身高cm)PlhyIabdC体重kg)#图形纵轴的标签名称pit.rcParamsfont.sans-serifJ-Simhei#中文文字设置为黑体ptaxis(140,190,40,140)畋置图像横轴与纵轴的最大值与最小值#绘制并显示图形plt.scatter(x,y,s=60,c=,k,marker=o)制散点图pll.plol(x,model.predici(x),r-)#绘制曲线pl(.show
21、()【运行结果】程序运行结果如图所示。140120-60-4014015016017018019C身高/cm一80(3)对新样本进行预测。【参考代码】pred=model.predict(173)Prin1(身高173cm的学生体重预测为,red)【运行结果】程序运行结果如图所示。即最后一名学生的体重约为Iookg。身高173Cm的学生体重顼测为100.33333333【学生】聆听、思考、理解、记录课堂实践【教师】介绍“k近邻算法实现葡萄酒的分类”的步骤,安排学生扫描微课二维码观看视频”数据准备”数据清洗“数据标准化处理”k值的选择和“训练与评估模型“(详见教材),并进彳方并解和演示1 .数据
22、准备步骤I新建两个JUPyterNotebOok文档,分别命名为,item4-ss1-y.ipynbw和witem4-ss2-y.ipynbM,Hitem4-ssl-y.ipynbH用预处理,Hitem4-ss2-y.ipynbM用来训练模型。步骤2在,item4-ssl-y.ipynb,文档中编写数据预处理程序(详见教材)2 .数据清洗步骤1导入Ma(plotlib库,为画箱形图做准备步骤2使用plot。函数画出箱形图,检查数据集的每个特征中是否存在异常值步骤3查找数据集中的异常数据,并将异常数据显示出来(详见教材)3 .数据标准化处理步骤【在item4-ss2-yipynb文档中编写训练模
23、型程序步骤2使用PandaS读取修正后的数据步骤3提取数据集的特征变量与标签,分别存储在data与target中(详见教材)4 .k值的选择步骤I导入需要的库步骤2将特征变量与标签分别赋值给X和y,并将数据集拆分为训练集与测试集步骤3测试k取不同值的情况下,模型的预测误差率(详见教材)5 .训练与评估模型步骤I导入模型预测准确率评估模块步骤2定义k近邻模型,k取值为9步骤3使用accuracyCoreO函数对模型进行评1,输出模型的预测准确率(详见教材)【学生】参照教师的演示进行操作,如遇问题可询问老师【教师】巡堂辅导,及时解决学生遇到的问翘课堂小结【教师】简要总结本节课的要点k近邻算法的基本原理k近邻算法的Skleam实现k近邻算法实现葡萄酒的分类【学生】总结回顾知识点作业布置【教师】布置课后作业请根据课堂知识,完成本章项目实训和项目考核中与本次课程有关的题目.【学生】完成课后任务教学反思