天天看點

保序回歸算法原理及Spark MLlib調用執行個體(Scala/Java/python)

保序回歸

算法介紹:

       保序回歸是回歸算法的一種。保序回歸給定一個有限的實數集合

保序回歸算法原理及Spark MLlib調用執行個體(Scala/Java/python)

 代表觀察到的響應,以及

保序回歸算法原理及Spark MLlib調用執行個體(Scala/Java/python)

 代表未知的響應值,訓練一個模型來最小化下列方程:

保序回歸算法原理及Spark MLlib調用執行個體(Scala/Java/python)

       其中

保序回歸算法原理及Spark MLlib調用執行個體(Scala/Java/python)

 ,

保序回歸算法原理及Spark MLlib調用執行個體(Scala/Java/python)

 為權重是正值。其結果方程稱為保序回歸,而且其解是唯一的。它可以被視為有順序限制下的最小二乘法問題。實際上保序回歸在拟合原始資料點時是一個單調函數。我們實作池旁者算法,它使用并行保序回歸。訓練資料是DataFrame格式,包含标簽、特征值以及權重三列。另外保序算法還有一個參數名為isotonic,其預設值為真,它指定保序回歸為保序(單調遞增)或者反序(單調遞減)。 

       訓練傳回一個保序回歸模型,可以被用于來預測已知或者未知特征值的标簽。保序回歸的結果是分段線性函數,預測規則如下:

1.如果預測輸入與訓練中的特征值完全比對,則傳回相應标簽。如果一個特征值對應多個預測标簽值,則傳回其中一個,具體是哪一個未指定。

2.如果預測輸入比訓練中的特征值都高(或者都低),則相應傳回最高特征值或者最低特征值對應标簽。如果一個特征值對應多個預測标簽值,則相應傳回最高值或者最低值。

3.如果預測輸入落入兩個特征值之間,則預測将會是一個分段線性函數,其值由兩個最近的特征值的預測值計算得到。如果一個特征值對應多個預測标簽值,則使用上述兩種情況中的處理方式解決。

參數:

featuresIndex:

類型:整數型。

含義:當特征列維向量時提供索引值,否則不進行處理。

featuresCol:

類型:字元串型。

含義:特征列名。

isotonic:

類型:布爾型。

含義:輸出序列為保序/增序(真)或者反序/降序(假)。

labelCol:

類型:字元串型。

含義:标簽列名。

predictionCol:

類型:字元串型。

含義:預測結果列名。

weightCol:

類型:字元串型。

含義:列權重。

調用示例:

Scala:

import org.apache.spark.ml.regression.IsotonicRegression

// Loads data.
val dataset = spark.read.format("libsvm")
  .load("data/mllib/sample_isotonic_regression_libsvm_data.txt")

// Trains an isotonic regression model.
val ir = new IsotonicRegression()
val model = ir.fit(dataset)

println(s"Boundaries in increasing order: ${model.boundaries}")
println(s"Predictions associated with the boundaries: ${model.predictions}")

// Makes predictions.
model.transform(dataset).show()
           

Java:

import org.apache.spark.ml.regression.IsotonicRegression;
import org.apache.spark.ml.regression.IsotonicRegressionModel;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;

// Loads data.
Dataset<Row> dataset = spark.read().format("libsvm")
  .load("data/mllib/sample_isotonic_regression_libsvm_data.txt");

// Trains an isotonic regression model.
IsotonicRegression ir = new IsotonicRegression();
IsotonicRegressionModel model = ir.fit(dataset);

System.out.println("Boundaries in increasing order: " + model.boundaries());
System.out.println("Predictions associated with the boundaries: " + model.predictions());

// Makes predictions.
model.transform(dataset).show();
           

Python:

from pyspark.ml.regression import IsotonicRegression, IsotonicRegressionModel

# Loads data.
dataset = spark.read.format("libsvm")\
    .load("data/mllib/sample_isotonic_regression_libsvm_data.txt")

# Trains an isotonic regression model.
model = IsotonicRegression().fit(dataset)
print("Boundaries in increasing order: " + str(model.boundaries))
print("Predictions associated with the boundaries: " + str(model.predictions))

# Makes predictions.
model.transform(dataset).show()
           

繼續閱讀