决策树和随机森林实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验算法决策树和随机森林实验

【实验名称】

决策树和随机森林实验

【实验目的】

掌握决策树和随机森林实验模型应用过程,根据模型要求逬行数据预处理,建模,评价与应用;

【背景描述】

决策树与随机森林,属于监督学习,通过纯化指标的计算,确走分支方式,逐步构建成树形结构。决策树由节点(node )和有向边(directed edge )组成。节点的类型有两种:内部节点和叶子节点。具中,内部节点表示一个特征或属性的测试条件(用于分开具有不同特性的记录),叶子节点表示一个分类。

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本逬入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪_类被选择最多,就预测这个样本为那一类。

【知识准备】

了解决策树与随机森林模型的使用场景,数据标准。了解Python/Spark数据处理一般方法。了解spark模型调用,训练以及应用方法

【实验要求】

完成决策树和随机森林实验

【实验设备】

Windows或Linux操作系统的计算机。部署Spark r Python r本实验提供centos6.8环境。【实验说明】

采用UCI机器学习库中的wine数据集作为算法数据,训练决策树与随机森林模型,对样本进行聚类。

【实验坏境】

Spark 23.1 r Pyrhon3.X ,实验在命令行pyspark中进行,或者把代码写在py脚本,由于本次为实验,以学习模型为主,所以在命令行中逐步执行代码,以便更加清晰地了解整个建模流程。【实验步骤】第一步:启动pyspark :

命令行中键入pyspark -master local[4],本地模式启动spark与python :

第二步:导入用到的包#并读取数据:

⑴•将所需导入的包键入Spark Shell中,具体命令:

from pyspark import SparkConf, SparkContext

from pyspark.mllib.evaluation import MulticlassMetrics from pyspark.mllib.tree import Decisi on Tree, RandomForest

from pyspark.mllib.regression import LabeledPoint

(2).读取数据源,具体命令(第一行由于word文档篇幅受限在Spark Shell中必须将他复制成一行, 否则会报语法错误,其他命令建议一行一行复制),数据源存放目录为

/opt/algorithm/decisionTreeAndRandomForest/wine.txt:

wine-rdd=sc.textFile(u,,file:/opt/algorithm/decisionTreeAndRandomForest/wine.txt").map(l ambda x: str(x).split(,'/")).map(lambda x: [float(z) for z in x])

data = wine-rdd.map(lambda x: LabeledPoint(x[0] - l t (x[l:])))

(trainData, testData) = data.randomSplit([8O 2.0])

»> from pyspark import SparkConf, SparkContext

»> from pyspark.mllib•亡valuation iirport MulticlassMetrics

from pyspark.mllib.tree import DecisionTree, R«andomForest

>» from pyspark.mllib. reg ression iirpor t Labe led Poi nt

»> #读取数据

…• wine^rdd = sc. textFile(u'^ilei/data/laboratory/wine.txt").map(

... lambda x: str(x) .split (,a f11>) .nap (lambda x: [f loat (z) for z in x]) >» # 转换为Labeled Point

• data = wine_rdd.map(Lambda x: LabeledPaint(x[0] - l f (x [1:])))

»> #数据集划芬

...(trainData F testData) = data.randomSplitC[8.0, 2.0])

第三步:构建模型并应用在测试集,输出测试集准确率

具体命令如下:

(1) •建立决策树模型

model = DecisionTree.trai nClassifier(trainData f

numClasses=3/

categoricalFeaturesInfo={}r

impurity—gini:

maxDepth=5r

maxBins=32f

minInstancesPerNode=l/

minInfoGain=0.0

⑵利用建立好的模型做预测

predictions = model.predict(testData.map(lambda x: x.features)) predictionsAndLabels = predictions.zip(testData.map(lambda x: x」abel)) metrics = MulticlassMetrics(predictionsA ndLabels)

⑶•打印预测信息

print(H DecisionTree w + str(metrics.precision()))

>» m决?s剧------------------

•・・审建立决忻蟆型

・・・ rodcl - DccisionTrce・

・・・nunClasie2=3, t晏别的数忖

・・・categoncalFeatureslnfo=O r t畏曲奇定类别安■,如茨示第介个交盘为楊称企共k个但・・・itipurity-'Qini1, « (SSflffi计段方透,可逸在用厲与4尼不现度,总认4尼不呃度

・・・macDep令h=5. *材51人滉废

•・・naxBins=32f v袴征切剖区何鸽牝个滋

... minlnstanccsPcrNodc-l. #岂节点中邑含样本■小于这个備•削逐帀点不令畀彼龙分

・・・ninlnfo6oin=e.0 #当节点的信見裟总小于这个(1,(11访节煖不

・・・丨

#冃用强血好釣響毘仪汝汕

・・・ predictions = nodel・ptwtDdto・Fidp(lonbdd x: x・feotures))

»> predic11 onsAftdLabels = predictions・2ip(tei.tData.r*2p(lanbda x: bel))

retries - H J U IC lassNct rics (predict lonsAnd La be Is)

>» print '•OccisionTrcc 11, nctrics.prctisiorH)

DeclSionTree 0.966666666667

相关文档
最新文档