當前位置: 首頁>>技術教程>>正文


pyspark RandomForest的分類和回歸示例

pyspark中的RandomForest,也就是隨機森林,既可以訓練分類模型,也可以訓練回歸模型,下麵分別介紹。

RandomForest分類

使用RondomForest建立分類模型,需要使用下麵的方法:

trainClassifier(data, numClasses, categoricalFeaturesInfo, numTrees, featureSubsetStrategy='auto', impurity='gini', maxDepth=4, maxBins=32, seed=None)

trainClassifier參數說明

  • data – 訓練數據集:LabeledPoint的RDD。標簽取值範圍{0, 1, …, numClasses-1}。
  • numClasses – 用於分類的類數, 可以支持二分類,也可以支持多分類。
  • categoricalFeaturesInfo – 存儲類別特征的Map。條目(n -> k )表示特征n被k個類別分類,索引編號 {0, 1, …, k-1}。
  • numTrees – 隨機森林中的樹數目。
  • featureSubsetStrategy – 分裂每個節點需要考慮的特征數。支持的值:“auto”, “all”, “sqrt”, “log2”, “onethird”。如果設置為“auto”,則該參數根據numTrees設置:如果numTrees == 1,設置為“all”;如果numTrees> 1(forest)設置為“sqrt”。 (默認值:“auto”)
  • impurity – 用於信息增益計算的標準。支持的值:“gini”或“ entropy”。 (默認:“gini”)
  • maxDepth – 樹的最大深度(例如深度0表示1個葉節點,深度1表示1個內部節點+ 2個葉節點)。 (默認值:4)
  • maxBins – 用於分割特征的最大bin數量。 (默認值:32)
  • seed – 用於自舉和選擇特征子集的隨機種子。設置為None則根據係統時間設置種子。 (默認值:None)
  • 返回值:可用於預測的RandomForestModel。

分類的示例

>>> from pyspark.mllib.regression import LabeledPoint
>>> from pyspark.mllib.tree import RandomForest
>>>
>>> data = [
...     LabeledPoint(0.0, [0.0]),
...     LabeledPoint(0.0, [1.0]),
...     LabeledPoint(1.0, [2.0]),
...     LabeledPoint(1.0, [3.0])
... ]
### 分類模型訓練
>>> model = RandomForest.trainClassifier(sc.parallelize(data), 2, {}, 3, seed=42)
>>> model.numTrees()
3
>>> model.totalNumNodes()
7
>>> print(model)
TreeEnsembleModel classifier with 3 trees
### 輸出模型內容(樹狀結構)
>>> print(model.toDebugString())
TreeEnsembleModel classifier with 3 trees

  Tree 0:
    Predict: 1.0
  Tree 1:
    If (feature 0 <= 1.0)
     Predict: 0.0
    Else (feature 0 > 1.0)
     Predict: 1.0
  Tree 2:
    If (feature 0 <= 1.0)
     Predict: 0.0
    Else (feature 0 > 1.0)
     Predict: 1.0
### 分類預測
>>> model.predict([2.0])
1.0
>>> model.predict([0.0])
0.0
>>> rdd = sc.parallelize([[3.0], [1.0]])
>>> model.predict(rdd).collect()
[1.0, 0.0]

RomdomForest回歸

使用RondomForest建立回歸模型,需要使用下麵的方法:

trainRegressor(data, categoricalFeaturesInfo, numTrees, featureSubsetStrategy='auto', impurity='variance', maxDepth=4, maxBins=32, seed=None)

trainRegressor參數說明

  • data – 訓練數據集:LabeledPoint的RDD。標簽是實數。
    分類categoricalFeaturesInfo信息 – 存儲類別特征的Map。條目(n -> k )表示特征n被k個類別分類,索引編號 {0, 1, …, k-1}。
  • numTrees – 隨機森林中的樹數目。
  • featureSubsetStrategy – 分裂每個節點需要考慮的特征數。支持的值:“auto”, “all”, “sqrt”, “log2”, “onethird”。如果設置為“auto”,則該參數根據numTrees設置:如果numTrees == 1,設置為“all”;如果numTrees> 1(forest)設置為“onethird”進行回歸。 (默認值:“auto”)
  • impurity – 用於信息增益計算的標準。唯一支持的回歸值是“variance”。 (默認值:“ variance”)
  • maxDepth – 樹的最大深度(例如深度0表示1個葉節點,深度1表示1個內部節點+ 2個葉節點)。 (默認值:4)
  • maxBins – 用於分割特征的最大bin數量。 (默認值:32)
  • seed – 用於自舉和選擇特征子集的隨機種子。設置為None則根據係統時間設置種子。 (默認值:None)
  • 返回值:可用於預測的RandomForestModel。

回歸的示例

>>> from pyspark.mllib.regression import LabeledPoint
>>> from pyspark.mllib.tree import RandomForest
>>> from pyspark.mllib.linalg import SparseVector
>>>
>>> sparse_data = [
...     LabeledPoint(0.0, SparseVector(2, {0: 1.0})),
...     LabeledPoint(1.0, SparseVector(2, {1: 1.0})),
...     LabeledPoint(0.0, SparseVector(2, {0: 1.0})),
...     LabeledPoint(1.0, SparseVector(2, {1: 2.0}))
... ]
>>>
### 回歸模型訓練
>>> model = RandomForest.trainRegressor(sc.parallelize(sparse_data), {}, 2, seed=42)
>>> model.numTrees()
2
>>> model.totalNumNodes()
4
### 回歸預測
>>> model.predict(SparseVector(2, {1: 1.0}))
1.0
>>> model.predict(SparseVector(2, {0: 1.0}))
0.5
>>> rdd = sc.parallelize([[0.0, 1.0], [1.0, 0.0]])
>>> model.predict(rdd).collect()
[1.0, 0.5]

random_forest

pyspark RandomForest的最新介紹參見:RandomForest

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/3353.html,轉載請注明來源鏈接。