




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
理解机器学习的概念和目标了解机器学习的四个发展阶段了解机器学习涉及的行业领域机器学习常用方法了解常用的机器学习方法参考书目《机器学习技术任务驱动式教程》了解机器学习模块1机器学习技术考核方式1.平时表现(70%)
-考勤
-课堂提问
-课堂作业
-课后作业2.考试(30%)过程考核目录机器学习技术简介机器学习发展史机器学习应用领域机器学习常用方法Sklearn机器学习库小结习题一了解机器学习模块1机器学习技术机器学习简介机器学习(MachineLearning,ML)专门研究机器模拟或实现人类的行为,以获得新的知识或技能,并且能够优化现有的知识结果使之适应新的环境。模拟机器学习简介机器学习是将现实中的问题抽象为数学模型,利用历史数据对数据模型进行训练,然后基于数据模型对新数据进行求解,并将结果再转为现实问题的答案的过程。(1)现实问题抽象为数学问题;1机器学习的实现步骤(2)数据处理为要求的格式;(3)选择或创建模型;(4)模型训练及评估;(5)预测新的数据。机器学习简介主要步骤2机器学习的处理流程机器学习发展史探索期:20世纪50年代~60年代中叶1
第1/4阶段侧重于非符号的神经元模型探索,研究目标是自组织系统和自适应系统。主要研究方法是不断修改系统的控制参数以改进系统的执行能力,不涉及与具体任务有关的知识。塞缪尔的跳棋程序就是本阶段的典型例子。这个时期的机器学习方法取得的学习结果都很有限,远不能满足人们对机器学习系统的期望。我国研制出了数字识别学习机。机器学习发展史发展期:20世纪60年代中叶~70年代中叶2
第2/4阶段侧重于符号学习,研究目标是模拟人类的概念学习过程,并采用逻辑结构和图结构作为机器内部描述。机器学习采用符号来描述概念,并提出了关于学习概念的各种假设。代表性工作有温斯顿(Winston)的结构学习系统和海思(Hayes)等人的归纳学习系统。这类学习系统只能学习单一概念,不能投入实际应用。我国机器学习研究陷于停滞。机器学习发展史复兴期:20世纪70年代中叶~80年代中叶3
第3/4阶段机器学习的概念从单个到多个,机器学习过程建立在大规模的知识库上,实现知识强化学习。1980年,美国卡内基-梅隆大学(CMU)召开了第一届机器学习国际研讨会,标志机器学习研究走向繁荣。本阶段的代表性工作有莫斯托(Mostow)的指导性学习、莱纳特(Lenat)的数字概念发现程序、兰利(Langley)的BACON程序及其改进版本。20世纪70年代末,中国科学院自动化研究所进行质谱分析和模式文法推断研究,机器学习研究重新得到恢复。机器学习发展史最新阶段:80年代中叶~至今4第4/4阶段机器学习综合多门学课,进入最新阶段。机器学习已成为新的学课并在许多高校开设课程。结合各种学习方法,取长补短的集成学习系统研究正在兴起。机器学习与人工智能各种基础问题的统一性观点逐渐成型。机器学习方法的应用范围不断扩大,商业性应用层出不穷。机器学习研究已形成热潮,相关的学术活动空前活跃。机器学习应用领域通过探索和与环境交互来学习1
自动驾驶机器学习应用领域声音、图像经过模型识别后转换为文字、特征,推荐的商品也反映用户的习惯和兴趣。2
个性化推荐机器学习应用领域从已分类邮件建立模型,识别未知邮件3
垃圾邮件分类机器学习应用领域周期性识别课堂图片中的学生,显示实时考勤4
课堂考勤机器学习常见方法监督学习是机器学习中一种常用的学习方法,其训练样本中包含特征和标签。它利用一组已知标签的样本调整模型参数,使其达到所要求的性能,也称为监督训练或有教师学习。1
监督学习决策树K-最近邻贝叶斯分类回归支持向量机深度学习机器学习常见方法无监督学习中的训练样本没有对应的标签或目标值。这意味着无法提供训练数据,机器只能自行学习,而无需事先提供任何有关标签或目标的信息。预测结果是样本的分类。2
无监督学习K-均值最大期望机器学习常见方法强化学习的输出标签不是直接的是或否,而是一种奖惩机制。它描述和解决智能体(agent)在复杂不确定的环境(environment)下极大化奖励问题。3
强化学习策略优化Q-LearningMBMF机器学习常见方法深度学习、机器学习和人工智能之间关系4
机器学习所处位置Sklearn机器学习库2010年发布的Scikit-learn(又称为Sklearn)是机器学习领域非常热门的一个开源包,基本功能分为六大部分。Sklearn分类回归数据降维聚类模型选择数据预处理小结机器学习是人工智能的一个重要分支,也是机器获取智能的重要途经。机器学习处理对象既有类似二维表的结构化数据,也有文本、语音、图像等非结构化数据。监督学习的训练样本包含标签,而非监督学习的样本则没有标签。深度学习属于机器学习的一个分支,是通过深度网络模型自动提取特征的一类学习算法。Sklearn提供目前常用的机器学习算法接口。习题一一选择题1.下面()步骤不属于监督学习的流程。A.数据准备 B.模型训练C.模型评估 D.数据展示2.K-均值算法属于()。A.监督学习 B.无监督学习C.强化学习 D.深度学习3.下列表述中,不属于神经网络的组成部分的是()。A.输入层 B.输出层C.隐藏层 D.特征层习题一一选择题4.不属于监督学习的方法是()。A.K-最近邻 B.逻辑回归C.策略优化 D.决策树5.不属于集成学习的方法是()。A.投票法 B.K-均值C.Bagging D.AdaBoost习题一二填空题1.深度学习是()的一种,而()是实现人工智能的重要途经。2.在K-最近邻、逻辑回归、决策树、K-均值、支持向量机中,()属于无监督的机器学习方法。3.决策树模型容易产生一个过于复杂的模型。()、设置()或()是避免出现该问题的可行方法。习题一三思考题大数据的发展极大推动了深度学习的兴起。与机器学习相比,深度学习更依赖大量的训练数据,分析其内在原因。安装机器学习开发环境JupyterLab环境编程JupyterLab环境调试机器学习常用方法Markdown文件设计目录机器学习开发环境安装及使用参考书目《机器学习技术任务驱动式教程》模块2机器学习技术目录机器学习开发环境安装JupyterLab环境编程JupyterLab代码调试Markdown目录制作小结习题二机器学习开发环境安装及使用模块2机器学习技术Anaconda是一个基于Python的数据处理和科学计算平台,内置了200多个预先选择的软件包。常用的有:1
安装AnacondaCondaNumpyScipyPythonPandasMatplotlib机器学习开发环境安装机器学习开发环境安装1
安装Anaconda步骤1:进入Anaconda下载网站:https:///anaconda/archive/,下载Windows版本的Anaconda安装包,选择Anaconda3-2023.07-2-Windows-x86_64.exe。机器学习开发环境安装1
安装Anaconda步骤2:双击安装文件。机器学习开发环境安装1
安装Anaconda步骤3:点击“Next”按钮,进入下一步。机器学习开发环境安装1
安装Anaconda步骤4:点击“IAgree”按钮,进入下一步。机器学习开发环境安装1
安装Anaconda步骤5:选择“JustMe(recommended)”,点击“Next”按钮,进入下一步。选择安装路径,在后面设置系统路径时会用到安装路径。机器学习开发环境安装1
安装Anaconda步骤7:Anaconda程序开始安装。机器学习开发环境安装1
安装Anaconda步骤8:安装完成,点击“Next”按钮。机器学习开发环境安装1
安装Anaconda步骤9:提醒使用Anaconda云服务,点击“Next”按钮。机器学习开发环境安装1
安装Anaconda步骤10:不选择“LaunchAnacondaNavigator”和“GettingStartedwithAnacondaDistribution”选项,点击“Finish”按钮,完成安装。机器学习开发环境安装1
安装Anaconda步骤11:右键点击“我的电脑”,选择属性,选择高级系统设置,点击“环境变量”选项。机器学习开发环境安装1
安装Anaconda步骤12:选择系统变量里的“PATH”,点击编辑。机器学习开发环境安装1
安装Anaconda步骤13:点击新建按钮,添加3个Anaconda路径(%Anaconda安装路径%,%Anaconda安装路径%\Scripts,%Anaconda安装路径%\Library\bin)。2
安装JupyterLabJupyterLab是Jupyter的一个拓展,但JupyterLab提供了更好的用户体验。JupyterNotebookJupyterLab交互式模式编程1个浏览器窗口打开一个文件单元格(Cell)组织代码和文本支持Python、Julia、R扩展性较弱机器学习开发环境安装功能最丰富的版本;增加了1个浏览器窗口打开多个文件集成控制台、终端和其他的工具集连接GoogleDriver服务管理第三方插件机器学习开发环境安装2安装JupyterLab步骤1:打开Anaconda3->AnacondaPrompt。机器学习开发环境安装2安装JupyterLab步骤2:升级pip到最新版本。步骤3:创建Conda开发环境(比如jupyterlab)。步骤4:激活Conda开发环境。机器学习开发环境安装2安装JupyterLab步骤5:安装JupyterLab库。机器学习开发环境安装3
安装机器学习库步骤1:安装Scikit-learn库。Scikit-learnScikit-learn(以前称为Scikits.learn,也称为Sklearn)是针对Python编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括K-最近邻、回归、贝叶斯、支持向量机,K-均值等。Scikit-learn基于Numpy和SciPy等Python数值计算库,提供了高效的算法实现,官方文档齐全,更新及时,具有接口易用、算法全面等优点。机器学习开发环境安装3
安装机器学习库步骤2:安装Pandas库。PandasPandas是“Pythondataanalysis”的简写,衍生自计量经济学术语“paneldata”。Pandas的主要数据结构是Series(一维数据)与DataFrame(二维数据)。DataFrame是Series的容器,Series则是标量的容器。使用这种方式,可以在容器中以字典的形式插入或删除对象。基于这2种数据结构,Pandas适用于处理以下类型的数据:1)与SQL或Excel表类似的,含异构列的表格数据。2)有序和无序(非固定频率)的时间序列数据。3)带行列标签的矩阵数据,包括同构或异构型数据。4)任意其它形式的观测、统计数据集。机器学习开发环境安装3
安装机器学习库步骤3:安装Matplotlib库。MatplotlibMatplotlib是一个Python的绘图库,使用该工具可以将数据通过图表的形式更直观的呈现出来。通过Matplotlib,开发者仅需要几行代码,便可以生成线图、散点图、高线图、条形图、柱状图、3D图形、甚至是图形动画等。机器学习开发环境安装3
安装机器学习库步骤4:安装Seaborn库。SeabornSeaborn是基于Matplotlib的图形可视化Python包。它提供了一种高度交互式界面,便于用户做出各种有吸引力的统计图表。Seaborn是Matplotlib的补充。它在Matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,并且在大多数情况下Seaborn能做出很具有吸引力的图。同时它支持Numpy与Pandas数据结构,并兼容SciPy与Statsmodels等统计相关的库。机器学习开发环境安装3
安装机器学习库步骤5:安装Jieba库。JiebaJieba是优秀的中文分词第三方库。它可以进行简单分词、并行分词和命令行分词,还支持关键词提取、词性标注、词位置查询等功能。由于中文文本之间每个汉字都是连续书写的,自然语言处理(NaturalLanguageProcessing,NLP)需要通过特定的手段来获得其中的每个词组,这种手段叫做分词。Jieba库就是一款优秀的Python第三方中文分词库。此外,虽然它立足于Python,但同样支持其他语言和平台,诸如:C++、Go、R、Rust、Node.js、PHP、iOS、Android等。目前Jieba是最好的中文分词组件之一。机器学习开发环境安装3
安装机器学习库步骤6:安装PyTorch库。PytorchPyTorch是一种用于构建深度学习模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习库。它完全支持GPU,并且使用反向模式自动微分技术,因此可以动态修改计算图形。这使其成为快速实验和原型设计的常用选择。PyTorch是FacebookAIResearch和其他几个实验室团队的工作成果。该框架将Torch中高效而灵活的GPU加速后端库与直观的Python前端相结合,支持尽可能广泛的深度学习模型。PyTorch支持开发者使用熟悉的命令式编程方法,但仍可以输出到图形。它于2017年以开源形式发布,其Python根源使其深受机器学习开发者的喜爱。JupyterLab环境编程1
进入Jupyter环境步骤1:转换到机器学习开发环境(比如juptyerlab)。步骤2:切换到工作目录。步骤3:启动JupyterLab。JupyterLab环境编程2
编写程序步骤1:单击“Python3(ipykernel)”图标,新建一个Notebook。JupyterLab环境编程2
编写程序步骤2:手工选择单元类型“Markdown”,定义Markdown。这里的Markdown的作用类似于Python文件中的注释,解释下面代码的作用。步骤3:定义Code。依赖库导入importpandasaspdfromsklearnimportneighborsJupyterLab环境编程2
编写程序步骤4:定义Markdown。步骤5:定义Code。步骤6:定义Markdown。从文件读入数据到DataFrame对象url=“../data/film_stats.csv”data=pd.read_csv(url,header=0)查看头5条记录JupyterLab环境编程2
编写程序步骤7:定义Code。步骤8:定义Markdown。步骤9:定义Code。data.head()转换特征X和标签yX=data.iloc[:,0:2].valuesy=data.iloc[:,-1].valuesJupyterLab环境编程2
编写程序步骤10:定义Markdown。步骤11:定义Code。步骤12:定义Markdown。创建K-最近邻模型clf=neighbors.KNeighborsClassifier(3)训练模型JupyterLab环境编程2
编写程序步骤13:定义Code。步骤14:定义Markdown。步骤15:定义Code。clf=clf.fit(X,y)预测新数据的标签clf.predict([[18,20]])JupyterLab环境编程3
保存及运行程序步骤1:单击“Save”按钮,定义文件名字,然后单击“Rename”按钮,保存Notebook文件。JupyterLab环境编程3
保存及运行程序步骤2:选择Run->RunAllCells,最后一个Code单元输出样本[18,20]的预测结果。从上面的运行结果看出,样本[18,20]的预测标签为0。注意输入是一个2维矩阵,每行对应1个样本,行的列代表样本的特征。输出也是一个列表,元素顺序对应行的顺序。JupyterLab代码调试程序调试是程序员主要工作之一,找到出错的位置和原因有时候并不容易。例如,步骤8中索引“-1”错误的写成“1”:那么最后一行Code单元的运行结果是:输出的标签既不是0也不是1,不在标签的取值范围。在JupyterLab环境中,遇到运行错误时,开发者需要找到错误发生的位置以及原因。JupyterLab代码调试1
打印变量值找到相关变量的引用位置,输出变量值。比如输出变量y的值。修改索引后,输出合法的预测值。从输出结果看出,变量y的值不合法。JupyterLab代码调试2
JupyterLabDebugger调试步骤1:打开Debugger开关。JupyterLab代码调试2
JupyterLabDebugger调试Debugger开关打开后,右边侧边栏有变量列表,可以查看变量值。JupyterLab代码调试2
JupyterLabDebugger调试步骤2:在相关变量引用位置的周围设置断点。比如在第5个Cell设置断点。需要提醒的是,断点只能设置在Code单元,不能设置在Markdown单元。JupyterLab代码调试2
JupyterLabDebugger调试步骤3:选择Run->RunAllCells,程序运行到设置断点的位置。JupyterLab代码调试2
JupyterLabDebugger调试步骤4:在VARIABLES视图选中变量y,点击鼠标右键选择“RenderVariable”菜单,显示变量y的值。JupyterLab代码调试2
JupyterLabDebugger调试步骤4输出结果:JupyterLab代码调试2
JupyterLabDebugger调试从变量y的值就可以看出错误原因,单击停止按钮,结束程序运行。JupyterLab代码调试2
JupyterLabDebugger调试步骤5:纠正错误的代码,删除断点。步骤6:重新选择Run->RunAllCells,输出正确的结果。Markdown目录制作Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。它由JohnGruber于2004年创建,如今已成为世界上最受欢迎的标记语言之一。Markdown语言支持标题、段落、列表、区块、代码、链接、图片、表格等标记,目标是成为一种适用于网络的书写语言。JupyterLab支持Markdown文件,编写的Markdown文件后缀为.md。下面以Markdown制作目录为例,介绍Markdown文件的使用过程。Markdown目录制作步骤1:新建一个MarkdownFile。Markdown目录制作步骤2:编辑Markdown文件。行首插入1到3个#,对应到标题1到3阶。Markdown目录制作步骤3:单击“ShowMarkdownPreview”菜单,浏览Markdown文件的输出格式。Markdown目录制作在源代码窗口的右侧出现浏览窗口。小结Conda环境中使用pip工具安装JupyterLab机器学习开发环境。Jupyter注释(Markdown)、代码、运行结果在一个窗口显示。JupyterLab程序调试可以通过打印输出方式,也可以使用自身的Debugger工具。md格式的文件支持Markdown语法,输出类似HTML的丰富显示效果。习题二一选择题1.Anaconda指的是一个开源的Python发行版本,不包含()。A.Conda B.Python C.Numpy D.Scikit-learn2.JupyterLab是()的一个拓展,提供了更好的用户体验。A.Lab B.Jupyter C.Python D.Numpy3.下面说法正确的是()。A.Jupyter代码和运行结果显示在不同区域。B.Jupyter代码和运行结果显示在相同区域。C.JupyterDebugger设置断点在程序的任何位置。D.md文件和Word都是所见即所得。习题一一选择题4.JupyterLab编写的Markdown文件后缀为()。A..doc B..markdown C..md D..docx。5.JupyterLab不支持()。A.编写Notebook。B.操作终端。C.编辑Markdown文本。D.Word。习题一二填空题1.PyTorch是一种用于构建()模型的功能完备框架,是一种通常用于图像识别和语言处理等应用程序的机器学习库。2.JupyterDebugger通过()方式调试代码,可以设置断点、查看变量信息等。3.Markdown语言支持()、段落、列表、区块、代码、链接、图片、表格等格式。习题一三
操作题在自己的个人电脑上安装机器学习开发环境,编写和运行2.2节的first_notebook程序。数据观察数据转换KNN模型训练模型保存KNN模型预测参考书目《机器学习技术任务驱动式教程》基于K-最近邻的分类预测模块3机器学习技术目录电影类型预测鸢尾花种类预测葡萄酒品种预测小结习题三基于K-最近邻的分类预测模块3机器学习技术数据集film.csv记录6部电影的肢体冲突镜头数、拥抱镜头数,以及电影评估类型。详细的字段描述见下表。1.1任务描述1电影类型预测有一部未看过的电影【肢体冲突镜头=18、拥抱镜头=90】,预测该电影是爱情片还是动作片。任务目标字段字段类型允许为空标签?例子电影名称string否否CaliforniaMan肢体冲突镜头Int否否3拥抱镜头int否否81影片类型int否是{1:爱情片,0:动作片}1电影类型预测1.2
任务分解import方式引入依赖的模块检查样本分布、特征/标签类型、空值、重复行、属性相互关系可视化样本的空间分布、待测试样本和训练样本的空间关系依赖库导入数据探查数据可视化从探查数据内容开始,经过分析数据分布,使用KNN模型找到标签和数据特征之间的关系,然后利用KNN模型预测未看过的电影。1电影类型预测1.2
任务分解转换Pandas类型到Numpy类型在已知样本上训练KNN模型用训练的模型预测电影【肢体冲突镜头=18、拥抱镜头为90】的类型数据转换模型训练预测接上1电影类型预测1.3
任务实施使用Python编程时,没必要实现所有的功能,可以借助Python自身的标准库或者其他人提供的第三方库。比如,本任务会使用到KNeighborsClassifier类,它位于sklearn.neighbors模块中,只需要将此模块导入到Jupyter程序中,就可以调用此函数。fromsklearn.neighborsimportKNeighborsClassifier1电影类型预测1.3
任务实施1.3.1依赖库导入步骤1:定义2级标题。##<fontcolor="black">依赖库导入</font>按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤2:导入依赖库。importpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearn.neighborsimportKNeighborsClassifier按“SHIFT+Enter”,检查输出无异常。1电影类型预测1.3
任务实施1.3.2数据探查文件读入DataFrame对象后,需要观察不同标签的数据特征。步骤1:定义2级标题。##<fontcolor="black">数据探查</font>按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤2:对齐列名和数据。pd.set_option('display.unicode.ambiguous_as_wide',True)pd.set_option('display.unicode.east_asian_width',True)按“SHIFT+Enter”,检查输出无异常。1电影类型预测1.3
任务实施步骤3:读入数据集文件到DataFrame对象。url=“../data/film.csv”df=pd.read_csv(url,names=[“电影名称”,“电影类型”,“肢体冲突镜头”,“拥抱镜头"])按“SHIFT+Enter”,检查输出无异常。1.3
CSVCSV(逗号分隔值文件格式)逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。建议使用EXCEL或Notepad打开和保存CSV文件。1电影类型预测1.3
任务实施步骤4:显示爱情片样本。print("爱情片数据:\n",df[df["电影类型"]==1])按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤5:显示动作片样本。print("动作片数据:\n",df[df["电影类型"]==0])按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施1.3.3数据可视化在3个特征中,“电影名称”内容是文本,无法映射到枚举类型,因而不予考虑,只需要观察“肢体冲突镜头”、“拥抱镜头”2个特征与标签“电影类型”的关系。步骤1:定义2级标题。##<fontcolor="black">数据可视化</font>按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False按“SHIFT+Enter”,检查输出无异常1电影类型预测1.3
任务实施步骤3:图形化训练样本和待测样本的空间分布。testdata=[18,90]#测试样本plt.figure(figsize=(4,4),dpi=80)plt.scatter(df[‘肢体冲突镜头’][0:3],df[‘拥抱镜头'][0:3],marker='o',color='g',s=70,label='爱情片')plt.scatter(df[‘肢体冲突镜头’][3:6],df[‘拥抱镜头'][3:6],marker='o',color='w',edgecolors='g',s=70,label='动作片')1电影类型预测1.3
任务实施plt.scatter(testdata[:1],testdata[1:],marker='.',color='b',s=120,label='未知样本')plt.text(testdata[:1][0]+8,testdata[1:][0]+3,"k=3")plt.arrow(testdata[:1][0]+1,testdata[1:][0]+1,14,14,width=0.1,fc="b",head_width=1.5)draw_circle=plt.Circle((testdata[:1],testdata[1:]),24,fill=False,color='g')接上1电影类型预测1.3
任务实施plt.gcf().gca().add_artist(draw_circle)plt.xlabel(‘肢体冲突镜头')plt.ylabel(‘拥抱镜头')plt.legend(loc=1)plt.xlim(-20,120)plt.ylim(-20,120)接上1电影类型预测1.3
任务实施运行结果如下:从左图看出,如果根据最近3个邻居的标签判断未知样本的标签,那么可以预测未知样本的电影类型是爱情片,这就是K-最近邻算法的核心思想。K-最近邻K-最近邻(K-nearestneighbor,KNN)的核心思想:假若一个特征空间中大多数的样本属于某一个类别,则在这个特征空间中,K个最相似的样本也属于这个类别。该模型可用于待分样本所属的类别判定或简单回归模型的计算,其核心关注点为测试点个数(K)与距离计算模型的确定。Sklearn库的KneighborsClassifier类实现了KNN模型,定义如下:特别注意的是,参数n_neighbors会对分类性能有较大影响,往往需要多次实验找到最优值或次优值。1电影类型预测1.3
任务实施1.3.4数据转换步骤1:定义2级标题。##<fontcolor="black">数据转换</font>按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤2:转换特征和标签到Numpy类型。X=df[[“肢体冲突镜头”,“拥抱镜头"]].valuesy=df["电影类型"].values按“SHIFT+Enter”,检查输出无异常1电影类型预测1.3
任务实施1.3.5模型训练构建KNN模型后,在特征X和标签y上训练。步骤1:定义2级标题。##<fontcolor="black">模型训练</font>按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤2:建立KNN模型。knn_model=KNeighborsClassifier(n_neighbors=3)按“SHIFT+Enter”,输出无异常步骤3:训练KNN模型。knn_model.fit(X,y)按“SHIFT+Enter”,输出无异常1电影类型预测1.3
任务实施1.3.6预测基于训练好的KNN模型,预测样本【肢体冲突镜头=18,拥抱镜头=90】的电影类型。步骤1:定义2级标题。##<fontcolor="black">预测</font>按“SHIFT+Enter”,运行结果如下:1电影类型预测1.3
任务实施步骤2:定义索引对应标签值的标签列表。label_names=["动作片","爱情片"]步骤3:预测未知样本的标签索引。y_pred=knn_model.predict([testdata])1电影类型预测1.3
任务实施步骤4:打印标签值。label_names[y_pred[0]]按“SHIFT+Enter”,运行结果如下:数据集iris.csv源于UCI平台,由Fisher在1936年收集整理,由3种不同类型的鸢尾花的50条样本构成。2.1任务描述2
鸢尾花种类预测每行数据包含4个特征:Sepal.Length(花萼长度)、Sepal.Width(花萼宽度)、Petal.Length(花瓣长度)和Petal.Width(花瓣宽度),单位是cm;以及3个种类:IrisSetosa(山鸢尾)、IrisVersicolour(杂色鸢尾)和IrisVirginica(维吉尼亚鸢尾)。详细的字段描述见下表。2.1任务描述2
鸢尾花种类预测1)建立KNN分类模型并评估精度。2)预测鸢尾花样本【花萼长度=5.2,花萼宽度=2.6,花瓣长度=3.8,花瓣宽度=1.3】的种类。任务目标字段字段类型允许为空标签?例子花萼长度float否否6.4花萼宽度float否否2.8花瓣长度float否否5.6花瓣宽度float否否2.2种类int否是{0:Setosa,1:Versicolor,2:Virginica}注:第一行不是列标题,也不是样本,读入时跳过2
鸢尾花种类预测2.2
任务分解import方式引入依赖的模块检查样本分布、特征/标签类型、空值、重复行、属性相互关系箱型图可视化样本的空间分布依赖库导入数据探查数据可视化观察数据后,按照训练集和验证集4:1比例切分数据集,然后保存训练好的KNN模型到硬盘,使用模型预测未知样本的标签。2
鸢尾花种类预测2.2
任务分解转换Pandas类型到Numpy类型,转换特征到(0,1)正态分布在训练集上训练KNN模型,并在验证集上评估模型精度用训练的模型预测标签未知的样本数据转换模型训练预测接上模型持久化模型保存到硬盘以待将来使用2
鸢尾花种类预测2.3
任务实施2.3.1依赖库导入步骤1:定义2级标题。##<fontcolor="black">依赖库导入</font>按“SHIFT+Enter”,运行结果如下:2
鸢尾花种类预测2.3
任务实施步骤2:导入依赖库。importpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearnimportneighborsfromsklearnimportmodel_selectionfromsklearnimportpreprocessingimportjoblibimportnumpyasnp2
鸢尾花种类预测2.3
任务实施2.3.2数据探查步骤1:定义2级标题。##<fontcolor="black">数据探查</font>按“SHIFT+Enter”,运行结果如下:2
鸢尾花种类预测2.3
任务实施步骤2:读入数据集文件到DataFrame对象。names=['花萼长度','花萼宽度','花瓣长度','花瓣宽度','鸢尾花类型']dataset=pd.read_csv("../data/iris.csv",names=names,skiprows=1)按“SHIFT+Enter”,检查输出无异常。2
鸢尾花种类预测2.3
任务实施步骤3:查看样本特征的统计值。dataset.iloc[:,0:4].describe()按“SHIFT+Enter”,运行结果如下:从特征统计值看出,“花萼长度”和“花瓣宽度”的取值范围与其他2个特征有着不同的取值范围和方差。DataFrame.describe()2
鸢尾花种类预测2.3
任务实施2.3.3数据可视化步骤1:定义2级标题。##<fontcolor="black">数据可视化</font>按“SHIFT+Enter”,运行结果如下:2
鸢尾花种类预测2.3
任务实施步骤2:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False按“SHIFT+Enter”,检查输出无异常。2
鸢尾花种类预测2.3
任务实施步骤3:箱型图显示特征数据分布。dataset.iloc[:,0:4].plot(kind='box',subplots=True,layout=(4,4),sharex=False,sharey=False)按“SHIFT+Enter”,运行结果如下:四个特征有着不同的中心值,方差也不相同,需要通过数据转换映射特征到相同的数据分布。箱线图箱线图是一种基于五位数摘要(LW(最小值),下四分位数(Q1),中位数(Q2),上四分位数(Q3)和最大值(UW))显示数据分布的标准化方法。例如,有列表(1,3,5,6,10,19)的箱型图。2
鸢尾花种类预测2.3
任务实施2.3.4数据转换步骤1:定义2级标题。##<fontcolor="black">数据转换</font>按“SHIFT+Enter”,运行结果如下:2
鸢尾花种类预测2.3
任务实施步骤2:从DataFrame对象中抽取特征和标签。X=dataset.iloc[:,0:4].valuesy=dataset.iloc[:,4].values按“SHIFT+Enter”,检查输出无异常。2
鸢尾花种类预测2.3
任务实施步骤3:缩放特征服从正态分布。scaler=preprocessing.StandardScaler()norm_X=scaler.fit_transform(X)norm_X[0:5,...]按“SHIFT+Enter”,运行结果如下:从转换后的数据来看,每个特征已经服从(0,1)正态分布。StandardScalerK-最近邻需要计算样本之间的距离。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。StandardScaler类具有归一化功能,定义如下:classsklearn.preprocessing.StandardScaler(copy,**kargs)参数copy:bool,默认值True
如果False,直接特征缩放2
鸢尾花种类预测2.3
任务实施步骤4:切分出训练集和验证集。X_train,X_val,y_train,y_val=model_selection.train_test_split(norm_X,y,random_state=4,test_size=0.2)f'训练集样本个数:{len(X_train)}',f'验证集样本个数:{len(X_val)}'按“SHIFT+Enter”,运行结果如下:训练集、验证集、测试集、超参数训练集、验证集、测试集、超参数为了建立机器学习模型并知道模型性能,数据集可以分为三部分:训练集、验证集、测试集。训练集(trainset):用于训练机器学习模型。验证集(validationset):验证模型性能以调整超参数。测试集(testset):验证模型在未标注数据上的性能。超参数(hyperparameters):根据经验进行设定的参数,如KneighborsClassifier中的n_neighbors。2
鸢尾花种类预测2.3
任务实施2.3.5模型训练步骤1:定义2级标题。##<fontcolor="black">模型训练</font>按“SHIFT+Enter”,运行结果如下:2鸢尾花种类预测2.3
任务实施步骤2:建立KNN模型。knn_model=neighbors.KNeighborsClassifier(n_neighbors=5)按“SHIFT+Enter”,检查输出无异常。步骤3:训练KNN模型。knn_model.fit(X_train,y_train)按“SHIFT+Enter”,检查输出无异常。2
鸢尾花种类预测2.3
任务实施步骤4:在验证集上评估模型。acc=knn_model.score(X_val,y_val)f"模型评估准确率:{acc:0.4f}"按“SHIFT+Enter”,运行结果如下:2
鸢尾花种类预测2.3
任务实施2.3.6模型持久化许多大型模型训练往往需要花费大量时间,每次使用模型前重新训练并不现实。在实际应用中,经常把训练好的模型保存到文件中,使用时再加载内存。步骤1:定义2级标题。##<fontcolor="black">模型持久化</font>按“SHIFT+Enter”,运行结果如下:2鸢尾花种类预测2.3
任务实施步骤2:保存模型到硬盘。joblib.dump(scaler,'iris_scaler.pkl')joblib.dump(knn_model,'iris_knn.pkl')按“SHIFT+Enter”,检查输出无异常。检查当前目录,可以发现多了2个文件:iris_scaler.pkl包含特征的统计值,iris_knn.pkl保存了KNN模型结构和参数。2鸢尾花种类预测2.3
任务实施步骤3:从硬盘加载模型到内存。scaler=joblib.load('iris_scaler.pkl')knn_model=joblib.load('iris_knn.pkl')按“SHIFT+Enter”,检查输出无异常。步骤3不是必须的,只是为了演示持久化的模型加载到内存的过程。2
鸢尾花种类预测2.3
任务实施2.3.7预测步骤1:定义2级标题。#<fontcolor="black">测试</font>按“SHIFT+Enter”,运行结果如下:2鸢尾花种类预测2.3
任务实施步骤2:按照索引值定义标签列表。label_names=["iris-setosa","iris-versicolour","iris-virginica"]按“SHIFT+Enter”,检查输出无异常。步骤3:构建测试样本。test_data=np.array([[5.2,2.6,3.8,1.3]])按“SHIFT+Enter”,检查输出无异常。2鸢尾花种类预测2.3
任务实施步骤4:转换测试样本。norm_test_data=scaler.transform(test_data)按“SHIFT+Enter”,检查输出无异常。步骤5:在KNN模型上预测。y_pred=knn_model.predict(norm_test_data)[0]按“SHIFT+Enter”,检查输出无异常。2
鸢尾花种类预测2.3
任务实施步骤6:打印预测鸢尾花品种。label_names[y_pred]按“SHIFT+Enter”,运行结果如下:数据集wine.data来自UCIIrvine机器学习库,共有178行、14列。3.1任务描述3葡萄酒品种预测第一列为类别标签,用1,2,3表示三种不同类别,其中第1行至第59行为第一类,类别标签为1,第60行至第130行为第二类,标签为2,第131行至第178行为第三类,标签为3,第2列至第14列为13个成分的含量信息。详细的字段描述见下表。3.1任务描述3葡萄酒品种预测字段字段类型允许为空标签?例子target(品种标签)int否是[1,2,3]alcohol(酒精)float否否12.37malic_acid(苹果酸)float否否1.63ash(灰分)float否否2.3alcalinity_of_ash(灰分的碱性)float否否24.5magnesium(镁)int否否88total_phenols(苯酚总量)float否否2.22flavanoids(黄酮类物质)float否否2.45nonflavanoid_phenols(非黄酮类酚)float否否0.4proanthocyanins(原花青素)float否否1.9color_intensity(颜色强度)float否否2.12hue(色度)float否否0.89od280/od315_of_diluted_wines(稀释酒蛋白质浓度的光谱度)float否否2.78proline(脯氨酸)int否否3423.1任务描述3葡萄酒品种预测1)建立KNN分类模型并评估精度。2)预测葡萄酒样本【alcohol=13.17,malic_acid=2.58,ash=2.37,alcalinity_of_ash=20,magnesium=120,total_phenols=1.63,flavanoids=0.67,nonflavanoid_phenols=0.53,proanthocyanins=1.46,color_intensity=9.3,hue=0.6,od280/od315_of_diluted_wines=1.62,proline=840】的品种。任务目标3葡萄酒品种预测3.2
任务分解import方式引入依赖的模块检查样本分布、特征/标签类型、空值、重复行、属性相互关系箱型图可视化特征的空间分布依赖库导入数据探查数据可视化观察数据后,按照训练集和验证集4:1比例切分数据集,然后保存训练好的KNN模型到硬盘,使用模型预测未知样本的标签。3葡萄酒品种预测3.2
任务分解转换Pandas类型到Numpy类型,转换特征到(0,1)正态分布在训练集上训练KNN模型,并在验证集上评估模型精度用训练的模型预测标签未知的样本数据转换模型训练预测接上模型持久化模型保存到硬盘以待将来使用3葡萄酒品种预测3.3
任务实施3.3.1依赖库导入步骤1:定义2级标题。##<fontcolor="black">依赖库导入</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:导入依赖库。importpandasaspdimportmatplotlib.pyplotaspltimportmatplotlibasmplfromsklearnimportneighborsfromsklearnimportmodel_selectionfromsklearnimportpreprocessingimportjoblibimportnumpyasnp3鸢尾花种类预测3.3
任务实施3.3.2数据探查步骤1:定义2级标题。##<fontcolor="black">数据探查</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:读入数据集文件到DataFrame对象。dataset=pd.read_csv("../data/wine.data")按“SHIFT+Enter”,检查输出无异常。步骤3:读查看不同品种的样本数。f"1类酒的样本数:{len(dataset[dataset.iloc[:,0]==1])},\2类酒的样本数:{len(dataset[dataset.iloc[:,0]==2])},\3类酒的样本数:{len(dataset[dataset.iloc[:,0]==3])}"3葡萄酒品种预测3.3
任务实施运行结果如下:步骤4:查看样本特征的统计值。dataset.iloc[:,1:14].describe()运行结果如下:“alcohol”、“alcalinity_of_ash”和“magnesium”的取值范围与其它特征的取值范围显著不同。3鸢尾花种类预测3.3
任务实施3.3.2数据可视化步骤1:定义2级标题。#<fontcolor="black">数据可视化</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:DataFrame.plot一次显示所有特征的箱型图。boxplot=dataset.iloc[:,1:14].plot(kind='box',subplots=True,layout=(4,4),sharex=False,sharey=False)运行结果如下:子图标题有遮挡,调用subplots_adjust方法调整子图的水平和垂直间距。3葡萄酒品种预测3.3
任务实施步骤3:手工添加子图,调用boxplot方法在每个子图窗口显示特征的箱型图。fig=plt.figure()fig.subplots_adjust(hspace=0.5,wspace=0.8)#加大子图水平和垂直间距foriinrange(4):
forjinrange(4):
col_index=i*4+j+1
ifcol_index==14:
break3葡萄酒品种预测3.3
任务实施运行结果如下: #和if左对齐 ax=fig.add_subplot(4,4,col_index) att_value=dataset.iloc[:,col_index].values#数据序列 att_label=dataset.iloc[:,col_index].name#列标题 ax.boxplot(att_value,labels=[att_label])接上3葡萄酒品种预测3.3
任务实施13个特征有着不同的中心值,方差也不相同,需要通过数据转换方法映射特征到相同的数据分布。3鸢尾花种类预测3.3
任务实施3.3.3数据转换步骤1:定义2级标题。#<fontcolor="black">数据转换</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:从DataFrame对象中抽取特征和标签。X=dataset.iloc[:,1:14].valuesy=dataset.iloc[:,0].values按“SHIFT+Enter”,输出无异常。步骤3:缩放特征服从正态分布。scaler=preprocessing.StandardScaler()norm_X=scaler.fit_transform(X)norm_X[0:5,...]3葡萄酒品种预测3.3
任务实施运行结果如下:从转换后的数据来看,特征已经服从(0,1)正态分布。3葡萄酒品种预测3.3
任务实施步骤4:分割数据集,分成训练集和验证集(验证集占比0.2)。X_train,X_val,y_train,y_val=model_selection.train_test_split(norm_X,y,random_state=4,test_size=0.2)print('训练集样本的个数:',len(X_train))print('测试集样本的个数:',len(X_val))按“SHIFT+Enter”,运行结果如下:3.3
任务实施3.3.5模型训练步骤1:定义2级标题。##<fontcolor="black">模型训练</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:建立KNN模型。knn_model=neighbors.KNeighborsClassifier(n_neighbors=5)按“SHIFT+Enter”,检查输出无异常步骤3:训练KNN模型。knn_model.fit(X_train,y_train)按“SHIFT+Enter”,检查输出无异常3葡萄酒品种预测3.3
任务实施步骤4:在验证集上评估模型。acc=knn_model.score(X_val,y_val)f"模型评估准确率:{acc:0.4f}"按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施3.3.6模型持久化步骤1:定义2级标题。##<fontcolor="black">模型持久化</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:保存模型到硬盘。scaler=joblib.load('wine_scaler.pkl')knn_model=joblib.load('wine_knn.pkl')按“SHIFT+Enter”,检查输出无异常。检查当前目录,可以发现多了2个文件:wine_scaler.pkl包含特征的统计值,wine_knn.pkl保存了KNN模型结构和参数。3葡萄酒品种预测3.3
任务实施步骤3:从硬盘加载模型到内存。scaler=joblib.load('wine_scaler.pkl')knn_model=joblib.load('wine_knn.pkl')按“SHIFT+Enter”,检查输出无异常。步骤3不是必须的,只是为了演示持久化的模型加载到内存的过程。3葡萄酒品种预测3.3
任务实施3.3.7预测步骤1:定义2级标题。#<fontcolor="black">测试</font>按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤2:按照索引值定义标签列表。label_names=["1类","2类","3类"]按“SHIFT+Enter”,检查输出无异常。步骤3:构建测试样本。test_data=np.array([[13.17,2.58,2.37,20,120,1.63,.67,.53,1.46,9.3,.6,1.62,840]])按“SHIFT+Enter”,检查输出无异常。3葡萄酒品种预测3.3
任务实施步骤4:转换测试样本。norm_test_data=scaler.transform(test_data)按“SHIFT+Enter”,检查输出无异常。步骤5:在KNN模型上预测。y_pred=knn_model.predict(norm_test_data)[0]按“SHIFT+Enter”,检查输出无异常。3葡萄酒品种预测3.3
任务实施步骤6:打印预测的葡萄酒品种。predict方法返回的是一个numpy数组,第一个元素就是label_names的index减1,因而列表索引从0开始。label_names[y_pred-1]按“SHIFT+Enter”,运行结果如下:3葡萄酒品种预测3.3
任务实施步骤7:查找和目标关系最密切的2个特征。dataset.corr()["target"]运行结果如下:3葡萄酒品种预测3.3
任务实施步骤8:Matplotlib支持中文字符。mpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False按“SHIFT+Enter”,检查输出无异常。步骤9:准备三类数据的特征。x1=norm_X[y==1][:,[6,11]]x2=norm_X[y==2][:,[6,11]]x3=norm_X[y==3][:,[6,11]]3葡萄酒品种预测3.3
任务实施步骤10:可视化数据分布和预测结果。plt.figure(figsize=(4,4),dpi=100)plt.scatter(x1[:,0],x1[:,1],marker='.',color='c',s=20,label='1类')plt.scatter(x2[:,0],x2[:,1],marker='o',color='g',s=20,label='2类')plt.scatter(x3[:,0],x3[:,1],marker='v',color='r',s=20,label='3类')plt.scatter(norm_test_data[0,6],norm_test_data[0,11],marker='*',color='b',s=120,label='未知')3葡萄酒品种预测3.3
任务实施plt.xlabel('flavanoids')plt.ylabel('od280/od315_of_diluted_wines')plt.legend(loc=1)plt.xlim(-2,3)plt.ylim(-2,3)运行结果如下:接上3葡萄酒品种预测3.3
任务实施3葡萄酒品种预测小结机器学习算法在训练集上中训练模型,在验证集上评估模型。模型建立特征到标签的映射。describe方法和Matplotlib图表探查数据分布。特征数据分布不相同的情况下需要归一化。模型持久化允许重复使用模型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 面向概念漂移的不平衡数据流分类算法研究
- 2025年房屋和土木工程服务项目发展计划
- 溜冰鞋企业数字化转型与智慧升级战略研究报告
- 中药移植后免疫调节行业跨境出海战略研究报告
- 松嫩典型黑土亚区土壤有机碳三维时空分布及影响因素研究
- 高效压缩液化设备企业县域市场拓展与下沉战略研究报告
- 挂靠办学合同范本
- 含菲并咪唑基的二芳基乙烯的合成及性能研究
- 化学药物杂质分离效率提升方案设计企业制定与实施新质生产力战略研究报告
- 人造丝混纺交织机织物企业ESG实践与创新战略研究报告
- 【全套】医院智能化系统报价清单
- 北师大版五年级数学上册典型例题系列之期中专项练习:分段计费问题(解析版)
- 1到六年级古诗全部打印
- 新闻学概论(复习重点内容)
- 功率测量模块的软件设计方案与实现
- 火龙罐疗法经典课件
- 核岛通风系统介绍
- 我见证改革开放三十年课件
- xxxx智能化工程施工进度计划表
- 供应商来料包装运输存储规范
- 搭桥术后护理查房
评论
0/150
提交评论