2016-09-05 63 views
1
evaluator = BinaryClassificationEvaluator() 
    grid = ParamGridBuilder().build() # no hyper parameter optimization 
    cv = CrossValidator(estimator=pipeline, estimatorParamMaps=grid, evaluator=evaluator) 
    cvModel = cv.fit(dataset) 
    evaluator.evaluate(cvModel.transform(dataset)) 

返回:爲什麼pyspark的BinaryClassificationEvaluator avgMetrics返回的值大於1?

  • cvModel.avgMetrics = [1.602872634746238]
  • evaluator.evaluate(cvModel.transform(dataset)) = 0.7267754950388204

問題:

  1. avgMetric怎麼能比1(1.6),如果它是ROC曲線下面積?
  2. 方案evaluateator.evaluate(cvModel.transform(dataset))實際上是否返回訓練度量而不是交叉驗證度量? (我們用dataset進行擬合和評估)

回答

2

這是一個bug,最近已經是fixed。但是,它尚未發佈。

根據您所提供的東西,我用下面的代碼複製問題:

from pyspark.ml.classification import LogisticRegression 
from pyspark.ml.evaluation import BinaryClassificationEvaluator 
from pyspark.ml.tuning import ParamGridBuilder, CrossValidator 
from pyspark.ml.linalg import Vectors 
from pyspark.sql.types import Row 

dataset = sc.parallelize([ 
    Row(features=Vectors.dense([1., 0.]), label=1.), 
    Row(features=Vectors.dense([1., 1.]), label=0.), 
    Row(features=Vectors.dense([0., 0.]), label=1.), 
]).toDF() 

evaluator = BinaryClassificationEvaluator(metricName="areaUnderROC") 
grid = ParamGridBuilder().addGrid('maxIter', [100, 10]).build() # no hyper parameter optimization 
cv = CrossValidator(estimator=LogisticRegression(), estimatorParamMaps=grid, evaluator=evaluator) 
cvModel = cv.fit(dataset) 
evaluator.evaluate(cvModel.transform(dataset)) 

Out[23]: 1.0 

cvModel.avgMetrics 

Out[34]: [2.0, 2.0] 

簡而言之,

avgMetrics有人總結,不平均,在折中

編輯:

關於第二問題,最簡單的驗證方法是提供測試數據集:

to_test = sc.parallelize([ 
    Row(features=Vectors.dense([1., 0.]), label=1.), 
    Row(features=Vectors.dense([1., 1.]), label=0.), 
    Row(features=Vectors.dense([0., 1.]), label=1.), 
]).toDF() 

evaluator.evaluate(cvModel.transform(to_test)) 

Out[2]: 0.5 

它確認函數調用返回測試數據集上的度量標準。

+0

謝謝,你能迴應第二個子彈嗎?方案evaluateator.evaluate(cvModel.transform(dataset))實際上是否返回訓練度量而不是交叉驗證度量? (我們使用數據集進行擬合和評估) –

+0

請參閱我的編輯。您不應該使用數據集進行火車/驗證。 – ShuaiYuan

+0

* * same *數據集:) – ShuaiYuan