版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章
机器学习经典算法介绍学习目标
了解机器学习的定义、流程和类型。
能够在计算机上自主搭建机器学习环境。
掌握机器学习常见的分类、回归、聚类算法。
能够利用Python的机器学习库编程实现分类、回归、聚类算法。3.1机器学习简介3.2机器学习经典算法3.3机器学习经典算法案例编程3.1机器学习简介3.1.1机器学习定义
机器学习是计算机利用已有的数据,训练出某种数学模型,并利用此模型预测未来的一种方法。机器学习的过程与人类学习的过程是类似的,不过机器学习能考虑更复杂的情况(能考虑的因素更多),执行更加复杂的计算。事实上,机器学习的主要目的就是把人类通过思考归纳经验的过程转化为计算机通过数据处理和计算得出模型的过程。计算机得出的模型能够以近似于人的方式解决很多灵活、复杂的问题。3.1.2机器学习流程
机器学习流程:(1)了解实际应用中要利用机器学习技术解决什么问题,达到什么目的。(2)选择并初步分析数据,选择合适的特征构建特征向量。特征选择的方式可以采用人工选择或模型自动选择。(3)拆分数据集为训练集和测试集。通常以8∶2或者7∶3的比例进行数据集拆分。(4)选择合适的模型,设置模型的相关参数。(5)在模型中输入训练集进行模型训练。(6)训练完毕后,评估模型的训练效果,若效果不达标,则重新选择模型或调整参数进行训练。(7)训练模型通过评估后,将测试集输入训练后的模型中进行测试(8)评估模型的测试效果,如果效果达标,则该模型就可以用来解决实际问题,如预测结果。若效果不达标,则重新选择模型或调整参数进行训练。3.1.2机器学习流程3.1.3机器学习类型
根据训练数据有无标签,机器学习主要划分为监督学习、无监督学习、半监督学习、强化学习、深度学习。其中,强化学习通过与环境交互获得反馈进行学习。深度学习是基于深层神经网络的学习方法,可以应用于上述多种学习类型。3.1.3机器学习类型1.监督学习
监督学习就是根据已有的数据在已知输入和输出之间关系的情况下,训练得到一个最优的模型。在监督学习中,训练数据既包含特征(问题描述)又包含标签(答案),通过训练,机器可以学习特征和标签之间的联系,从而在面对只有特征没有标签的数据时,可以判断出其标签。
监督学习的应用分为两类:回归和分类。
回归:适用于连续型变量。例如,给定一组房屋特征(房屋大小、房间数、地理位置等),预测房屋的价格。回归就是对已经存在的数据(已知房屋大小、房间数、地理位置的多套房屋的价格)进行分析,拟合出适当的回归函数模型y=
f
(x),这里x就是自变量(房屋大小、房间数、地理位置等),y就是数据的标签(房屋的价格),而对于一个新的自变量x,通过这个回归函数模型可以得到标签y。
分类:适用于离散型变量,其输出结果是有限的类型。例如,邮件分类问题的输出中只有两种类别:正常邮件或垃圾邮件。3.1.3机器学习类型
2.无监督学习
比起监督学习,无监督学习更像是让机器自学。无监督学习和监督学习最大的区别就是输入的训练数据是没有标签的。无监督学习让机器自己从训练数据中找出它们的特征和内在联系,把特征相似和具有内在联系的数据聚合成一个簇。例如在市场细分时,某公司的数据库中存储了许多客户的信息,可以通过无监督学习把客户分成不同的客户群,这样公司就可以对不同的客户群销售不同的产品或者提供不同的服务。
3.1.3机器学习类型
无监督学习的应用可分为聚类、关联分析、降维3类。聚类也叫无监督分类。
聚类:聚类的结果是把数据聚合成一个个簇,各个簇内部的数据具有相似的特征和内在联系。因此,聚类同样也实现了分类效果,只不过每个类别没有标签。3.1.3机器学习类型
关联分析:主要用于发现事件共同发生的概率。例如如果一个中年男性顾客购买了黄酒,他很可能也购买了白酒。3.1.3机器学习类型
降维:指的是减少数据集的变量数量。如果数据集的维度较高,机器的学习时间会增加,学习过程会变复杂。为了改善这种情况,需要做降维处理,同时最大限度地保留原始数据的大部分特征信息。常用的降维方法有主成分分析PCA法。PCA方法的思想是将高维空间的数据投影到低维空间上,使得数据在低维空间上尽可能地分散,从而保留数据的绝大部分信息。3.1.3机器学习类型3.半监督学习
半监督学习介于监督学习和无监督学习之间,它使用的训练数据少部分是有标签的,而大部分是没有标签的。和监督学习相比较,半监督学习的成本较低,不需要对所有数据打标签,同时又能达到较高的准确度。在现实任务中,没有标签的样本多、有标签的样本少是一种比较普遍的现象。利用好没有标签的样本来提升模型的泛化能力,是半监督学习研究的重点。
4.强化学习
强化学习是一种试错方法,其目标是让模型在特定环境中能够获取最优的结果。强化学习使用的训练数据没有标签,输出的结果也没有标签。模型每次的行为都会对外部环境产生影响,外部环境依照某种规则对该影响进行好坏的判断。如果判断当前行为是好的,则模型的行为以后就多往这个方向发展;如果判断当前行为是坏的,模型就进行自我调整,规避这样的行为。模型通过不断地调整,最终达到最优状态。例如,当宝宝把玩具弄乱时,就给他相应的惩罚,当宝宝把玩具收拾好后,就给他相应的奖励,那么宝宝最终会明白把玩具弄乱是不好的行为。3.1.3机器学习类型5.深度学习
深度学习是机器学习新的发展方向之一,深度学习的核心是深度神经网络。区别于传统神经网络,深度神经网络能够通过训练自动找寻样本数据的内在规律和表示层次,使深度学习更容易应对传统机器学习无法解决的问题,拓宽了机器学习的应用场景。3.2机器学习经典算法3.2.1分类算法
分类是利用已有类别标签的样本数据,训练或者构造出一种分类器,该分类器能够对未知数据进行预测分类,得到离散的结果。由于样本数据已有类别标签,因此分类算法属于监督学习。分类算法主要应用在二分类问题和多分类问题上。
分类算法的流程。3.2.1分类算法(1)数据集分割:将原始数据集分为训练集和测试集,一般训练集和测试集比例为5∶1。训练集用来训练模型,测试集用来检验训练后模型的分类准确度。(2)选择合适的分类算法:分类算法有很多种,如线性分类、决策树分类、支持向量机分类、贝叶斯分类等。针对不同特征的数据集,每种分类算法的效果都不一样。可以根据经验,选择其中的一种或几种算法。(3)训练模型:基于选择的分类算法,使用训练集训练模型。(4)测试模型:模型训练好后需要进行测试,以检验模型的分类准确度,如果同时训练了几种模型,可以比较它们各自的分类准确度,挑选分类准确度最好的模型。(5)模型应用于未知数据集:把挑选的模型应用于未知数据集的分类预测上。3.2.1分类算法
根据分类函数是否线性,分类算法可以分为线性分类算法和非线性分类算法。
线性分类算法:包括线性判别分析、逻辑回归、贝叶斯分类、单层感知机等。
非线性分类算法:包括KNN分类、决策树分类、随机森林分类、多层感知机(神经网络)算法等。支持向量机分类根据核函数的不同,可以是线性分类算法也可以是非线性分类算法。线性分类算法编程实现简单、运行速度快,但是拟合能力较差。非线性分类算法编程复杂,但是拟合能力强。3.2.1分类算法
常用的分类算法:(1)KNN分类算法KNN分类算法是机器学习中最简单的分类算法之一。它的核心思想就是“邻近原则”,即每个测试点的类别由距离它最近的k个训练点的类别决定,如果这k个训练点中的大多数属于某个类别,则该测试点也属于该类别。这个过程类似于“少数服从多数”的决策方式。KNN分类算法的流程如下。①
计算测试点和其他所有训练点之间的距离,并将距离按递增顺序排序,选取与测试点距离最近的前k个训练点。②
根据前k个训练点各自所属的类别,计算各个类别出现的频率。③
把出现频率最高的那个类别作为测试点的类别。3.2.1分类算法KNN分类算法的分类效果和3个因素有关。
①
k值的选择
如果k值过小,只有与测试数据距离非常近的训练点影响测试结果,容易发生过拟合,导致模型泛化能力差。如果k值过大,则与测试数据距离非常远的训练样本数据也会影响测试结果,进而影响分类的准确度,导致模型的学习能力差。一般通过交叉验证方法选择最优k值,②
距离的计算方法
KNN分类算法将测试数据和训练样本之间的距离作为样本之间相似性的度量指标。距离的计算方法有很多种,包括欧氏距离、余弦值、曼哈顿距离等,其中比较常用的是欧氏距离和曼哈顿距离。③
分类决策
KNN分类算法中分类决策采用“少数服从多数”原则。默认情况下每个训练点无论距离测试点多远,权重都是一样的,但是在实际分类中,权重可能不同,通常设置距离测试点近的训练点权重大,距离远的训练点权重小。3.2.1分类算法
(2)决策树分类算法
决策树分类算法采用一种特殊的树形结构(一般由节点和有向边组成)。其中,普通节点表示属性。有向边表示判断条件,叶子节点表示类别。决策树可以应用于分类,也可以应用于回归。决策树常用的算法有ID3、C4.5、CART。3.2.1分类算法
决策树分类算法的流程如下。①
获取原始数据集的所有属性,建立属性列表。②
计算所有属性的信息增益/信息增益比。③
选择信息增益/信息增益比最大的属性作为第一次分类的属性。④
根据该属性对数据进行分类,分割原始数据集,并将该属性从属性列表中移除。⑤
返回③,循环进行③~④的流程,不断分割数据集,从属性列表中移除属性,直到所有的属性都被遍历,或者每个判断条件下的数据在同一类别。⑥
决策树分类算法结束。3.2.1分类算法
(3)支持向量机分类算法
支持向量机(SupportVectorMachine,SVM)分类算法是一种基于核的机器学习算法,属于监督学习算法。支持向量机可以用于分类预测,也可以用于回归预测。支持向量机两大核心思想是最优决策超平面和核函数。①
最优决策超平面
分类的目标是划分数据集,即尝试找到一个超平面将数据分开。在数据线性可分的情况(即存在一个线性函数能够将数据分开)下,超平面在二维空间是一条直线,在三维空间是一个平面。而这样的超平面有很多。如何选择最优的超平面来进行分类呢?在分类时,那些远离超平面的数据点不会被错误分类,而那些离超平面很近的数据点容易被错误分类。支持向量机分类算法引入最优决策超平面进行分类,在保证分类准确度的情况下使得超平面两侧距离超平面最近的两类数据点间的距离最大化,最大限度减少分类错误,实现最优分类。3.2.1分类算法
②
核函数
如果数据在二维空间线性不可分,即无法通过一个线性函数来分类,必须使用椭圆才能分开数据,该怎么办呢?为此,支持向量机引入了核函数的概念,将数据通过一个映射函数从原始空间映射到更高维的特征空间,使得数据在高维特征空间线性可分,因此可以在高维特征空间找到最优决策超平面来对数据进行分类,这个映射函数就是核函数。支持向量机提供的核函数有很多种,如线性核函数、多项式核函数、高斯核函数、傅里叶核函数等。
那么,将数据映射到高维空间,计算量会不会大大增加,导致无法计算呢?核函数能避免这个问题。核函数的计算是在低维空间中进行的,利用了核函数内积的性质将分类效果表现在高维空间中,避免了直接在高维空间中进行复杂计算,真正解决了线性不可分的问题。目前已经证实,如果原始空间是有限维的,那么一定存在一个高维特征空间可以使数据可分。3.2.1分类算法支持向量机分类算法的流程如下。①
将原始数据集的数据格式转换为支持向量机算法要求的数据输入格式,并将原始数据集划分为训练集和测试集。②
对原始数据集进行数据标准化处理。③
选择相应的核函数,建立对应分类模型。④
利用交叉验证法,对核函数的参数进行调优,建立最优支持向量机分类模型。⑤
利用训练集和最优支持向量机分类模型进行训练。⑥
利用测试集进行模型测试。⑦
算法结束。3.2.1分类算法(4)贝叶斯分类算法
贝叶斯分类算法是利用概率统计知识进行分类的算法的总称,这类算法都以贝叶斯定理为基础。朴素贝叶斯分类算法是贝叶斯分类算法中较为简单和常见的一种分类算法,属于监督学习算法。贝叶斯分类算法与其他分类算法的不同在于,贝叶斯分类算法得出的结果并不是一个确定的值,而是未知数据可能属于每种类别的概率。贝叶斯分类算法的核心思想就是在所有类别中选择概率最高的类别作为预测类别。
设数据集中的数据有n个属性,可以表示成一个n维的特征向量,假设这些属性互相独立(这是贝叶斯定理使用的基本条件)。这些数据被分为m个类。如果要给一个未知的数据进行分类,根据贝叶斯分类算法的核心思想,选择所有类别中概率最高的类别作为预测类别,就是未知数据属于类别的概率。贝叶斯公式:能够根据训练数据计算得到。因此结果可以求得。和其中,是未知数据x属于类别
的概率3.2.1分类算法
假设,要利用朴素贝叶斯分类算法判断一个色泽青绿、根蒂蜷缩的西瓜是不是好瓜,需要计算P(好瓜|青绿,蜷缩)和P(坏瓜|青绿,蜷缩)。若前者更大,则为好瓜;若后者更大,则为坏瓜。3.2.1分类算法根据贝叶斯定理:P(好瓜|青绿,蜷缩)=P(青绿,蜷缩|好瓜)·P(好瓜)/P(青绿,蜷缩),P(坏瓜|青绿,蜷缩)=P(青绿,蜷缩|坏瓜)·P(坏瓜)/P(青绿,蜷缩)。贝叶斯定理假设各个属性互相独立,上面的公式可以写成:P(好瓜|青绿,蜷缩)=P(青绿|好瓜)·P(蜷缩|好瓜)·P(好瓜)/P(青绿,蜷缩),P(坏瓜|青绿,蜷缩)=P(青绿|坏瓜)·P(蜷缩|坏瓜)·P(坏瓜)/P(青绿,蜷缩)。由西瓜数据可知:P(青绿|好瓜)=3/8,P(青绿|坏瓜)=3/9=1/3,P(蜷缩|好瓜)=5/8,P(蜷缩|坏瓜)=3/9=1/3,3.2.1分类算法P(好瓜)=8/17,P(坏瓜)=9/17,P(青绿,蜷缩)=3/17,可以计算出:P(好瓜|青绿,蜷缩)=5/8,P(坏瓜|青绿,蜷缩)=1/3。由于P(好瓜|青绿,蜷缩)>P(坏瓜|青绿,蜷缩),可以得出色泽青绿、根蒂蜷缩的西瓜是好瓜。3.2.2回归算法
回归是在已有样本数据的基础上,训练或者构造出回归模型,并利用该回归模型对未知数据的真实值进行预测的过程。回归是分类的拓展。
回归与分类的区别:分类输出的是离散的数值,而回归输出的是连续的数值。简单来说,分类是打标签,而回归是无限逼近真实值,输出结果没有对错之分。比如,房价为100万元,模型输出99万元和输出50万元都是对100万元的逼近,只不过逼近的效果不同。又如,如果预测明天的气温是多少摄氏度,这是一个回归问题;如果预测明天的天气是阴天、晴天还是雨天,这是一个分类问题。回归算法的训练样本是有标签的,所以回归算法也属于监督学习算法。3.2.2回归算法
回归算法主要应用于连续值预测(如房价预测、经济预测、天气预测等)。常用的回归算法有KNN回归算法、决策树回归算法、支持向量机回归算法、神经网络回归算法等。
(1)KNN回归算法KNN回归算法是KNN算法在回归方面的运用。与KNN分类算法类似,KNN回归算法通过找出距离某个未知数据点最近的k个近邻点,并且将这k个近邻点的平均值作为该未知数据点的预测值。一般来说,不同距离的近邻点对该未知数据点产生的影响是不一样的,距离更近的近邻点产生的影响相对比较大,距离更远的近邻点产生的影响相对比较小。为了提高预测精度,可以引入权值来计算k个近邻点的平均值,通常权值和距离成反比。3.2.2回归算法
(2)决策树回归算法
决策树回归算法的思想类似于决策树分类算法的,区别在于叶子节点。决策树分类算法的叶子节点的数据是离散值,而决策树回归算法的叶子节点的数据是连续值(连续区域)。在同一连续区域内部的数据具有相似性,而不同连续区域内部的数据不同。在进行回归预测时,只能预测未知数据落在哪个连续区域内,然后把该区域的输出值作为预测结果。决策树回归算法一般用来将比较复杂的训练数据划分为一个个内部数据相似的小数据集,对每个小数据集可以利用其他机器学习算法来进一步处理。3.2.2回归算法
假设需要利用左图决策树回归模型预测向量(7,7)对应的输出。向量(7,7)第一维分量7介于5和8之间,第二维分量7小于8,根据决策树模型可以判断(7,7)所在的区域为所示二维平面的阴影区域,其对应的输出值为c3。划分区域的过程也就是决策树的构建过程,每次划分,都可以确定划分区域对应的输出值。当划分完成的时候,每个区域的输出值也就确定了,所有的叶子节点也确定了。
(3)支持向量机回归算法
支持向量机回归算法利用支持向量机来预测连续数据值,算法原理类似于支持向量机分类算法。3.2.3聚类算法
前面介绍的分类算法和回归算法都属于监督学习算法,训练样本包含标签。接下来介绍无监督学习算法。无监督学习算法的特点是机器学习过程中没有训练步骤,所有数据不包含标签,即不知道输入数据后对应输出的结果是什么,无监督学习算法的整个运行过程是不需要人工干预的。无监督学习算法的代表是聚类算法。
聚类也叫群分析,和分类相似,它的目的也是要确定一个物体的类别,但和分类不同的是,聚类时没有事先定义好的类别,机器要自己想办法把样本分成多个类别,保证每一个类别中的样本之间是相似的,而不同类的样本之间是不同的,因此聚类也叫作无监督分类。在聚类中每个类别被称为“簇”(Cluster)。3.2.3聚类算法
假设有一堆水果,需要我们去聚类,聚类时我们也没有被告知聚类标准,只能根据自己的判断对水果进行聚类。有的人按照颜色分类,把颜色相似的水果归为一类;有的人按照形状聚类,把形状相似的水果归为一类;也有的人按照大小聚类,把大小相似的水果归为一类;还有的人按照季节聚类,把同一季节成熟的水果归为一类。这个过程就是聚类,每个人都可以根据自己定义的规则,将相似的样本划分成一类,不相似的样本划分成不同的类。由于事先不知道样本能分为几类,也没有统一标准,所以不存在训练阶段。
聚类算法的结果是“仁者见仁,智者见智”的。比如,对数字序列{1,2,3,4,5,6,7,8,9}进行分类,最少有两种分类方式。第一种是分成{1,3,5,7,9}和{2,4,6,8},划分依据为第一个集合中的数字都是奇数,第二个集合中的数字都是偶数。第二种是分成{1,4,7}、{2,5,8}、{3,6,9},划分依据为集合中的数字除以3之后的余数相同。这两种分类方式都是合理的。3.2.3聚类算法
聚类算法有很多种,比如k均值聚类(k-meansClustering)、具有噪声的基于密度的聚类(DBSCAN)、高斯混合模型(GMM)聚类、凝聚层次聚类(AHC)等。
1.k均值聚类算法k均值聚类算法是一种迭代求解的聚类算法。它的目的是通过不断地迭代找到每个样本点潜在的类别,把具有相似性的样本点聚合在一起形成“簇”。它要求每个簇内各个样本点之间的距离尽可能小,簇间距离尽可能大。样本具体聚合成多少个簇,由人工指定的k值决定。
假设k=3时,k均值聚类算法的流程如下。(1)加载原始数据,所有样本点未聚类。(2)设定要聚合的簇的数量k,例如设定为3,随机选取3个初始中心点(A1、A2、A3)。(3)计算每个样本点到这3个初始中心点的距离,将每个样本点归类到距离最近的初始中心点,并用椭圆框起来。
3.2.3聚类算法(4)在步骤(3)完成之后,重新计算每个类别的中心点位置,并将3个初始中心点分别移动到所属类别的中心点位置上,完成第一次迭代。(5)重复步骤(3)~(4),完成后续的迭代步骤。(6)直到和上一次迭代相比,中心点位置不再移动或移动的距离非常小,则迭代完成,两幅图中的中心点位置已经非常接近。3.2.3聚类算法k均值算法中簇的数量和初始中心点都是人工设定和选取的,k值和初始中心点的选取对于聚类效果的好坏有很大的影响。
对于k值的选择,可以结合簇的某些指标来判断。一种方法是利用簇的平均半径指标或直径指标。当设定的簇的数目等于或者大于真实的簇的数目时,该指标上升会很缓慢,而当簇的数目小于真实的簇的数目时,该指标会急剧上升。通过该指标的变化可以得到合适的k值。
选取初始中心点,有2种方式。(1)初始中心点之间的距离尽可能远。首先随机选择一个点作为第一个初始中心点,其次选择距离该点最远的那个点作为第二个初始中心点,接着选择距离前两个点距离最大的点作为第三个初始中心点,以此类推,直至选出k个初始中心点。(2)先对数据用层次聚类算法或者Canopy算法进行聚类,得到k个簇之后,从每个簇中选择一个点,该点可以是该簇的中心点,或者是距离簇的中心点最近的那个点。3.3机器学习经典算法案例编程3.3.1scikit-learnscikit-learn是一个用于机器学习的Python开源库,安装容易、使用简单。scikit-learn内部实现了多种机器学习算法(如分类算法、回归算法、聚类算法、降维算法等),同时提供了模型选择和数据预处理两大常用功能。后续将利用scikit-learn来实现机器学习算法案例编程。3.3.2搭建环境
搭建环境主要分4个步骤,具体步骤见教材。
1.安装虚拟机VMwareWorkstation
3.3.2搭建环境
搭建环境主要分4个步骤,具体步骤见教材。
1.安装虚拟机VMwareWorkstation2.安装Linux操作系统3.配置网络4.scikit-learn的安装3.3.3分类算法应用案例1.KNN分类算法应用案例scikit-learn实现了两种KNN分类器:KNeighborsClassifier和RadiusNeighborsClassifier。KNeighborsClassifier分类器通过选取与每个测试点距离最近的k个训练样本点作为近邻点,k值可以由用户设置。RadiusNeighborsClassifier分类器选取每个测试点固定半径r内的训练样本点作为近邻点,r可以由用户设置,但k会随r的变化而变化。
下面使用KNeighborsClassifier分类鸢尾花数据集。鸢尾花数据集包含鸢尾花的4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和3个已标注的分类(Setosa、Versicolour、Virginica),共150条数据。KNeighborsClassifier分类器的使用步骤如下。(1)创建KNeighborsClassifier分类器。(2)调用fit()方法进行模型训练。(3)对训练好的模型调用predict()方法进行预测。3.3.3分类算法应用案例
具体代码如下。importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.colorsimportListedColormapfromsklearnimportneighbors,datasetsn_neighbors=12#加载鸢尾花数据集iris=datasets.load_iris()x=iris.data[:,:2]
#只使用前两个特征,方便画图时在二维平面显示y=iris.targeth=.02
#设置网格中的步长#创建用于绘图的颜色映射cmap_light=ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])cmap_bold=ListedColormap(['#FF0000','#00FF00','#0000FF'])#测试两种权重方式:均匀权重和距离权重forweightsin['uniform','distance']:
#创建KNeighborsClassifier分类器,并训练数据
clf=neighbors.KNeighborsClassifier(n_neighbors,weights=weights)
clf.fit(x,y)
#定义绘图范围
x_min,x_max=x[:,0].min()-1,x[:,0].max()+1
y_min,y_max=x[:,1].min()-1,x[:,1].max()+1
#创建网格数据点
xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))
#对网格上的每个点进行预测
Z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
#将结果调整为网格形状
Z=Z.reshape(xx.shape)
plt.figure()3.3.3分类算法应用案例
运行结果如下。3.3.3分类算法应用案例2.决策树分类算法应用案例scikit-learn提供了DecisionTreeClassifier分类器实现决策树分类算法。下面利用该分类器对鸢尾花数据集进行分类。具体代码运行结果如下。fromsklearn.treeimportDecisionTreeClassifierfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score
#加载鸢尾花数据集iris=datasets.load_iris()#获取特征数据(花萼长度、宽度等)和目标变量(花的种类)iris_feature=iris.datairis_target=iris.target
#将数据集划分为训练集和测试集#test_size=0.33表示测试集占33%,random_state=56确保每次划分结果一致feature_train,feature_test,target_train,target_test=train_test_split(
iris_feature,
iris_target,
test_size=0.33,
random_state=56)3.3.3分类算法应用案例#初始化决策树分类器dt_model=DecisionTreeClassifier()#使用训练集数据训练模型dt_model.fit(feature_train,target_train)
#使用训练好的模型对测试集进行预测predict_results=dt_model.predict(feature_test)
#计算模型在测试集上的准确率(两种等效方法)#方法1:直接使用模型的score方法scores=dt_model.score(feature_test,target_test)#方法2:使用accuracy_score函数比较预测结果和真实结果accuracy=accuracy_score(predict_results,target_test)
#输出预测结果和真实标签print("预测结果:",predict_results)print("真实标签:",target_test)
#输出模型评估结果print("模型准确率(score方法):",scores)print("模型准确率(accuracy_score):",accuracy)3.3.3分类算法应用案例运行结果如下。3.3.3分类算法应用案例
3.支持向量机分类算法应用案例scikit-learn提供了SVC分类器,实现支持向量机算法。下面利用SVC对鸢尾花数据集进行分类。具体代码如下。importnumpyasnpfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.model_selectionimportGridSearchCVfromsklearn.svmimportSVC
#加载鸢尾花数据集iris=datasets.load_iris()#获取特征数据和目标变量iris_feature=iris.datairis_target=iris.target
#将数据集划分为训练集和测试集#test_size=0.3表示测试集占30%,random_state=42X_train,X_test,Y_train,Y_test=train_test_split(
iris_feature,
iris_target,
test_size=0.3,
random_state=42)#初始化支持向量机分类器#使用径向基函数(RBF)核,class_weight='balanced'表示类别权重平衡svc=SVC(kernel='rbf',class_weight='balanced')3.3.3分类算法应用案例#设置网格搜索参数范围#C_range:正则化参数的对数范围,从2-5到215,共11个值#gamma_range:RBF核参数的对数范围,从2-9到23,共13个值c_range=np.logspace(-5,15,11,base=2)gamma_range=np.logspace(-9,3,13,base=2)param_grid=[{'kernel':['rbf'],'C':c_range,'gamma':gamma_range}]#使用网格搜索和交叉验证寻找最优参数grid=GridSearchCV(svc,param_grid,cv=3,n_jobs=-1)#使用训练数据拟合模型,并找到最优参数clf=grid.fit(X_train,Y_train)#输出训练集上的最佳交叉验证准确率print('训练集准确度为:%s'%clf.best_score_)#使用最优模型对测试集进行预测,并计算准确率score=grid.score(X_test,Y_test)print('测试集准确度为:%s'%score)3.3.3分类算法应用案例
运行结果如下。3.3.3分类算法应用案例
4.朴素贝叶斯分类算法应用案例scikit-learn提供了多种封装好的朴素贝叶斯分类模型,下面以高斯朴素贝叶斯分类模型为例进行介绍。具体代码如下。fromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.naive_bayesimportGaussianNBfromsklearn.metricsimportaccuracy_score
#加载鸢尾花数据集iris=datasets.load_iris()#获取特征数据和目标变量iris_feature=iris.datairis_target=iris.target
#将数据集划分为训练集和测试集#test_size=0.3表示测试集占30%,random_state=1Xtrain,Xtest,ytrain,ytest=train_test_split(
iris_feature,
iris_target,
test_size=0.3,
random_state=1)3.3.3分类算法应用案例#初始化高斯朴素贝叶斯分类器model=GaussianNB()#使用训练集数据训练模型model.fit(Xtrain,ytrain)#使用训练好的模型对测试集进行预测y_model=model.predict(Xtest)#计算模型在测试集上的准确率accur=accuracy_score(ytest,y_model)print('测试集准确度为:%s'%accur)运行结果如下。3.3.3分类算法应用案例#初始化高斯朴素贝叶斯分类器model=GaussianNB()#使用训练集数据训练模型model.fit(Xtrain,ytrain)#使用训练好的模型对测试集进行预测y_model=model.predict(Xtest)#计算模型在测试集上的准确率accur=accuracy_score(ytest,y_model)print('测试集准确度为:%s'%accur)运行结果如下。3.3.4回归算法应用案例
1.KNN回归算法应用案例scikit-learn提供了2种KNN回归模型:KNeighborsRegressor和RadiusNeighborsRegressor。
其中,KNeighborsRegressor选取与每个测试点距离最近的k个训练样本点作为近邻点,k可以人为设定。RadiusNeighborsRegressor选取每个测试点固定半径r内的训练样本点作为近邻点,k不能人为设置,只有r可以人为设置。
下面采用KNeighborsRegressor来拟合随机数据点,同时采用权重随距离增加而减少的策略,该策略可以通过设置KNeighborsRegressor对象的weights属性来实现。weights属性的默认值是uniform(所有点权重相同),而要实现上述策略需要设置weights='distance'。具体代码如下。3.3.4回归算法应用案例importmatplotlib.pyplotaspltimportnumpyasnpfromsklearn.neighborsimportKNeighborsRegressor
#生成训练样本n_dots=400#生成400个随机样本,范围为[0,5),并转换为列向量X_train=5*np.random.rand(n_dots,1)#计算目标值y=cos(X),并使用np.ravel()将多维数组展平为一维y_train=np.cos(X_train).ravel()
#设置KNN回归器的样本点数量
k=5k=5#初始化KNN回归器,设置权重为'距离倒数'(距离越近的点对预测结果影响越大)knn=KNeighborsRegressor(k,weights='distance')
#使用训练数据拟合回归器knn.fit(X_train,y_train)
#生成测试样本#生成400个随机测试样本,范围为[0,1),并转换为列向量X_test=np.random.rand(n_dots,1)#计算测试样本的真实值y=cos(X),并展平为一维y_test=np.cos(X_test).ravel()
#使用训练好的回归器对测试集进行预测y_predict=knn.predict(X_test)3.3.4回归算法应用案例#绘制测试集的真实值和预测值的对比图,这里仅绘制前100个样本以便更清晰地观察对比plt.plot(y_test[:100],'r',label='observed')plt.plot(y_predict[:100],'b--',label='predict')plt.xlabel('RandomTestData')plt.legend()plt.show()运行结果如下。3.3.4回归算法应用案例
2.决策树回归算法应用案例scikit-learn提供了DecisionTreeRegressor用于实现决策树回归算法,下面利用它预测随机数据集。这里设置决策树深度为4和5,以便进行拟合效果比较。importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.treeimportDecisionTreeRegressor
#生成数据集#使用随机种子确保可重复性rng=np.random.RandomState(1)#生成80个0~5范围内的随机数,并排序作为特征值x=np.sort(5*rng.rand(80,1),axis=0)#计算目标值y=sin(x),并展平为一维数组y=np.sin(x).ravel()#每隔5个点添加随机噪声y[::5]+=3*(0.5-rng.rand(16))
#训练模型#创建两个决策树回归器,分别设置最大深度为4和5model1=DecisionTreeRegressor(max_depth=4)model2=DecisionTreeRegressor(max_depth=5)#使用训练数据拟合模型model1.fit(x,y)model2.fit(x,y)3.3.4回归算法应用案例#测试模型#生成测试数据(0~5范围内,步长为0.01)并转换为列向量X_test=np.arange(0.0,5.0,0.01)[:,np.newaxis]#使用两个模型分别进行预测y_1=model1.predict(X_test)y_2=model2.predict(X_test)#可视化结果plt.figure()#绘制原始数据点plt.scatter(x,y,s=20,edgecolor="black",c="darkorange",label="data")#绘制两个模型的预测曲线plt.plot(X_test,y_1,color="cornflowerblue",label="max_depth=4",linewidth=2)plt.plot(X_test,y_2,color="yellowgreen",label="max_depth=5",linewidth=2)#添加图表元素plt.xlabel("data")plt.ylabel("target")plt.title("DecisionTreeRegression")plt.legend()plt.show()3.3.4回归算法应用案例运行结果如下。3.3.4回归算法应用案例
3.支持向量机回归算法应用案例scikit-learn提供了SVR用于实现支持向量机回归算法。这里直接导入scikit-learn自带的波士顿房价数据集,SVR核函数选取线性核函数、多项式核函数、径向基函数(RadialBasisFunction,RBF)核函数进行比较。importnumpyasnpfromsklearn.datasetsimportload_bostonfromsklearn.preprocessingimportStandardScalerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.svmimportSVR#加载波士顿房价数据集boston=load_boston()#提取特征数据和目标值x=boston.datay=boston.target#将数据集划分为训练集和测试集,测试集占33%,随机种子为20x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.33,random_state=20)#对特征数据和目标值分别进行标准化处理ss_x=StandardScaler()ss_y=StandardScaler()#对训练集特征数据进行拟合和转换x_train=ss_x.fit_transform(x_train)#对测试集特征数据进行转换(使用训练集的均值和标准差)x_test=ss_x.transform(x_test)3.3.4回归算法应用案例#对训练集目标值进行拟合和转换,并将其展平为一维数组y_train=ss_y.fit_transform(y_train.reshape(-1,1)).ravel()#对测试集目标值进行转换(使用训练集的均值和标准差),并将其展平为一维数组y_test=ss_y.transform(y_test.reshape(-1,1)).ravel()#初始化线性核函数的SVR模型linear_svr=SVR(kernel='linear')#使用训练数据拟合模型linear_svr.fit(x_train,y_train)#使用训练好的模型对测试集进行预测linear_svr_predict=linear_svr.predict(x_test)#初始化多项式核函数的SVR模型poly_svr=SVR(kernel='poly')#使用训练数据拟合模型poly_svr.fit(x_train,y_train)#使用训练好的模型对测试集进行预测poly_svr_predict=poly_svr.predict(x_test)#初始化径向基核函数的SVR模型rbf_svr=SVR(kernel='rbf')#使用训练数据拟合模型rbf_svr.fit(x_train,y_train)#使用训练好的模型对测试集进行预测rbf_svr_predict=rbf_svr.predict(x_test)#输出各模型的准确度print('核函数为线性核函数,准确度为',linear_svr.score(x_test,y_test))print('核函数为多项式核函数,准确度为',poly_svr.score(x_test,y_test))print('核函数为径向基核函数,准确度为',rbf_svr.score(x_test,y_test))3.3.4回归算法应用案例运行结果如下。3.3.5聚类算法应用案例
下面使用scikit-learn中的KMeans对鸢尾花数据集进行聚类。importmatplotlib.pyplotaspltimportnumpyasnpfromsklearn.clusterimportKMeansfromsklearnimportdatasets#加载鸢尾花数据集iris=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 武汉轻工大学《书法创作训练》2024-2025学年第二学期期末试卷
- 机关内部停车场制度
- 机关办公室内部制度
- 机械加工内部管理制度
- 某某学校内部控制制度
- 检验科内部检查制度
- 民宿人员内部管理制度
- 民营公司内部审计制度
- 洁净室内部门管理制度
- 海尔内部创业制度
- 侧铺砖标准砖施工方案
- 2025-2030中国智慧矿山建设技术标准体系与安全管理升级路径研究报告
- 迈瑞销售知识培训课件
- 《机电产品营销》课件-项目一:认识机电产品营销
- 光伏资料员培训课件
- 充电桩用电安全知识培训课件
- 中华经典诵写讲大赛讲解
- 神经外科进修汇报总结
- 青少年性与生殖健康课件
- 消费者权益保护培训课件
- DB11T 2423-2025 城市道路挖掘与修复技术规范
评论
0/150
提交评论