1. 程式人生 > >MLlib--多層感知機(MLP)演算法原理及Spark MLlib呼叫例項(Scala/Java/Python)

MLlib--多層感知機(MLP)演算法原理及Spark MLlib呼叫例項(Scala/Java/Python)

來源:http://blog.csdn.net/liulingyuan6/article/details/53432429

多層感知機

演算法簡介:

        多層感知機是基於反向人工神經網路(feedforwardartificial neural network)。多層感知機含有多層節點,每層節點與網路的下一層節點完全連線。輸入層的節點代表輸入資料,其他層的節點通過將輸入資料與層上節點的權重w以及偏差b線性組合且應用一個啟用函式,得到該層輸出。多層感知機通過方向傳播來學習模型,其中我們使用邏輯損失函式以及L-BFGS。K+1層多層感知機分類器可以寫成矩陣形式如下:

 

中間層節點使用sigmoid方程:

 

輸出層使用softmax方程:

 

輸出層中N代表類別數目。

引數:

featuresCol:

型別:字串型。

含義:特徵列名。

labelCol:

型別:字串型。

含義:標籤列名。

layers:

型別:整數陣列型。

含義:層規模,包括輸入規模以及輸出規模。

maxIter:

型別:整數型。

含義:迭代次數(>=0)。

predictionCol:

型別:字串型。

含義:預測結果列名。

seed:

型別:長整型。

含義:隨機種子。

stepSize:

型別:雙精度型。

含義:每次迭代優化步長。

tol:

型別:雙精度型。

含義:迭代演算法的收斂性。

示例:

Scala:

  1. import org.apache.spark.ml.classification.MultilayerPerceptronClassifier  
  2. import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator  
  3. // Load the data stored in LIBSVM format as a DataFrame.  
  4. val data = spark.read.format("libsvm")  
  5.   .load("data/mllib/sample_multiclass_classification_data.txt")  
  6. // Split the data into train and test  
  7. val splits = data.randomSplit(Array(0.6, 0.4), seed = 1234L)  
  8. val train = splits(0)  
  9. val test = splits(1)  
  10. // specify layers for the neural network:  
  11. // input layer of size 4 (features), two intermediate of size 5 and 4  
  12. // and output of size 3 (classes)  
  13. val layers = Array[Int](4, 5, 4, 3)  
  14. // create the trainer and set its parameters  
  15. val trainer = new MultilayerPerceptronClassifier()  
  16.   .setLayers(layers)  
  17.   .setBlockSize(128)  
  18.   .setSeed(1234L)  
  19.   .setMaxIter(100)  
  20. // train the model  
  21. val model = trainer.fit(train)  
  22. // compute accuracy on the test set  
  23. val result = model.transform(test)  
  24. val predictionAndLabels = result.select("prediction", "label")  
  25. val evaluator = new MulticlassClassificationEvaluator()  
  26.   .setMetricName("accuracy")  
  27. println("Accuracy: " + evaluator.evaluate(predictionAndLabels))  

Java:
  1. import org.apache.spark.sql.Dataset;  
  2. import org.apache.spark.sql.Row;  
  3. import org.apache.spark.sql.SparkSession;  
  4. import org.apache.spark.ml.classification.MultilayerPerceptronClassificationModel;  
  5. import org.apache.spark.ml.classification.MultilayerPerceptronClassifier;  
  6. import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator;  
  7. // Load training data
  8. String path = "data/mllib/sample_multiclass_classification_data.txt";  
  9. Dataset<Row> dataFrame = spark.read().format("libsvm").load(path);  
  10. // Split the data into train and test
  11. Dataset<Row>[] splits = dataFrame.randomSplit(newdouble[]{0.60.4}, 1234L);  
  12. Dataset<Row> train = splits[0];  
  13. Dataset<Row> test = splits[1];  
  14. // specify layers for the neural network:
  15. // input layer of size 4 (features), two intermediate of size 5 and 4
  16. // and output of size 3 (classes)
  17. int[] layers = newint[] {4543};  
  18. // create the trainer and set its parameters
  19. MultilayerPerceptronClassifier trainer = new MultilayerPerceptronClassifier()  
  20.   .setLayers(layers)  
  21.   .setBlockSize(128)  
  22.   .setSeed(1234L)  
  23.   .setMaxIter(100);  
  24. // train the model
  25. MultilayerPerceptronClassificationModel model = trainer.fit(train);  
  26. // compute accuracy on the test set
  27. Dataset<Row> result = model.transform(test);  
  28. Dataset<Row> predictionAndLabels = result.select("prediction""label");  
  29. MulticlassClassificationEvaluator evaluator = new MulticlassClassificationEvaluator()  
  30.   .setMetricName("accuracy");  
  31. System.out.println("Accuracy = " + evaluator.evaluate(predictionAndLabels));  

Python:
  1. from pyspark.ml.classification import MultilayerPerceptronClassifier  
  2. from pyspark.ml.evaluation import MulticlassClassificationEvaluator  
  3. # Load training data
  4. data = spark.read.format("libsvm")\  
  5.     .load("data/mllib/sample_multiclass_classification_data.txt")  
  6. # Split the data into train and test
  7. splits = data.randomSplit([0.60.4], 1234)  
  8. train = splits[0]  
  9. test = splits[1]  
  10. # specify layers for the neural network:
  11. # input layer of size 4 (features), two intermediate of size 5 and 4
  12. # and output of size 3 (classes)
  13. layers = [4543]  
  14. # create the trainer and set its parameters
  15. trainer = MultilayerPerceptronClassifier(maxIter=100, layers=layers, blockSize=128, seed=1234)  
  16. # train the model
  17. model = trainer.fit(train)  
  18. # compute accuracy on the test set
  19. result = model.transform(test)  
  20. predictionAndLabels = result.select("prediction""label")  
  21. evaluator = MulticlassClassificationEvaluator(metricName="accuracy")  
  22. print("Accuracy: " + str(evaluator.evaluate(predictionAndLabels)))