該樣例取自spark高階資料分析第四章的內容,資料集來自 r2wmisi,包含乙個 csv 格式的壓縮資料檔案 covtype.data.gz,附帶乙個描述資料檔案的 資訊檔案 covtype.info
spark mllib將特徵向量抽象為labeledpoint,它由乙個包含多個特徵值的spark mllib vector 和乙個稱為標號(label)的目標值組成。該目標為 double 型別,而 vector 本質上 是對多個 double 型別值的抽象。這說明 labeledpoint 只適用於數值型特徵。但只要經過 適當編碼,labeledpoint 也可用於類別型特徵。另乙個就是對於非數值類特徵取one-hot編碼,例如天氣分為晴天、陰天、下雨,今天天氣晴朗則100見**:
package com.demo.rdf
import org.apache.spark.ml.evaluation.binaryclassificationevaluator
import org.apache.spark.mllib.evaluation.
import org.apache.spark.mllib.linalg.vector
import org.apache.spark.mllib.linalg.vectors
import org.apache.spark.mllib.regression.labeledpoint
import org.apache.spark.mllib.tree.configuration.boostingstrategy
import org.apache.spark.mllib.tree.
import org.apache.spark.mllib.tree.model.
import org.apache.spark.rdd.rdd
import org.apache.spark
import org.apache.spark.
/** * created by leslie on 16/10/26.
*/object
runrdfs
val array(traindata,cvdata,testdata) = data.randomsplit(array(0.8,0.1,0.1))
traindata.cache();cvdata.cache();testdata.cache()
******decisiontree(traindata,cvdata)
randomclassifier(traindata,cvdata)
evaluate(traindata,cvdata,testdata)
} /**
* 建立乙個普通的決策樹
** @param traindata
* @param cvdata
*/def ******decisiontree(traindata:rdd[labeledpoint],cvdata:rdd[labeledpoint])=
/*** 隨即森林模型
** @param traindata
* @param cvdata
*/def randomclassifier(traindata:rdd[labeledpoint],cvdata:rdd[labeledpoint])=.sum
println(accurry)
} def gbdtclassifier(traindata:rdd[labeledpoint],cvdata:rdd[labeledpoint])=
} /**
* 決策樹調優 採用不同引數進行測驗
** @param traindata
* @param cvdata
* @param testdata
*/def evaluate(traindata:rdd[labeledpoint],cvdata:rdd[labeledpoint],testdata:rdd[labeledpoint])=
evaluations.sortby(_._2).reverse.foreach(println)
val model = decisiontree.trainclassifier(traindata.union(cvdata),7,map[int,int](),"entropy",20,300)
println(getmetrics(model,testdata).precision)
println(getmetrics(model,traindata.union(cvdata)).precision)
} /**
* 資料中類別型特徵使用one-hot編碼,這種編碼迫使決策樹演算法在底層要單獨考慮類別型特徵的每乙個值,
* 增加記憶體使用量並且減慢決策速度。我們取消one-hot編碼:
** @param rawdata
* @return
*/def unencodeonehot(rawdata:rdd[string]):rdd[labeledpoint]=
} /**
* 多組資料測試檢驗
** @param rawdata
*/def evaluatecategorical(rawdata:rdd[string])=
evaluations.sortby(_._2._2).reverse.foreach(println)
// val model = decisiontree.trainclassifier(
// traindata.union(cvdata), 7, map(10 -> 4, 11 -> 40), "entropy", 30, 300)
// println(getmetrics(model, testdata).precision)
//// traindata.unpersist()
// cvdata.unpersist()
// testdata.unpersist()
} def testcategorical(rawdata:rdd[string])=
/***
* @param rawdata
*/def evaluateforest(rawdata:rdd[string])=
def classprobabilities(data:rdd[labeledpoint]):array[double]=
/*** 個性化push的模型評估
* @param model
* @param data
* @return
*/def getmetric(model:gradientboostedtreesmodel,data:rdd[labeledpoint]):binaryclassificationmetrics=
new binaryclassificationmetrics(predicitandlabels)
} def getmetrics(model:gradientboostedtreesmodel,data:rdd[labeledpoint]):multiclassmetrics=
new binaryclassificationmetrics(predicitionandlabel)
new multiclassmetrics(predicitionandlabel)
} def getmetrics(model:decisiontreemodel,data:rdd[labeledpoint]):multiclassmetrics=
// new (pridictionandlabels)
new multiclassmetrics(pridictionandlabels)
}}
Spark MLlib例項 決策樹
spark mllib例項 決策樹 通俗來說,決策樹分類的思想類似於找物件。現想象乙個女孩的母親要給這個女孩介紹男朋友,於是有了下面的對話 女兒 多大年紀了?母親 26。女兒 長的帥不帥?母親 挺帥的。女兒 收入高不?母親 不算很高,中等情況。女兒 是公務員不?母親 是,在稅務局上班呢。女兒 那好,...
決策樹演算法
決策樹是一種樹型結構,其中每個內部結點表示在乙個屬性上的測試,每個分支代表乙個測試輸出,每個葉結點代表一種類別。決策樹學習是以例項為基礎的歸納學習,採用的是自頂向下的遞迴方法,其基本思想是以資訊熵為度量構造一棵熵值下降最快的樹,到葉子結點處的熵值為零,此時每個葉節點中的例項都屬於同一類。決策樹學習演...
決策樹演算法
本文主要介紹id3 c4.5和cart演算法 決策樹起源於概念學習系統 cls 概念學習模型 是乙個事先定義的範疇集合和一些有關例子是否落入給定範疇的判定 概念學習的主要任務 是判斷所給定事物的屬性或特性,並且正確地區分這些事物,將其劃分到某乙個範疇 對於如下決策樹模型 我們首先考慮他的屬性outl...