다음으로는 원래 DataFrame의 20% 무작위 분할이었으며 트레이닝에 사용되지 않은 테스트 DataFrame을 사용하여 모델의 정확도를 측정합니다.
다음 코드에서는 파이프라인 단계에 따라 테스트 DataFrame을 통과하고 특성 추출 단계를 통해 모델 조정에 의해 선택된 랜덤 포레스트 모델을 추정한 다음 새 DataFrame의 열에서 예측을 반환하는 파이프라인 모델의 변환을 호출합니다.
val predictions = pipelineModel.transform(testData)
predictions.select("prediction", "medhvalue").show(5)
결과:
+------------------+---------+
| prediction|medhvalue|
+------------------+---------+
|104349.59677450571| 94600.0|
| 77530.43231856065| 85800.0|
|111369.71756877871| 90100.0|
| 97351.87386020401| 82800.0|
+------------------+---------+
With the predictions and labels from the test data, we can now evaluate the model. To evaluate the linear regression model, you measure how close the predictions values are to the label values. The error in a prediction, shown by the green lines below, is the difference between the prediction (the regression line Y value) and the actual Y value, or label. (Error = 예측-레이블).
평균 절대 오차(MAE)는 레이블과 모델 예측 간의 절대적인 차이의 평균입니다. 절대 징후는 부정적인 징후를 제거합니다.
MAE = 합계(절대(예측 레이블)) / 관측 수).
The Mean Square Error (MSE) is the sum of the squared errors divided by the number of observations. The squaring removes any negative signs and also gives more weight to larger differences. (MSE = 합계(제곱(예측 레이블)) / 관측 수).
루트 평균 제곱 오류(RMSE)는 MSE의 제곱근입니다. RMSE는 예측 오류의 표준 편차입니다. 오류는 회귀선 레이블 데이터 포인트에서 얼마나 멀리 떨어져 있는지에 대한 측정값이며, RMSE는 이러한 오류가 얼마나 산점되어 있는지 측정합니다.
The following code example uses the DataFrame withColumn transformation, to add a column for the error in prediction: error=예측-medhvalue. 그런 다음 예측, 중위 집값 및 오류(1천 달러 단위)에 대한 요약 통계를 표시합니다.
predictions = predictions.withColumn("error",
col("prediction")-col("medhvalue"))
predictions.select("prediction", "medhvalue", "error").show
결과:
+------------------+---------+-------------------+
| prediction|medhvalue| error|
+------------------+---------+-------------------+
| 104349.5967745057| 94600.0| 9749.596774505713|
| 77530.4323185606| 85800.0| -8269.567681439352|
| 101253.3225967887| 103600.0| -2346.677403211302|
+------------------+---------+-------------------+
predictions.describe("prediction", "medhvalue", "error").show
결과:
+-------+-----------------+------------------+------------------+
|summary| prediction| medhvalue| error|
+-------+-----------------+------------------+------------------+
| count| 4161| 4161| 4161|
| mean|206307.4865123929|205547.72650805095| 759.7600043416329|
| stddev|97133.45817381598|114708.03790345002| 52725.56329678355|
| min|56471.09903814694| 26900.0|-339450.5381565819|
| max|499238.1371374392| 500001.0|293793.71945819416|
+-------+-----------------+------------------+------------------+
다음 코드 예제에서는 Spark RegressionEvaluator를 사용하여 36636.35(1천 달러 단위)를 반환하는 예측 DataFrame에서 MAE를 계산합니다.
val maevaluator = new RegressionEvaluator()
.setLabelCol("medhvalue")
.setMetricName("mae")
val mae = maevaluator.evaluate(predictions)
결과:
mae: Double = 36636.35
다음 코드 예제에서는 Spark RegressionEvaluator를 사용하여 52724.70을 반환하는 예측 DataFrame에서 RMSE를 계산합니다.
val evaluator = new RegressionEvaluator()
.setLabelCol("medhvalue")
.setMetricName("rmse")
val rmse = evaluator.evaluate(predictions)
결과:
rmse: Double = 52724.70