《《机器学习基础及应用》教案第15课真假钞票鉴别.docx》由会员分享,可在线阅读,更多相关《《机器学习基础及应用》教案第15课真假钞票鉴别.docx(10页珍藏版)》请在三一办公上搜索。
1、课题搭建机器学习开发环境(二)课时2课时(90min)教学目标知识技能目标:(1)掌握机器学习项目的实施流程(2)掌握机器学习项目中数据导入、数据探索与数据可视化的处理方法(3)掌握逻辑回归、k近邻、高斯朴素贝叶斯、决策树、支持向量机、随机森林和神经网络算法的Skleam实现方法(4)能够针对特定数据集,选择合适的机器学习算法(5)能够使用逻辑回归、k近邻、高斯朴素贝叶斯、决策树、支持向量机、随机森林和神经网络算法训练模型(6)能够针对特定数据集,选择合适的机器学习算法素质目标:加强对时代发展的了解,提升工作能力、组织能力和创新能力.掌握新技术,努力成为集智能型、创造型、复合型和社会型等多种素
2、养于一体的全方位型人才教学重难点教学重点:机器学习项目的实施流程,逻辑回归、k近邻、高斯朴素贝叶斯、决策树、支持向量机、随机森林和神经网络算法的Sklearn实现方法教学睚点:能够针对特定数据集,选择合适的机器学习算法教学方法案例分析法、问答法、讨论法、i井授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务,请大家提前了解请查阅相关资料,了解什么是小波变换【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:真假钞票的鉴
3、别方法有哪些?【学生】思考、举用答传授新知【教师】通过学生的回答引入要讲的知识,介绍真假钞票的鉴别方法与操作步骤真假钞票的鉴别方法有很多,如借助放大镜观察钞票表面的线条清晰度、用手触摸钞票等,这些方法都需要积累一定的经验,对于不常与钞票打交道的人来说,很难实现。于是,小旌想运用科学的方法来解决此问题,他打算使用机器学习算法训练一个能够鉴别真假钞票的模型,然后使用该模型进行鉴别.小旌采用的数据集是钞票鉴别数据集(见本书配套素材,item11/data_banknote_authentication.txtM文件)该数据集共有1372条数据每条数据包含4个特征变量和1个类别标签。其中特征变量为va
4、riance,skewness,kurtosis和entropy(特征变量由真钞和假钞样本图片经小波变换提取得到),分别表示图片经小波变换后的方差、偏度(偏度用于统计数据偏斜方向和程度)、峰度(峰度用于描述概率密度分布曲线在平均值处峰值的高低)和烯(图片的平均信息量);类别标签表示钞票所属的类别,1表示真钞,0表示假钞,部分数据如表11-1所示。表11-1钞票鉴别瘫集(部分)varianceskewnesskurtosisentropyclass3.62168.6661-2.8073-0.4469904.54598.1674-2.4586-1.462i03.866-2.63831.92420.
5、1064503.45669.5228-4.0112-3.594400.32924-4.45524.5718-0.98880.0.406141.3492-1.4501-0.559491-1.3887-4.87736.47740.341791-3.7503-13.458617.5932-2.77711-3.5637-8382712393-1.28231-2.5419-0.658042.68421.19521按照项目要求,训练真假钞票鉴别模型的步骤分解如下。第1步:数据导入。使用PandaS读取钞票鉴别健并为孀集指定列名称,然后将数据集进行输出。第2步:数据探索。通过类别标签class对数据集进行分
6、组,得到真钞样本与假钞样本在数据集中的数目,然后对孀集中的数据进行统计,获取样本数量、样本均值、标准差、最小值、下四分位数、中位数、上四分位数和最大值等信息。第3步:数据可视化。首先,绘制直方图,显示样本数据各个特征的分布情况;然后,绘制箱形图,了解各特征数据的分散情况;最后,绘制散点图,探索样本数据两两特征之间的关系。第4步:算法评估。分别使用逻辑回归、k近邻、高斯朴素贝叶斯、决策树、支持向量机、随机森林和神经网络算法搭建模型,并使用交叉验证法评估每个模型的预测准确率。第5步:训练与评估模型。选择最优模型,使用训练集进行训练,然后使用测试集进行评估,并输出模型的评估报告。第6步:预测新数据。
7、使用训练完成的模型对新数据进行鉴别,并输出其鉴别结果。【学生】聆听、思考、理解、记录课堂讨论【教师】组织学生扫码观看”数据分析基本流程”视频,并以小组为单位讨论以下问题:(1)什么是雌分析?(2)请画出数据分析的流程图。【学生】扫码观看、分组讨论、回答问题课堂实践【教师】介绍真假钞票鉴别”项目的大概流程,安排学生扫描微课二维码依次观看视频“数据导入”数据探索”“数据可视化”“算法评估”“训练与评估模型”和“预测新数据“(详见教材),并进行洪解和演示1.数据导入步骤1导入Pandas库。步骤2读取钞票鉴别数据并为数据集指定列名称为variance,skewness,kurtosis,entrop
8、y和class步骤3输出钞票鉴别数据集。【指点迷津】开始编写程序前,须将本书配套素材iiemll/daia_banknoie_aulheniicaiion.txi文件复制到当前工作目录中,也可将数据文件放于其他盘,如果放于其他盘,使用PandaS读取数据文件时要指定路径。【参考代码】importpandasaspdnames=variance,skewness,kurtosis,entroy,.class,datasei=pd.read_csv(data_banknote_authentication.txt.delimiter=,names=names)Print(钞票鉴别数据集print(
9、dataset)2.数据探索步骤I通过类别标签class对放据集进行分组,得到真钞样本与假钞样本在数据集中的数目。【参考代码】print(dataset.groupby(class).size()#groupby()函数用于对数据进行分组,size()函数用于获取真钞样本与假钞样本在数据集中的数目【运行结果】程序运行结果如图所示.可见,数据集中0所代表的假钞样本数略多于1所代表的真钞样本数,数据分布基本处于均衡状态。class07621610dtype:int64【高手点拨】在很多实际的分类项目中,训练数据的分布是不均衡的(训练孀不均衡指训练集中从属于不同类别的样本数目相差很大),这会对训练结
10、果造成很大的影响.一般而言,若数据集中样本数据类别不均衡的比例超过1:4,则通过该数据集训练出的模型很可能无法满足预测准确性要求。针对这个问题,可采用如下解决方案:扩充数据集,增加小类样本的数量,如果数据获取有困难,可考虑更新数据集的采样规则,对小类样本进行过采样,对大类样本进行欠采样;增加人造数据,减少由训练数据不均衡带来的影响。步骤2使用describe。函数对数据集中的数据进行统计,获取样本数量、样本均值、标准差、最小值、下四分位数、中位数、上四分位数和最大值等信息。【参考代码】print(dataset.describe()【运行结果】程序运行结果如图所示。varianceskevne
11、sskurtosisentropyclasscount1372.0000001372.0000001372.0000001372.0000001372.000000mean0.4337351.9223531.397627-1.1916570.444606std2.8427635.8690474.3100302.1010130.497103min-7.042100-13.773100-5.286100-8.5482000.00000025%-1.773000-1.708200-1.574975-2.4134500.00000050%0.4961802.3196500.616630-0.58665
12、00.000000752.8214756.146253.1792500.3948101.000000max6.82480012.95160017.9274002.4495001.0000003.数据可视化数据可视化能够更直观地反映数据间的关联性与分布情况。可视化图形包含单变量图和多变量图,单变量图(主要包含直方图、柱状图和箱形图)能更好地展示样本中每个特征的属性;多变量图(主要包含折线图和散点图)能反映出样本数据两两特征之间的关系.步骤I绘制直方图,显示样本数据各个特征的分布情况。【参考代码】importma(plotlib.pyplotaspit#分别提取数据集中的特征变量和标签值data=
13、dataset.iloc(range(0,l372),range(0.4)Lvaluestarget=dataset.ilocrange(0.1372),range(4,5).values.reshape(1.1372)0names=Ivariance,skewness,kurtosis,entropy#绘制直方图plt.figure()#创建绘图对象fori,nameinenumerate(names):plt.subplot(2,2,i+l)plt.hist(data,i) plt.title(name) Pluighlayout() plt.show()#绘制直方图#调整图形布局【运行结
14、果】程序运行结果如图所示。可见,VarianCe特征近似高斯分布。varianceskewness200200-100oo-步骤2【参考代码】plt.figure()#创建绘图对象fori,nameinenumerae(names):plt.subplot(2,2,i+l)plt.boxplot(data|:,i,whis=4)#绘制箱形图plt.title(name)plt.tightjayout()#调整图形布局plt.show()【运行结果】程序运行结果如图所示。可见,数据集样本中4个特征属性的中位数均靠近零点,没有异常值出现。步骤3绘制散点图,探索样本数据两两特征之间的关系。【参考代码
15、】plt.figure()舱J建绘图对象foriinrange(4):forjinrange(4):plt.subplot(4.4,j+l) plt.scatter(data :.i ,data :,j ) pk.xlabel(namesj) plt.ylabel(namesi) plt.tightjayout() plt.show()#绘制散点图腿整图形布局【运彳福果】 程运彳谩果如图所示,4个特征属性之间存在明显的相互关系-5 0 5 variance-10 0 10 variance0 10 variance-5 0 variance)uueue SSUM es S-So 七 n*-5
16、0 kurtosis-5 0 entropy【指点迷津】散点图能够展示出变量之间的相互影响程度,若变量之间不存在相互关系,则散点图中的点将会呈现出随机分布的形式;若存在相互关系,则图中大部分的点会以某种趋势密集呈现。4.算法评估机器学习中有很多算法可用于分类模型的训练,但对于某一特定的数据集,选用哪种算法训练模型更适合需要进行探索。接下来,将选择逻辑回归、k近邻、高斯朴素贝叶斯、决策树、支持向量机、随机森林和神经网络这7种算法来搭建模型,探索哪种算法在钞票鉴别数据集中能达到最佳效果。步骤I导入上述7种算法的相应模块,为搭建模型做准备。步骤2导入train_test_split方法,粉嘘集拆分为
17、训练集与测试集。步骤3分别使用上述7种算法搭建模型,并将各个模型加入model列表中。【参考代码】#导入算法模块fromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegression#导入逻辑回归算法模块fromsklearn.neighborsimportKneighborsClassifier#导入k近邻分类算法模块fromsklearn.naive_bayesimportGaussianNB#导入高斯朴素贝叶斯算法模块fromsklearn.treeimportDe
18、cisionTreeClassifier#导入决策树分类算法模块fromsklearn.svmimportSVC#导入支持向量机分类模块fromsklearn.ensembleimportRandomForestClassifier#导入随机森林分类算法模块fromsklearn.neuralnetworkimportMLPClassifier#导入神经网络算法模块的斥分数据集x,y=data,targetx_train,x_test,y_train,y_test=train_test_split(x,y,IeSLSiZe=O2random_SIaIe=100)#搭建模型models=1.Rm
19、Odel=LogiStiCRegreSSiOn(SoIVer=Iiblinear)#搭建逻辑回归模型kNNmodel=KNeighborsClassifier()#搭建k近邻模型GNBmodel=GaussianNBO#搭建高斯朴素贝叶斯模型DTreemodel=DecisionTreeClassifier(random-state=1)#搭建决策树分类模型SVMmodel=SVC(gamma=auto,random-state=1)#搭建支持向量机分类模型RFmoiel=RandomFores(Classifier(n_estimaiors=10,random.state=1)#搭建随机森林
20、分类模型MLPmodel=MLPClassifier(hidden_layer_sizes=(5,5),random_state=l,max_iter=500)#搭建神经网络模型#将各个模型加入models中models.append(LRmode,LRmodel)models.append(kNNmode,kNNmodel)models.append(GNBmode,GNBmodel)models.append(DTreemode.DTreemodel)models.append(SVMmode,SVMmodel)models.append(RFmode,RFmodel)nodels.app
21、end(MLPmode,MLPmodel)步骤4使用交叉验证法约束模型的训练过程,并估计每个模型的预测准确率。本项目将采用IO折交叉验证训练模型,即将训练集分为10份,轮流使用其中的9份进行训练,1份进行验证,重复使用随机划分的样本进行10次训练与验证,将10次训练结果的均值作为最终模型的预测准确率。【指点迷津】在Slearn中,可使用InodcLseleciion模块中的Kfold(n-splits=10,random-state=100,ShUffle=TrUe)函数传入折数和随机种子实现交叉验证算法。其中,参数shuffle取值为TrUe时,表示打乱数据集的顺序,每次都以不同的顺序返回数
22、据。【参考代码】fromSkIearn.modeLSeleetionimportcross_val_scorefromSkIeam.ITiodeLseleclionimportKFoldforname,modelinmodels:kfold=KFold(n-splits=I(),random-state=I(X),Shuffle=True)#10折交叉验证cv_scores=cross_val_score(model,x_train,y_train,cv=kfbld,scoring=accuracy)print(%s的预测准确率为:%f%(name,cv-scores.mean()【运行结果】
23、程序运行结果如图所示。可见,支持向量机模型与神经网络模型的预测准确率最高,达到了1(X)%.1.RnIodeI的预则准确率为:0.990876kNNmodel的预刎准确率为:0.999091GNBmOdel的预测I准确率为:0.840409DTreemodel的颈测准确率为:0.982702SVMmodel的预测准确率为:1.000000RFmodel的预测准确率为:0.989066MLPmOdel的预测准确率为:1.0000005 .训练与评估模型步骤1训练支持向量机模型,并使用测试集对模型进行评估,输出其评估报告。【参考代码】相Il练与评估模型(支持向量机模型)fromSklearnjne
24、tricsimportclassification_reportSVMmodel=SVC(gamma=auto,random-state=1)SVMmodel.fit(x_train,y_train)#对模型进行评估,并输出评估报告pred=SVMmodel.predict(x_test)re=classification_report(y_test,pred)Prin4支持向量机模型评估报告:()print(re)【运行结果】程序运行结果如图所示。可见,支持向量机模型在测试集上的预测准确率能够达到100%.支持向里机模型评估报告:precisionrecallfl-scoresupport0
25、1.001.001.0016311.001.001.00112accuracy1.00275macroavg1.001.001.00275weightedavg1.001.001.00275步骤2训练神经网络模型,并使用测试集对模型进行评估,输出其评估报告。【参考代码】理Il练与评估模型(神经网络模型)MLPmodel=MLPClassifier(hidden_layer_sizes=(5,5),random_state=l,max_iter=500)MLPmodel.fit(x_train,y_train)#对模型进行评估,并输出评估报告pred=MLPmodel.predict(x_tes
26、t)re=classification_report(y_test,pred)prime神经网络模型评估报告:()print(re)【运行结果】程序运行结果如图H-9所示。可见,神经网络模型在测试集上的预测准确率也能够达到100%,但是与支持向量机模型相比较,神经网络模型的计算量更大,模型预测速度相对较慢。神经网络模组评估报告:precisionrecallfl-scoresupport01.001.001.0016311.001.001.00112accuracy1.00275*acroavg1.001.001.00275weightedavg1.001.001.002756 .预测新数据步
27、骤I数据准备。新数据为某钞票图片经小波变换后得到的健,其值为3.8216、5.6661、-2.7074和一0.46611。步骤2模型预测。分别使用训练完成的支持向量机模型与神经网络模型对新数据进行预测,并输出预测结果。【参考代码】x_new=3.8216,5.6661,-2.7074,-0.46611#支持向量机模型预测新数据SVMscore=SVMmodel.predict(xnew)ifSVMscore=O:Print(”支持向量机模型预测结果:该钞票是假钞”)else:Print(”期向量机模型预测结果:该钞票是真钞”)#神经网络模型预测新幡MLPscore=MLPmodel.predi
28、ct(x-new)ifMLPscore=O:Print(”神经网络模甄测结果:该钞票是假钞”)else:Print(”神经网络模型预测结果:该钞票是真钞”)【运行结果】程序运行结果如图II-IO所示。可见,两个模型对新数据的预测值是一致的,新数据所对应的钞票是假钞.支持向里机模型颈测结果:该钞票是假钞神经网络模型预测结果:该钞票是假钞【教师】讲解“素养之窗”的内容(详见教材),了解元宇宙的概念与发展趋势【学生】参照教师的演示进行操作,如遇问题可询问老师【教师】巡堂辅导,及时解决学生遇到的问题课堂小结【教师】简要总结本节课的要点真假钞票的鉴别方法与操作步骤【学生】总结回顾知识点作业布置【教师】布置课后作业请根据课堂知识,完成本章项目实训与项目考核中与本次课程有关的题目。【学生】完成课后任务教学反思