2016-11-14 71 views
0

我正在訓練Spark中的邏輯迴歸。但是,由於我的訓練數據中有細節,我需要以後手動調整模型,即更改截距。調整Spark DataFrame API邏輯迴歸模型的攔截

這是很容易做到與RDD API - 只是實例化一個新的LogisticRegressionModel:

val intercept = model.intercept() + adjustment 
val model = new LogisticRegressionModel(model.weights(), intercept) 

然而,數據幀API中的LogisticRegressionModel構造製成私人。我怎樣才能對模型進行手動調整?

回答

0

我今天下午有同樣的問題,我處於測試模式,試圖讓它發生,不管是什麼,所以我不在乎它有多骯髒:從你的模型中獲取係數,獲取截距,調整它,然後用你在火花中使用的code進行預測(查找BLAS.dotmarginscore)。在某些時候,他們使用BLAS.dot,以及BLAS是私人的火花。再次做同樣的事情,檢索代碼dot,處理SparseVector/DenseVector,你可以做到這一點。髒,但它的作品。

+0

或者您可以分叉Spark並添加您自己的可以移動截距的參數的複製功能。這也起作用。可能更漂亮。 –

+0

顯然,它可以通過反射更簡單(仍然很髒): 'val modelClass = classOf [LogisticRegressionModel]; val const = modelClass.getDeclaredConstructor(classOf [String],classOf [Vector],classOf [Double]); val intercept = trained.intercept - adjustment; val newModel = const.newInstance(trained.uid,trained.coefficients,intercept:java.lang.Double))' –