机械零部件测绘 第3版 课件第3章 典型学习算法_第1页
机械零部件测绘 第3版 课件第3章 典型学习算法_第2页
机械零部件测绘 第3版 课件第3章 典型学习算法_第3页
机械零部件测绘 第3版 课件第3章 典型学习算法_第4页
机械零部件测绘 第3版 课件第3章 典型学习算法_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器学习原理与应用第3章典型学习算法本章学习目标(知识要点)了解常用回归算法原理和回归评价标准;熟悉常用聚类算法原理及其聚类评价标准;熟悉常用分类算法原理以及分类评价标准;掌握支持向量机和决策树的基本原理以及实现机制;通过回归、聚类、分类等机器学习算法案例解决实际应用问题。目录

回归算法

聚类算法

分类算法

支持向量机

决策树3.13.23.33.43.5

综合案例:基于随机森林回归的

空气质量预测3.6◎回归简介◎回归技术◎常用回归算法◎回归评价标准◎案例:房屋价格回归分析回归算法3.13.1.1回归简介回归方法是指确定两种或两种以上变量间相互依赖关系的一种分析方法。回归分析可以帮助理解在保持其他自变量不变的情况下,因变量的值是如何对应于一个自变量变化的。在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。例如,自变量为广告费,而因变量就是销售额。自变量和因变量之间的关系往往可以通过离散的数据点来绘制,可以通过曲线来拟合离散的数据点,使得曲线到数据点的距离差异最小。曲线正是回归算法需要学习的模型,回归中的数据拟合3.1.1回归简介通过回归模型来建模因变量和自变量之间的关系,最终能帮助回答以下问题:发现自变量和因变量之间的关系:比如变量之间是否相关、相关的方向(正或反)。确定多个自变量对一个因变量的影响强度:通过回归,可以确定最重要的因素,最不重要的因素,以及每个因素如何影响其他因素。通过预测发现数据的趋势。3.1.2回归技术回归技术划分按照涉及自变量的多少,分为一元回归和多元回归分析;按照因变量的类型,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。经典的回归技术线性回归(LinearRegression):通过带系数的线性模型建模预测模型。逻辑斯蒂回归(LogisticRegression):通过非线性的sigmoid函数或logistic函数建模预测模型。多项式回归(PolynomialRegression):通过多项式函数建模预测模型。支持向量回归(SupportVectorRegression):通过非线性变换转换到高维的特征空间,在高维空间中构造线性决策函数来实现线性回归。决策树回归(DecisionTreeRegression):通过回归树将特征空间划分成若干单元,按照特征将其归到某个单元,并对其进行预测。随机森林回归(RandomForestRegression)则是由多棵决策树构成,且森林中的每一棵决策树之间没有关联,模型的最终输出由森林中的每一棵决策树共同决定。3.1.3常用回归算法常用回归算法(6种)线性回归、逻辑斯蒂回归、多项式回归、支持向量回归、决策树回归、随机森林回归。1.线性回归线性回归是一种用于预测分析的统计回归方法。它是一种非常简单易行的回归算法,通常用于表示自变量(x轴)和因变量(y轴)之间的线性关系,因而称为线性回归。简单线性回归只有一个输入变量多元线性回归有多个输入变量

3.1.3常用回归算法

3.1.3常用回归算法

sigmoid函数

3.1.3常用回归算法

3.1.3常用回归算法

多项式回归模型

3.1.3常用回归算法

3.1.3常用回归算法3.多项式回归

模型拟合的三种状态3.1.3常用回归算法

3.1.3常用回归算法

支持向量回归3.1.3常用回归算法

3.1.3常用回归算法

3.1.3常用回归算法

3.1.3常用回归算法5.决策树回归sklearn包中提供了决策树回归函数,实现方式如下#导入相关函数包importnumpyasnpfromsklearn.treeimportDecisionTreeRegressorimportmatplotlib.pyplotasplt#创建随机数据集rng=np.random.RandomState(1)X=np.sort(5*rng.rand(80,1),axis=0)y=np.sin(X).ravel()y[::5]+=3*(0.5-rng.rand(16))#模型训练regr_1=DecisionTreeRegressor(max_depth=2)#创建最大深度为2的决策树regr_2=DecisionTreeRegressor(max_depth=5)#创建最大深度为2的决策树regr_1.fit(X,y)regr_2.fit(X,y)r_sq1=regr_1.score(X,y)#返回回归预测精度R-Squared(见3.1.4小节)r_sq2=regr_2.score(X,y)#返回回归预测精度R-Squared(见3.1.4小节)3.1.3常用回归算法6.随机森林回归随机森林是非常强大的监督学习算法之一,它结合多颗决策树,能够执行回归和分类任务。随机森林回归是一种集成学习方法,其步骤一般为:1)通过对数据随机采样的方式,从原始数据集中构建N个子数据集。通常可以采用集成学习中的Bagging聚合技术,这是一种基于Bootstrap方法随机选择子样本的方法,即先随机取出一个样本放入采样集中,然后将该样本重新放回原始数据及后再进行下一次采样,此为有放回的采样方式。2)对每一个采样的子数据集构建决策树。3)对于预测样本,根据每棵树输出的平均值来预测最终的输出(默认每一棵树的权重相同):随机森林3.1.3常用回归算法6.随机森林回归随机森林可以通过sklearn来实现,实现方式如下:#导入相关函数包fromsklearn.ensembleimportRandomForestRegressorfromsklearn.datasetsimportmake_regression

#创建随机数据集X,y=make_regression(n_features=4,n_informative=2,...random_state=0,shuffle=False)#模型训练regr=RandomForestRegressor(max_depth=2,random_state=0)regr.fit(X,y)r_sq=regr.predict([[0,0,0,0]])#预测X的回归标签值3.1.4回归评价标准在回归任务中,通常所使用的评价算法有均方误差MSE、均方根误差RMSE、平均绝对误差MAE、R-Squared。1)均方误差(MeanSquaredError,MSE)2)均方根误差或标准误差(RootMeanSquardError,RMSE)3)平均绝对误差(MeanAbsoluteError,MAE)

3.1.4回归评价标准

3.1.5案例:房屋价格回归分析以房屋价格回归分析为例,介绍回归算法应用的具体实现。1.数据集房屋价格数据包含两列变量,分别为面积和价格,部分数据示例如下表所示2.导入相关函数包importmatplotlib.pyplotasplt#matplotlib的pyplot子库,用于绘图fromsklearnimportlinear_model#导入线性回归模型fromsklearn.preprocessingimportPolynomialFeatures#导入线性模型和多项式特征构造模块importnumpyasnp面积价格100016879218412601971262220124022811702483.1.5案例:房屋价格回归分析3.加载训练数据集dataX=[]#储存房屋面积数据dataY=[]#储存房屋房价数据fread=open('priceData.txt','r')#以只读的方式读取数据集所在的文件lines=fread.readlines()#一次性读取所有的数据集,返回一个列表forlineinlines[1:]:#逐行遍历,第一行标题省去items=line.strip().split(',')#去除数据集中的不可见字符,并用逗号分割数据dataX.append(int(items[0]))#将读取的数据转换为int型,并分别写入data_X和data_YdataY.append(int(items[1]))

length=len(dataX)#求数据集的总长度dataX=np.array(dataX).reshape([length,1])#将dataX转化为数组,并变为二维,以符合线性#回归拟合函数输入参数要求dataY=np.array(dataY)minX=min(dataX)maxX=max(dataX)X=np.arange(minX,maxX).reshape([-1,1])#以数据dataX的最大值和最小值为范围建立等差数#列,方便后续画图3.1.5案例:房屋价格回归分析4.建立线性回归模型polyReg=PolynomialFeatures(degree=2)#degree=2表示建立dataX的二次多项式特征XpolyXpoly=polyReg.fit_transform(dataX)#创建线性回归模型,使用线性模型学习二次项特征#Xpoly和dataY之间的映射关系linReg2=linear_model.LinearRegression()linReg2.fit(Xpoly,dataY)5.可视化回归模型的拟合线plt.scatter(dataX,dataY,color='green')#标签数据散点图可视化plt.plot(X,linReg2.predict(polyReg.fit_transform(X)),color='blue')#绘制回归拟合线plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#用于正常显示中文标签plt.xlabel('房屋面积')plt.ylabel('房屋价格')plt.show()6.最终绘制的线性回归模型如图中蓝色曲线所示目录

回归算法

聚类算法

分类算法

支持向量机

决策树3.13.23.33.43.5

综合案例:基于随机森林回归的

空气质量预测3.6◎聚类简介◎聚类技术◎典型聚类算法◎聚类评价标准◎案例:用户社区聚类分析聚类算法3.23.2.1聚类简介聚类是将数据集中的样本划分为多个不相交的子集,每个子集称为一个“簇”(或“类”)。理论上,同一簇中的样本应该具有相似的属性和/或特征,而不同簇中的样本应该具有高度不同的属性和/或特征。每一个簇隐含地对应一个潜在的“类别”。聚类示意图3.2.1聚类简介聚类应用图像分析生物信息商业选址产品推荐信号处理自然语言处理金融分析计算机视觉异常检测等https://franknielsen.github.io/Clustering/index.html3.2.2聚类技术

3.2.3典型聚类算法

3.2.3典型聚类算法

K-Means算法示意图3.2.3典型聚类算法

3.2.3典型聚类算法

密度聚类3.2.3典型聚类算法

3.2.3典型聚类算法3.凝聚层次聚类两类:自上而下(分列式)和自下而上(凝聚式)。层次聚类算法试图在不同层次对数据集进行划分,从而形成树形的聚类结构。层级凝聚聚类(HierarchicalAgglomerativeClustering,HAC)是自下而上的一种聚类算法。HAC首先将每个数据点视为一个单一的簇,然后计算所有簇之间的距离来合并距离最近的两个簇,该步骤不断重复直到达到预设的聚类簇数为止。层次聚类3.2.3典型聚类算法

3.2.3典型聚类算法3.凝聚层次聚类HAC可以通过sklearn实现如下fromsklearn.clusterimportAgglomerativeClusteringimportnumpyasnp

X=np.array([[1,2],[1,4],[1,0],[4,2],[4,4],[4,0]])

clustering=AgglomerativeClustering().fit(X)clusteringAgglomerativeClustering()clustering.labels_#输出分类标签3.2.3典型聚类算法

3.2.3典型聚类算法

3.2.3典型聚类算法4. 基于高斯混合模型的最大期望聚类GMM算法的一般过程如下:1)初始化K个多元高斯分布以及其权重。2)EM方法中的E步:估计每个样本由每个成分生成的后验概率,见公式3-18。3)EM方法的M步:根据均值,协方差的定义以及2步求出的后验概率,更新均值向量,协方差矩阵和权重。4)重复2-3步,直到似然函数增加值已小于收敛阈值,或达到最大迭代次数。5)对于每一个样本点,根据贝叶斯定理计算出其属于每一个簇的后验概率,并将样本划分到后验概率最大的簇中。GMM可以利用sklearn实现如下:importnumpyasnpfromsklearnimportmixturenp.random.seed(1)3.2.3典型聚类算法g=mixture.GMM(n_components=2)#Generaterandomobservationswithtwomodescenteredon0#and10tousefortraining.obs=np.concatenate((np.random.randn(100,1),10+np.random.randn(300,1)))g.fit(obs)GMM(covariance_type='diag',init_params='wmc',min_covar=0.001,n_components=2,n_init=1,n_iter=100,params='wmc',random_state=None,thresh=None,tol=0.001)g.predict([[0],[2],[9],[10]])3.2.4聚类评价标准聚类评价指标可以分为两类:外部指标:将聚类结果与某个参考模型(或者人工标注)进行比较。内部指标:不使用任何参考模型,直接评价聚类结果。常用的聚类外部指标Jaccard系数(JC)FM指数(FMI)Rand指数(RI)

3.2.4聚类评价标准

3.2.4聚类评价标准聚类的内部指标可以包括DB指数(DBI)Dunn指数(DI)

3.2.5案例:用户社区聚类分析以用户社区聚类分析为例,介绍聚类算法应用的具体实现。1.数据集某商场用户数据的示例如下图所示,每一个用户包含性别、年龄、年薪以及消费积分等信息。2.导入相关函数包3.商场用户消费数据3.2.5案例:用户社区聚类分析3.加载训练数据users=pd.read_csv("userdatasets.csv")#利用pandas加载csv格式的训练数据集users["Male"]=users.Gender.apply(lambdax:0ifx=="Male"else1)#对离散变量数值化处理users["Female"]=users.Gender.apply(lambdax:0ifx=="Female"else1)#对离散变量数值化处理dataX=users.iloc[:,2:]4.加载K-Means模型#n_clusters:簇的数量,在这个例子设为5#max_iter:k-means算法的最大迭代次数#n_init:初始化簇中心的最大次数,不同的初始簇中心将产生不同的聚类效果,选取其中聚类效果最好的一次#random_state:用于初始化簇中心的随机数。kmeans=KMeans(n_clusters=5,init='k-means++',max_iter=15,n_init=10,random_state=0)

#预测数据的簇标签labelY=kmeans.fit_predict(dataX)3.2.5案例:用户社区聚类分析5.聚类可视化fig,ax=plt.subplots(figsize=(8,6))#利用PCA对数据进行降维,使其能在二维空间中进行可视化pca=PCA(n_components=2).fit(dataX)pca2d=pca.transform(dataX)#将数据样本的特征向量转化为2维向量plt.scatter(pca2d[:,0],pca2d[:,1],c=labelY,edgecolor="none",cmap=plt.cm.get_cmap("Spectral_r",5),alpha=0.5)plt.gca().spines["top"].set_visible(False)plt.gca().spines["right"].set_visible(False)plt.gca().spines["bottom"].set_visible(False)plt.gca().spines["left"].set_visible(False)plt.xticks(size=12)plt.yticks(size=12)plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#用于正常显示中文标签plt.xlabel("主成分1",size=14,labelpad=10)plt.ylabel("主成分2",size=14,labelpad=10)plt.colorbar(ticks=[0,1,2,3,4])plt.show()3.2.5案例:用户社区聚类分析5.聚类可视化6.预测#预测新用户的类簇newX=np.array([[36,30,75,1,0]])newUser=kmeans.predict(newX)print(f"新用户属于cluster{newUser[0]}")预测结果为:新用户属于cluster4。用户数据聚类可视化目录

回归算法

聚类算法

分类算法

支持向量机

决策树3.13.23.33.43.5

综合案例:基于随机森林回归的

空气质量预测3.6◎分类简介◎分类技术◎常用分类算法◎分类评价标准◎案例:新闻分类分类算法3.33.3.1分类简介分类算法是一种监督学习技术,从给定的数据集中学习已标注的数据,即被标上类标签的数据,然后为新观测数据分配类标签的过程。如下图所示是一个二分类的可视化例子,蓝色数据点的类标签为ClassA,绿色数据点的类标签为ClassB。分类应用情感分析垃圾邮件检测客户流失预测文本分类等分类3.3.2分类技术

3.3.3分类技术

3.3.3分类技术

3.3.3分类技术

3.3.3分类技术2.逻辑斯蒂回归介绍了用于回归的逻辑斯蒂回归算法,事实上逻辑斯蒂回归也可以用于分类任务,其算法步骤可参见前面。单独的逻辑斯蒂回归只能进行二分类回归,通过定义一个sigmoid预测函数得到一个(0,1)之间的概率值,通常默认阈值0.5,大于0.5则属于分类1,小于0.5则属于分类2。逻辑斯蒂回归不存在条件独立性假设。相比于朴素贝叶斯,逻辑斯蒂回归对于大量数据的处理更有优势。但是逻辑斯蒂回归也容易过拟合,可解决的方法包括进行特征选择或者采取正则化。逻辑斯蒂回归利用sklearn进行分类的实现方式如下:#导入相关函数包fromsklearn.datasetsimportload_irisfromsklearn.linear_modelimportLogisticRegression#加载数据集X,y=load_iris(return_X_y=True)

#模型训练model=LogisticRegression(random_state=0).fit(X,y)#模型预测clf.predict(X[:2,:])#输出分类标签3.3.3分类技术3.决策树分类决策树是一种有监督的分类算法。决策树分类主要在于构建一个树状结构,其中每个内部结点表示样本中一个特征或属性,每个分支表示对特征测试的结果,每个叶结点表示最终分类。中间结点根结点叶结点:类别决策树示例3.3.3分类技术3.决策树分类根据不同划分依据可以衍生出不同的决策树算法,最为经典的算法分别是ID3、C4.5和CART。1)ID3算法:选择信息增益最大的特征来作为划分依据。信息增益偏向于选取值越多的特征,但这在有的情况下并不适用。而且ID3不能处理连续分布的数据特征。2)C4.5算法:该算法是RossQuinlan在ID3的基础上扩展的,利用信息增益率来选择特征,通过在构造树过程中进行剪枝克服了用信息增益偏向选择取值多的特征的不足。它能够完成对连续特征的离散化处理,且能够对不完整数据进行处理。但C4.5算法因树构造过程中需要对数据集进行多次的顺序扫描和排序,因而比较低效。3)CART算法:即分类与回归树(ClassificationandRegressionTrees,CART),采用Gini指数作为划分依据,并利用后剪枝操作简化决策树的规模,提高生成决策树的效率,而且Gini指数较于熵而言其计算速度更快一些。CART算法同样可以对离散值、连续值,甚至缺失值进行,而且还可以处理回归问题。3.3.3分类技术3.决策树分类根据不同划分依据可以衍生出不同的决策树算法,最为经典的算法分别是ID3、C4.5和CART。1)ID3算法:选择信息增益最大的特征来作为划分依据。信息增益偏向于选取值越多的特征,但这在有的情况下并不适用。而且ID3不能处理连续分布的数据特征。2)C4.5算法:该算法是RossQuinlan在ID3的基础上扩展的,利用信息增益率来选择特征,通过在构造树过程中进行剪枝克服了用信息增益偏向选择取值多的特征的不足。它能够完成对连续特征的离散化处理,且能够对不完整数据进行处理。但C4.5算法因树构造过程中需要对数据集进行多次的顺序扫描和排序,因而比较低效。3)CART算法:即分类与回归树(ClassificationandRegressionTrees,CART),采用Gini指数作为划分依据,并利用后剪枝操作简化决策树的规模,提高生成决策树的效率,而且Gini指数较于熵而言其计算速度更快一些。CART算法同样可以对离散值、连续值,甚至缺失值进行,而且还可以处理回归问题。

支持场景树结构特征选择连续值处理缺失值处理剪枝ID3分类多叉树信息增益×××C4.5分类多叉树信息增益比√√√CART分类/回归二叉树基尼指数/均方差√√√3.3.3分类技术4.随机森林分类随机森林分类算法是将决策树进行Bagging的集成算法,即使用多棵决策树的进行单独预测,最后将这些预测进行组合决定。不同于回归算法将所有决策树输出结果的平均值作为预测值,分类算法将被决策树预测最多的类作为预测结果。其一般步骤如下:1)通过对数据随机采样的方式,从原始数据集中构建N个子数据集。2)对每一个采样的子数据集构建决策树。3)对于预测数据,则根据每棵树的输出结果,将输出最多的分类标签作为预测值。3.3.3分类技术4.随机森林分类随机森林分类算法可以通过sklearn实现如下:#导入相关函数包fromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportmake_classification

#加载数据集X,y=make_classification(n_samples=1000,n_features=4,n_informative=2,n_redundant=0,random_state=0,shuffle=False)

#模型训练clf=RandomForestClassifier(max_depth=2,random_state=0)clf.fit(X,y)

#模型预测

clf.predict([[0,0,0,0]])#输出分类标签3.3.3分类技术

超平面间隔支持向量支持向量机3.3.3分类技术6. 神经网络算法一些基于神经网络的算法在分类领域广泛应用,受到了极大的关注。例如多层感知机MLP,深度学习中的卷积神经网络CNN。这些算法通过不同的卷积层(不同的滤波器)用于提取样本低维稠密的特征,然后利用池化层对数据进行降维,最后利用全连接层和softmax函数得到样本在不同类上的概率值。3.3.4分类评价标准

混淆矩阵:是一张表,这张表通过对比预测的分类结果和真实的分类结果来描述衡量分类器的性能。以二分类为例,混淆矩阵是展示预测分类和真实值四种不同结果组合的表。准确率(accuracy)精确率(precision)

真实分类

NoYes预测分类NoTNFNYesFPTP

3.3.4分类评价标准召回率(recall)F1值ROC-AUC指标ROC是分类器采用不同分类阈值时,真正例比率(TruePositiveRate,TPR)和假正例比率(FalsePositiveRate,FPR)的比值所展现出的曲线。如下图所示蓝色虚线表示分类器随机猜测的结果,红色曲线为ROC曲线。ROC下面积(即AUC)越大,表明分类器越好。

3.3.4分类评价标准PR-AUC不用于ROC同时兼顾正例和负例,precision和recall都是关于正例的评价度量指标,因此当样本分布不平衡时如果主要关心正例的情况,PR曲线更合适。PR曲线的纵轴是Precision,横轴是recall,如图所示:PR-AUC指标3.3.5案例:新闻分类以新闻分类为例,实现分类算法应用的具体过程。1.数据集某新闻数据的示例如图所示,每一条新闻包含标题(Title)、作者(Author)、类别(Category)、出版时间(PublishedDate)、更新时间(UpdatedOn)、网址(Slug)、摘要(Blurb)、新闻正文(Body)等信息。其中类别包含了“Business&Finance”、“HealthCare”、“Science&Health”、“Politics&Policy”、“CriminalJustice”这五个分类,每一条新闻仅属于其中一个分类。新闻数据3.3.5案例:新闻分类2.导入相关函数包3.加载标注数据集lTitles=[]lCategories=[]withopen('NewsData.tsv','r',encoding='gbk',errors='ignore')astsv:count=0forlineintsv:a=line.strip().split('\t')[:3]ifa[2]in['Business&Finance','HealthCare','Science&Health','Politics&Policy','CriminalJustice']:title=a[0].lower()title=re.sub('\s\W','',title)title=re.sub('\W\s','',title)lTitles.append(title)lCategories.append(a[2])4.训练数据和测试数据划分#默认按照3:1划分title_train,title_test,category_train,category_test=train_test_split(lTitles,lCategories)title_train,title_valid,category_train,category_valid=train_test_split(title_train,category_train)3.3.5案例:新闻分类5.数据向量化、特征选择、采样等预处理#利用词袋模型Bagofwords(BOW)对文本进行向量化tokenizer=nltk.tokenize.RegexpTokenizer(r"\w+")vectorizer=CountVectorizer(tokenizer=tokenizer.tokenize)vectorizer.fit(iter(title_train))#学习原始文档中所有词的词汇字典X_train=vectorizer.transform(iter(title_train))X_valid=vectorizer.transform(iter(title_valid))X_test=vectorizer.transform(iter(title_test))

encoder=LabelEncoder()encoder.fit(category_train)#存储所有类别标签y_train=encoder.transform(category_train)y_valid=encoder.transform(category_valid)y_test=encoder.transform(category_test)

#特征选择#根据特征方差,通过设定阈值删除无用的特征print("降维前的特征数量:",X_train.shape[1])selection=VarianceThreshold(threshold=0.001)Xtr_whole=copy.deepcopy(X_train)Ytr_whole=copy.deepcopy(y_train)selection.fit(X_train)

X_train=selection.transform(X_train)X_valid=selection.transform(X_valid)X_test=selection.transform(X_test)print("降维后的特征数量:",X_train.shape[1])

#数据采样sm=SMOTE(random_state=42)#由于不同类标签下的数据量不是均匀分布的,因此使用#SMOTE对数量较少的类进行上采样,以便类的分布是均匀的X_train,y_train=sm.fit_resample(X_train,y_train)3.3.5案例:新闻分类6.分类模型训练#随机森林算法(RandomForest)rf=RandomForestClassifier(n_estimators=40)rf.fit(X_train,y_train)pred=rf.predict(X_valid)print(classification_report(y_valid,pred,target_names=encoder.classes_))

#多项式朴素贝叶斯(MultinomialNaiveBayesian)nb=MultinomialNB()nb.fit(X_train,y_train)pred_nb=nb.predict(X_valid)print(classification_report(y_valid,pred_nb,target_names=encoder.classes_))两种模型在验证集上的分类效果如下图3.3.5案例:新闻分类7.模型预测pred_final=nb.predict(X_test)print(classification_report(y_test,pred_final,target_names=encoder.classes_))朴素贝叶斯模型在测试集上的预测效果多项式朴素贝叶斯算法在新闻测试数据集上的分类效果目录

回归算法

聚类算法

分类算法

支持向量机

决策树3.13.23.33.43.5

综合案例:基于随机森林回归的

空气质量预测3.6◎支持向量机简介◎间隔◎核函数与方法◎案例:垃圾邮件过滤支持向量机3.43.4.1支持向量机简介支持向量机SVM最早是在20世纪90年代由Cortes与Vapnik提出,它是基于统计学习理论,具有很好的数学基础支撑。SVM可以处理分类问题和回归问题,但是在分类问题上效果更好,在回归问题上也有较好的表现。支持向量分类机处理分类的SVM支持向量回归机处理回归的SVMSVM本质上就是一种二类分类模型,其基本模型定义为特征空间上间隔最大化的线性分类器,学习策略则是寻找以最大间隔把两个类分开的超平面,这可以形式化一个求解凸二次规划问题。3.4.2间隔

无数超平面对数据进行划分

3.4.2间隔

3.4.2间隔支持向量机学习方法从建模形式简单到复杂可以分为:线性可分支持向量机、线性支持向量机、非线性支持向量机。线性可分支持向量机(硬间隔支持向量机)面向数据线性可分的情况,通过硬间隔最大化学习一个线性分类器,该分类器又称作硬间隔支持向量机。线性支持向量机(软间隔支持向量机)线性支持向量机面向数据近似线性可分的情况,通过软间隔最大化学习一个线性分类器,该分类器又称作。非线性支持向量机面向数据线性不可分的情况,通过使用核技巧以及软间隔最大化学习分类器。3.4.2间隔

3.4.2间隔2.线性支持向量机对于数据不能完全可分的情况,线性可分支持向量机并不适用。为了能扩展到线性不可分的问题,线性支持向量机修改硬间隔最大化为软间隔最大化,从而使得完全不可分的要求弱化,只需要近似可分即可。此时D中可能存在一些异常点使得不存在一个线性超平面将数据完全分隔开,而将这些异常点去除后,剩下大部分的数据样本则是线性可分的。如图所示,阴影的样本点为不满足约束的样本。。上述问题,可以通过优化如下目标函数实现:线性支持向量机

3.4.2间隔

3.非线性支持向量机如图左侧所示,蓝色样本和红色样本交叉,无法通过一条直线将两者分割开来,而是通过一个曲线模型将其分离开。非线性可分问题到高维空间中的映射3.4.2间隔

3.4.3核函数与方法核技巧(kerneltrick)现实中存在很多非线性可分问题无法直接通过线性分类器进行区分。解决这类问题的一种方法就是将非线性问题变换为线性问题,通过求解变换后的线性问题来求解原来的非线性问题。核技巧就属于这样的方法。核技巧应用到支持向量机基本思想通过一个非线性变换将输入特征空间对应到一个新的特征空间,使得输入空间中的超曲面模型对应新特征空间中的超平面模型。这样,分类问题可以通过在新特征空间中求解线性问题来完成。非线性支持向量机正是基于核方法来设计模型。3.4.3核函数与方法

核函数线性核多项式核高斯核拉普拉斯核Sigmoid核3.4.4案例:垃圾邮件过滤以垃圾邮件过滤为例,介绍支持向量机分类算法应用的具体实现过程1.数据集邮件数据如下图所示,每一行数据包含两个字段,第一列为类别标签表明该邮件是否是垃圾邮件,ham表示非垃圾邮件,spam表示是垃圾邮件。第二列表明为该邮件的主题内容。

邮件数据3.4.4案例:垃圾邮件过滤2.导入相关函数包3.加载邮件训练数据集emails=pd.read_csv("spam.csv",encoding='latin-1')emails=emails.rename(columns={'v1':'label','v2':'message'})cols=['label','message']emails=emails[cols]emails=emails.dropna(axis=0,how='any')

#邮件数据预处理num_emails=emails["message"].sizedefemailPreprocess(rawEmail):letters=re.sub("[^a-zA-Z]","",rawEmail)#删除非英文的字符words=letters.lower().split()return("".join(words))

processedEmail=[]foriinrange(0,num_emails):processedEmail.append(emailPreprocess(emails["message"][i]))

#创建新的dataframeemails["Processed_Msg"]=processedEmail#处理后的邮件消息cols2=["Processed_Msg","label"]emails=emails[cols2]

3.4.4案例:垃圾邮件过滤数据划分以及数据预处理#创建训练集和测试集X_train,X_test,Y_train,Y_test=train_test_split(emails["Processed_Msg"],emails["label"])

#数据向量化vectorizer=CountVectorizer(analyzer="word",tokenizer=None,preprocessor=None,stop_words=None,max_features=5000)#定义向量化变量train_features=vectorizer.fit_transform(X_train)#对训练数据样本进行向量化train_features=train_features.toarray()

test_features=vectorizer.transform(X_test)#对测试数据样本进行向量化test_features=test_features.toarray()加载SVM模型(线性核)

clf=svm.SVC(kernel='linear',C=1.0)#使用线性核clf.fit(train_features,Y_train)#训练predicted=clf.predict(test_features)#测试accuracy=np.mean(predicted==Y_test)print("Accuracy:",accuracy)最终测试结果显示的正确率为:Accuracy:0.9892318736539842目录

回归算法

聚类算法

分类算法

支持向量机

决策树3.13.23.33.43.5

综合案例:基于随机森林回归的

空气质量预测3.6◎决策树简介◎构造及基本流程◎剪枝方法◎案例:鸢尾花卉预测应用决策树3.53.5.1决策树简介决策树是一种用于回归和分类的基本算法。本章主要讨论用于分类的决策树。分类决策树主要在于构建一个树状结构,其中每个内部结点表示样本中一个特征或属性,每个分支表示对特征测试的结果,每个叶结点表示最终分类。如图所示是决策树对于某一个样本实例进行分类的过程,圆和方框分别代表内部节点和叶结点。决策树分类3.5.1决策树简介对于一个训练数据集,决策树算法通常包含特征选择、树的生成与剪枝三大步骤:特征选择:从训练数据中所有特征中根据某种评估标准选择一个特征作为当前最优特征,并根据该特征的取值对训练数据进行分割,使得对各个子数据集能够在当前条件下进行最好的分类。树的生成:依据所选择的特征评估标准,从根结点开始,从上至下递归地生成子结点。如果所分割的子数据集能够被正确分类,那么构建叶结点,并将这些子数据集分到所对应的叶结点中;如果子数据集不能被正确分类,则继续选择新的最优特征,继续对其进行分割,并构建相应的结点。剪枝:上述生成决策树可能对训练数据具有好的分类能力,但对未知的数据不一定具有好分类效果,也就是过拟合现象。对此,决策树采用剪枝方法对树结构进行简化,从而使其具有更好的泛化能力。3.5.2构造及基本流程

3.5.3剪枝方法

3.5.3剪枝方法

3.5.4案例:鸢尾花卉预测应用以鸢尾花卉预测为例,介绍决策树分类算法应用的具体实现过程1.数据集鸢尾花数据示例如下图所示,每一行样本包含四种特征,分别为花萼长度(sepal.length)、花萼宽度(sepal.width)、花瓣长度(petal.length)、花瓣宽度(petal.width),花的种类分为“setosa”、“versicolor”、“virginica'”三种。将根据鸢尾花的花萼和花瓣的长宽度特征,利用决策树模型对其分类。鸢尾花数据3.5.4案例:鸢尾花卉预测应用2.导入相关函数包3.加载训练数据集,训练模型,预测iris=pd.read_csv("iris.csv")train,test=train_test_split(iris,test_size=0.25)#训练和测试数据划分,测试集占据25%.

X_train=train[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']]#提取有关特征生成训练数据样本y_train=train.Species#提取训练数据类别标签print(np.unique(y_train))

X_test=test[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']]#提取有关特征生成测试数据样本y_test=test.Species#提取测试数据类别标签

#加载训练模型deTree=DecisionTreeClassifier(criterion='entropy',random_state=7)deTree.fit(X_train,y_train)#模型训练

y_pred=deTree.predict(X_test)#模型预测print("Accuracy:",accuracy_score(y_test,y_pred))

鸢尾花数据最终的预测结果为:Accuracy:0.9210526315789473目录

回归算法

聚类算法

分类算法

支持向量机

决策树3.13.23.33.43.5

综合案例:基于随机森林回归的

空气质量预测3.6综合案例:基于随机森林回归的空气质量预测3.63.6综合案例:基于随机森林回归的空气质量预测在综合案例分析中,将以空气质量预测任务为例,借助机器学习算法解决空气质量预测问题。该任务可以定义为一个回归问题,已知一个城市的历史空气质量指标(Airqualityindex,AQI)数据及其空气中主要污染物浓度数据,需要建立空气污染物浓度(自变量)和AQI(因变量)两者之间关系的模型,借助该模型,对于给定的任意一个城市的空气污染物浓度,可以预测其AQI值。1.数据集空气数据集示例如下图所示,第一列为时间,第二列为对应空气质量3.6综合案例:基于随机森林回归的空气质量预测2.导入相关函数包3.加载数据集#查看数据集print(data_src.head())print(data_src.shape)index=data_src.indexcol=data_src.columnsclass_names=np.unique(data_src.iloc[:,-1])#print(type(data_src))#print(class_names)#print(data_src.describe())

#划分训练集和验证集data_train,data_test=train_test_split(data_src,test_size=0.1,random_state=0)#训练集和测试集划#分比例9:1#print("训练集统计信息:\n",data_train.describe().round(2))#print("验证集统计信息:\n",data_test.describe().round(2))#print("训练集信息:\n",data_train.iloc[:,-1].value_counts())#print("验证集信息:\n",data_test.iloc[:,-1].value_counts())

X_train=data_train.iloc[:,2:]#取数据集后6列作为特征(即自变量)X_test=data_test.iloc[:,2:]feature=data_train.iloc[:,2:].columns

y_train=data_train.iloc[:,0]#第一列空气质量指数(AQI)作为因变量y_test=data_test.iloc[:,0]3.6综合案例:基于随机森林回归的空气质量预测4.加载模型#参数选择criterion=['mae','mse']#回归树衡量分枝质量的指标,MAE和MSE作为备选n_estimators=[int(x)forxinnp.linspace(start=200,stop=2000,num=10)]max_features=['auto','sqrt']max_depth=[int(x)forxinnp.linspace(10,100,num=10)]max_depth.append(None)min_samples_split=[2,5,10]min_samples_leaf=[1,2,4]bootstrap=[True,False]random_grid={'criterion':criterion,'n_estimators':n_estimators,'max_features':max_features,'max_depth':max_depth,'min_samples_split':min_samples_split,'min_samples_leaf':min_samples_leaf,'bootstrap':bootstrap}#构建随机森林回归模型clf=RandomForestRegressor()clf_random=RandomizedSearchCV(estimator=clf,param_distributions=random_grid,n_iter=15,cv=3,verbose=2,random_state=42,n_jobs=1)#随机搜索最佳参数clf_random.fit(X_train,y_train)print(clf_random.best_params_)#输出最优参数3.6综合案例:基于随机森林回归的空气质量预测5.模型训练、验证rfr=RandomForestRegressor(criterion='mse',bootstrap=False,max_features='sqrt',max_depth=10,min_samples_split=5,n_estimators=120,min_samples_leaf=2)rfr.fit(X_train,y_train)y_train_pred=rfr.predict(X_train)y_test_pred=rfr.predict(X_test)#可视化各特征的重要性(Giniimportance)plt.barh(range(len(rfr.feature_importances_)),rfr.feature_importances_,tick_label=['PM','PM10','So2','No2','Co','O3'])plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#用于正常显示中文标签plt.title('各特征的重要性')plt.savefig("./Figure1.png")plt.show()print("决策树模型评估--训练集:")print('训练r^2:',rfr.score(X_train,y_train))print('均方差',mean_squared_error(y_train,y_train_pred))print('绝对差',mean_absolute_error(y_train,y_train_pred))print('解释度',explained_variance_score(y_train,y_train_pred))print("决策树模型评估

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论