决策树和随机森林实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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