Python & 机器学习之项目实践.docx





《Python & 机器学习之项目实践.docx》由会员分享,可在线阅读,更多相关《Python & 机器学习之项目实践.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python&机器学习之项目实践机器学习是一项经历技能经历越多越好。在工程建立的经过中理论是掌握机器学习的最正确手段。在理论经过中通过实际操作加深对分类以及回归问题的每一个步骤的理解到达学习机器学习的目的。预测模型工程模板不能只通过浏览来掌握机器学习的技能需要进展大量的练习。本文将介绍一个通用的机器学习的工程模板创立这个模板总共有六个步骤。通过本文将学到端到端地预测分类与回归模型的工程构造。怎样将前面学到的内容引入到工程中。怎样通过这个工程模板来得到一个高准确度的模板。机器学习是针对数据进展自动挖掘找出数据的内在规律并应用这个规律来预测新数据如图19-1所示。图19-1在工程中理论机器
2、学习端到端地解决机器学习的问题是非常重要的。可以学习机器学习的知识可以理论机器学习的某个方面但是只有针对某一个问题从问题定义开场到模型部署为止通过理论机器学习的各个方面才能真正掌握并应用机器学习来解决实际问题。在部署一个工程时全程介入到工程中可以更加深化地考虑怎样使用模型和勇于尝试用机器学习解决问题的各个方面而不仅仅是介入到自己感兴趣或者擅长的方面。一个很好的理论机器学习工程的方法是使用从UCI机器学习仓库:/archive.ics.uci.edu/ml/datasets.html获取的数据集开启一个机器学习工程。假如从一个数据集开场理论机器学习应该怎样将学到的所有技巧以及方法整合到一起来处理
3、机器学习的问题呢分类或者回归模型的机器学习工程可以分成以下六个步骤1定义问题。2理解数据。3数据准备。4评估算法。5优化模型。6结果部署。有时这些步骤可能被合并或者进一步分解但通常是按上述六个步骤来开展机器学习工程的。为了符合Python的习惯在下面的Python工程模板中按照这六个步骤分解整个工程在接下来的局部会明确各个步骤或者子步骤中所要实现的功能。机器学习工程的Python模板下面会给出一个机器学习工程的Python模板。代码如下#Python机器学习工程的模板#1.定义问题#a)导入类库#b)导入数据集#2.理解数据#a)描绘性统计#b)数据可视化#3.数据准备#a)数据清洗#b)特征
4、选择#c)数据转换#4.评估算法#a)别离数据集#b)定义模型评估标准#c)算法审查#d)算法比拟#5.优化模型#a)算法调参#b)集成算法#6.结果部署#a)预测评估数据集#b)利用整个数据集生成模型#c)序列化模型当有新的机器学习工程时新建一个Python文件并将这个模板粘贴进去再按照前面章节介绍的方法将其填充到每一个步骤中。各步骤的详细讲明接下来将详细介绍工程模板的各个步骤。步骤1定义问题主要是导入在机器学习工程中所需要的类库以及数据集等以便完成机器学习的工程包括导入Python的类库、类以及方法和导入数据。同时这也是所有的配置参数的配置模块。当数据集过大时可以在这里对数据集进展瘦身处理
5、理想状态是可以在1分钟内甚至是30秒内完成模型的建立或者可视化数据集。步骤2理解数据这是加强对数据理解的步骤包括通过描绘性统计来分析数据以及通过可视化来观察数据。在这一步需要花费时间多问几个问题设定假设条件并调查分析一下这对模型的建立会有很大的帮助。步骤3数据准备数据准备主要是预处理数据以便让数据可以更好地展示问题和熟悉输入与输出结果的关系。包括通过删除重复数据、标记错误数值甚至标记错误的输入数据来清洗数据。特征选择包括移除多余的特征属性以及增加新的特征属性。数据转化对数据尺度进展调整或调整数据的分布以便更好地展示问题。要不断地重复这个步骤以及下一个步骤直到找到足够准确的算法生成模型。步骤4评
6、估算法评估算法主要是为了寻找最正确的算法子集包括别离出评估数据集以便于验证模型。定义模型评估标准用来评估算法模型。抽样审查线性算法以及非线性算法。比拟算法的准确度。在面对一个机器学习的问题的时候需要花费大量的时间在评估算法以及准备数据上直到找到35种准确度足够的算法为止。步骤5优化模型当得到一个准确度足够的算法列表后要从中找出最适宜的算法通常有两种方法可以进步算法的准确度对每一种算法进展调参得到最正确结果。使用集合算法来进步算法模型的准确度。步骤6结果部署一旦认为模型的准确度足够高就可以将这个模型序列化以便有新数据时使用该模型来预测数据。通过验证数据集来验证被优化过的模型。通过整个数据集来生成
7、模型。将模型序列化以便于预测新数据。做到这一步的时候就可以将模型展示并发布给相关人员。当有新数据产生时就可以采用这个模型来预测新数据。使用模板的小技巧快速执行一遍首先要快速地在工程中将模板中的每一个步骤执行一遍这样会加强对工程每一局部的理解并给怎样改良带来灵感。循环整个流程不是线性的而是循环进展的要花费大量的时间来重复各个步骤尤其是步骤3或者步骤4或者步骤3步骤5直到找到一个准确度足够的模型或到达预定的周期。尝试每一个步骤跳过某个步骤很简单尤其是不熟悉、不擅长的步骤。坚持在这个模板的每一个步骤中做些工作即使这些工作不能进步算法的准确度但也许在后面的操作就可以改良并进步算法的准确度。即使觉得这个
8、步骤不适用也不要跳过这个步骤而是减少该步骤所做的奉献。定向准确度机器学习工程的目的是得到一个准确度足够高的模型。每一个步骤都要为实现这个目的做出奉献。要确保每次改变都会给结果带来正向的影响或对其他的步骤带来正向的影响。在整个工程的每个步骤中准确度只能向变好的方向挪动。按需适用可以按照工程的需要来修改步骤尤其是对模板中的各个步骤非常熟悉之后。需要把握的原那么是每一次改良都以进步算法模型的准确度为前提。总结本章介绍了预测模型工程的模板这个模板适用于分类或者回归问题。接下来将介绍机器学习中的一个回归问题的工程这个工程比前面介绍的鸢尾花的例子更加复杂会利用到本章介绍的每个步骤。回归工程实例机器学习是一
9、项经历技能理论是掌握机器学习、进步利用机器学习解决问题的才能的有效方法之一。那么怎样通过机器学习来解决问题呢本章将通过一个实例来一步一步地介绍一个回归问题。本章主要介绍以下内容怎样端到端地完成一个回归问题的模型。怎样通过数据转换进步模型的准确度。怎样通过调参进步模型的准确度。怎样通过集成算法进步模型的准确度。定义问题在这个工程中将分析研究波士顿房价BostonHousePrice数据集这个数据集中的每一行数据都是对波士顿周边或者城镇房价的描绘。数据是1978年度统计采集的。数据中包含以下14个特征以及506条数据UCI机器学习仓库中的定义。CRIM城镇人均犯罪率。ZN住宅用地所占比例。INDU
10、S城镇中非住宅用地所占比例。CHASCHAS虚拟变量用于回归分析。NOX环保指数。RM每栋住宅的房间数。AGE1940年度以前建成的自住单位的比例。DIS间隔5个波士顿的就业中心的加权间隔。RAD间隔高速公路的便利指数。TAX每一万美元的不动产税率。PRTATIO城镇中的老师学生比例。B城镇中的黑人比例。LSTAT地区中有多少房东属于低收入人群。MEDV自住房屋房价中位数。通过对这些特征属性的描绘我们可以发现输入的特征属性的度量单位是不统一的也许需要对数据进展度量单位的调整。导入数据首先导入在工程中需要的类库。代码如下#导入类库importnumpyasnpfromnumpyimportara
11、ngefrommatplotlibimportpyplotfrompandasimportread_csvfrompandasimportset_optionfrompandas.plottingimportscatter_matrixfromsklearn.preprocessingimportStandardScalerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.model_selectionimportKFoldfromsklearn.model_selectionimportcross_val_scorefr
12、omsklearn.model_selectionimportGridSearchCVfromsklearn.linear_modelimportLinearRegressionfromsklearn.linear_modelimportLassofromsklearn.linear_modelimportElasticNetfromsklearn.treeimportDecisionTreeRegressorfromsklearn.neighborsimportKNeighborsRegressorfromsklearn.svmimportSVRfromsklearn.pipelineimp
13、ortPipelinefromsklearn.ensembleimportRandomForestRegressorfromsklearn.ensembleimportGradientBoostingRegressorfromsklearn.ensembleimportExtraTreesRegressorfromsklearn.ensembleimportAdaBoostRegressorfromsklearn.metricsimportmean_squared_error接下来导入数据集到Python中这个数据集可以以从UCI机器学习仓库下载在导入数据集时还设定了数据属性特征的名字。代码如
14、下#导入数据filenamehousing.csvnamesCRIM,ZN,INDUS,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PRTATIO,B,LSTAT,MEDVdataread_csv(filename,namesnames,delim_whitespaceTrue)在这里对每一个特征属性设定了一个名称以便于在后面的程序中使用它们。因为CSV文件是使用空格键做分隔符的因此读入CSV文件时指定分隔符为空格键delim_whitespaceTrue。理解数据对导入的数据进展分析便于构建适宜的模型。首先看一下数据维度例如数据集中有多少条记录、有多少个数据特征。代码如下#数据维
15、度print(dataset.shape)执行之后我们可以看到总共有506条记录以及14个特征属性这与UCI提供的信息一致。(506,14)再查看各个特征属性的字段类型。代码如下#特征属性的字段类型print(dataset.dtypes)可以看到所有的特征属性都是数字而且大局部特征属性都是浮点数也有一局部特征属性是整数类型的。执行结果如下CRIMfloat64ZNfloat64INDUSfloat64CHASint64NOXfloat64RMfloat64AGEfloat64DISfloat64RADint64TAXfloat64PRTATIOfloat64Bfloat64LSTATfloa
16、t64MEDVfloat64dtype:object接下来对数据进展一次简单的查看在这里我们查看一下最开场的30条记录。代码如下#查看最开场的30条记录set_option(display.line_width,120)print(dataset.head(30)这里指定输出的宽度为120个字符以确保将所有特征属性值显示在一行内。而且这些数据不是用一样的单位存储的进展后面的操作时也许需要将数据整理为一样的度量单位。执行结果如图20-1所示。图20-1接下来看一下数据的描绘性统计信息。代码如下#描绘性统计信息set_option(precision,1)print(dataset.describ
17、e()在描绘性统计信息中包含数据的最大值、最小值、中位值、四分位值等分析这些数据可以加深对数据分布、数据构造等的理解。结果如图20-2所示。图20-2接下来看一下数据特征之间的两两关联关系这里查看数据的皮尔逊相关系数。代码如下#关联关系set_option(precision,2)print(dataset.corr(methodpearson)执行结果如图20-3所示。图20-3通过上面的结果可以看到有些特征属性之间具有强关联关系0.7或者-0.7如NOX与INDUS之间的皮尔逊相关系数是0.76。DIS与INDUS之间的皮尔逊相关系数是-0.71。TAX与INDUS之间的皮尔逊相关系数是0
18、.72。AGE与NOX之间的皮尔逊相关系数是0.73。DIS与NOX之间的皮尔逊相关系数是-0.77。数据可视化单一特征图表首先查看每一个数据特征单独的分布图多查看几种不同的图表有助于发现更好的方法。我们可以通过查看各个数据特征的直方图来感受一下数据的分布情况。代码如下#直方图dataset.hist(sharexFalse,shareyFalse,xlabelsize1,ylabelsize1)pyplot.show()执行结果如图20-4所示从图中可以看到有些数据呈指数分布如CRIM、ZN、AGE以及B有些数据特征呈双峰分布如RAD以及TAX。图20-4通过密度图可以展示这些数据的特征属性
19、密度图比直方图更加平滑地展示了这些数据特征。代码如下#密度图dataset.plot(kinddensity,subplotsTrue,layout(4,4),sharexFalse,fontsize1)pyplot.show()在密度图中指定layout(4,4)这讲明要画一个四行四列的图形。执行结果如图20-5所示。图20-5通过箱线图可以查看每一个数据特征的状况可以以很方便地看出数据分布的偏态程度。代码如下#箱线图dataset.plot(kindbox,subplotsTrue,layout(4,4),sharexFalse,shareyFalse,fontsize8)pyplot.s
20、how()执行结果如图20-6所示。图20-6多重数据图表接下来利用多重数据图表来查看不同数据特征之间的互相影响关系。首先看一下散点矩阵图。代码如下#散点矩阵图scatter_matrix(dataset)pyplot.show()通过散点矩阵图可以看到固然有些数据特征之间的关联关系很强但是这些数据分布构造也很好。即使不是线性分布构造也是可以很方便进展预测的分布构造执行结果如图20-7所示。图20-7再看一下数据互相影响的相关矩阵图。代码如下#相关矩阵图figpyplot.figure()axfig.add_subplot(111)caxax.matshow(dataset.corr(),vm
21、in-1,vmax1,interpolationnone)fig.colorbar(cax)ticksnp.arange(0,14,1)ax.set_xticks(ticks)ax.set_yticks(ticks)ax.set_xticklabels(names)ax.set_yticklabels(names)pyplot.show()执行结果如图20-8所示根据图例可以看到数据特征属性之间的两两相关性有些属性之间是强相关的建议在后续的处理中移除这些特征属性以进步算法的准确度。图20-8思路总结通过数据的相关性以及数据的分布等发现数据集中的数据构造比拟复杂需要考虑对数据进展转换以进步模型的
22、准确度。可以尝试从以下几个方面对数据进展处理通过特征选择来减少大局部相关性高的特征。通过标准化数据来降低不同数据度量单位带来的影响。通过正态化数据来降低不同的数据分布构造以进步算法的准确度。可以进一步查看数据的可能性分级离散化它可以帮助进步决策树算法的准确度。别离评估数据集别离出一个评估数据集是一个很好的主意这样可以确保别离出的数据集与训练模型的数据集完全隔离有助于最终判断以及报告模型的准确度。在进展到工程的最后一步处理时会使用这个评估数据集来确认模型的准确度。这里别离出20%的数据作为评估数据集80%的数据作为训练数据集。代码如下#别离数据集arraydataset.valuesXarray
23、:,0:13Yarray:,13validation_size0.2seed7X_train,X_validation,Y_train,Y_validationtrain_test_split(X,Y,test_sizevalidation_size,random_stateseed)评估算法评估算法原始数据分析完数据不能立即选择出哪个算法对需要解决的问题最有效。我们直观上认为由于局部数据的线性分布线性回归算法以及弹性网络回归算法对解决问题可能比拟有效。另外由于数据的离散化通过决策树算法或者支持向量机算法也答应以生成高准确度的模型。到这里仍然不清楚哪个算法会生成准确度最高的模型因此需要设计一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python & 机器学习之项目实践 amp 机器 学习 项目 实践

限制150内