通過天氣,溫度,風速3個特征,建立隨機森林,判斷特征的優先順序結果 天氣 溫度 風速結果(0否,1是)天氣(0晴天,1陰天,2下雨)溫度(0熱,1舒適,2冷)風速(0沒風,1微風,2大風)1 1:0 2:1 3:0結果去打球 1欄位:晴天 2欄位:溫度舒適 3欄位:風速沒風[hadoop@h201 p ...
通過天氣,溫度,風速3個特征,建立隨機森林,判斷特征的優先順序
結果 天氣 溫度 風速
結果(0否,1是)
天氣(0晴天,1陰天,2下雨)
溫度(0熱,1舒適,2冷)
風速(0沒風,1微風,2大風)
1 1:0 2:1 3:0
結果去打球 1欄位:晴天 2欄位:溫度舒適 3欄位:風速沒風
[hadoop@h201 pp]$ cat pp1.txt
1 1:0 2:1 3:0
0 1:2 2:2 3:2
1 1:0 2:0 3:0
1 1:0 2:0 3:1
1 1:0 2:1 3:1
1 1:0 2:1 3:1
1 1:0 2:1 3:0
0 1:1 2:2 3:2
0 1:1 2:2 3:2
0 1:2 2:2 3:2
0 1:2 2:1 3:1
0 1:2 2:1 3:2
0 1:1 2:2 3:2
1 1:0 2:1 3:0
本例子 用官方提供代碼進行更改完成
hadoop fs -put pp1.txt /
scala> import org.apache.spark.mllib.tree.RandomForest
scala> import org.apache.spark.mllib.tree.model.RandomForestModel
scala> import org.apache.spark.mllib.util.MLUtils
val data = MLUtils.loadLibSVMFile(sc, "hdfs://h201:9000/pp1.txt")
//標記點是將密集向量或者稀疏向量與應答標簽相關聯(結果),在MLlib中,標記點用於監督學習演算法。LIBSVM是林智仁教授等開發設計的一個簡單、易用和快速有效的SVM模式識別與回歸的軟體包。MLlib已經提供了MLUtils.loadLibSVMFile方法讀取存儲在LIBSVM格式文本文件中的訓練數據
//數據格式 :空格分割,第一部分為結果,後面為特征向量
scala> val splits = data.randomSplit(Array(0.7, 0.3))
scala> val (trainingData, testData) = (splits(0), splits(1))
scala> val numClasses = 2
//分類數
scala> val categoricalFeaturesInfo = Map[Int, Int]()
// categoricalFeaturesInfo 為空,意味著所有的特征為連續型變數
scala> val numTrees = 3
//樹的個數
scala> val featureSubsetStrategy = "auto"
//特征子集採樣策略,auto 表示演算法自主選取
scala> val impurity = "gini"
//以性別舉例:性別 :1-(1/2)^2-(1/2)^2 =0.5
scala> val maxDepth = 4
//樹的最大層次
scala> val maxBins = 32
//特征最大裝箱數
val model = RandomForest.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,
numTrees, featureSubsetStrategy, impurity, maxDepth, maxBins)
//訓練隨機森林分類器
val labelAndPreds = testData.map { point =>
val prediction = model.predict(point.features)
(point.label, prediction)
}
scala> val testErr = labelAndPreds.filter(r => r._1 != r._2).count.toDouble / testData.count()
scala> println("Test Error = " + testErr)
// 測試數據評價訓練好的分類器並計算錯誤率
scala> println("Learned classification forest model:\n" + model.toDebugString)
scala> model.save(sc, "myModelPath")
//持久化保存隨機森林
scala> val sameModel = RandomForestModel.load(sc, "myModelPath")
//載入隨機森林