회귀

PySpark로 하는 Machine Learning

Andrew Collier

Data Scientist, Fathom Data

소비량 대 질량: 산점도

연비 대비 질량 산점도

PySpark로 하는 Machine Learning

소비량 대 질량: 적합선

선형 적합선을 포함한 연비 대비 질량 산점도

PySpark로 하는 Machine Learning

소비량 대 질량: 대안 적합

선형 적합선과 대안들을 포함한 연비 대비 질량 산점도

PySpark로 하는 Machine Learning

소비량 대 질량: 잔차

선형 적합선과 잔차를 포함한 연비 대비 질량 산점도

PySpark로 하는 Machine Learning

손실 함수

 

 

평균제곱오차 손실 함수

MSE = "Mean Squared Error"

PySpark로 하는 Machine Learning

손실 함수: 관측값

 

 

평균제곱오차 손실 함수

$y_i$ — 관측값

PySpark로 하는 Machine Learning

손실 함수: 모델 값

 

 

평균제곱오차 손실 함수

$y_i$ — 관측값

$\hat{y_i}$ — 모델 값

PySpark로 하는 Machine Learning

손실 함수: 평균

 

 

평균제곱오차 손실 함수

$y_i$ — 관측값

$\hat{y_i}$ — 모델 값

PySpark로 하는 Machine Learning

예측 변수 결합

mass, cyl, type_dummyconsumption을 예측합니다.

예측 변수를 하나의 열로 합칩니다.

+------+---+-------------+----------------------------+-----------+
|mass  |cyl|type_dummy   |features                    |consumption|
+------+---+-------------+----------------------------+-----------+
|1451.0|6  |(5,[0],[1.0])|(7,[0,1,2],[1451.0,6.0,1.0])|9.05       |
|1129.0|4  |(5,[2],[1.0])|(7,[0,1,4],[1129.0,4.0,1.0])|6.53       |
|1399.0|4  |(5,[2],[1.0])|(7,[0,1,4],[1399.0,4.0,1.0])|7.84       |
|1147.0|4  |(5,[1],[1.0])|(7,[0,1,3],[1147.0,4.0,1.0])|7.84       |
|1111.0|4  |(5,[3],[1.0])|(7,[0,1,5],[1111.0,4.0,1.0])|9.05       |
+------+---+-------------+----------------------------+-----------+
PySpark로 하는 Machine Learning

회귀 모델 구축

from pyspark.ml.regression import LinearRegression

regression = LinearRegression(labelCol='consumption')

cars_train(훈련 데이터)에 적합합니다.

regression = regression.fit(cars_train)

cars_test(테스트 데이터)로 예측합니다.

predictions = regression.transform(cars_test)
PySpark로 하는 Machine Learning

예측 결과 확인

+-----------+------------------+
|consumption|prediction        |
+-----------+------------------+
|7.84       |8.92699470743403  |
|9.41       |9.379295891451353 |
|8.11       |7.23487264538364  |
|9.05       |9.409860194333735 |
|7.84       |7.059190923328711 |
|7.84       |7.785909738591766 |
|7.59       |8.129959405168547 |
|5.11       |6.836843743852942 |
|8.11       |7.17173702652015  |
+-----------+------------------+

예측값 vs 실제값 산점도

PySpark로 하는 Machine Learning

RMSE 계산

from pyspark.ml.evaluation import RegressionEvaluator

# Find RMSE (Root Mean Squared Error)
RegressionEvaluator(labelCol='consumption').evaluate(predictions)
0.708699086182001

RegressionEvaluator는 다음 지표도 계산합니다:

  • mae (평균절대오차)
  • r2 ($R^2$)
  • mse (평균제곱오차).
PySpark로 하는 Machine Learning

소비량 대 질량: 절편

모델 절편을 보여주는 그래프

PySpark로 하는 Machine Learning

절편 확인

regression.intercept
4.9450616833727095

이는 (가상의) 다음 조건에서의 연료 소비량입니다:

  • mass = 0
  • cyl = 0
  • 차량 유형은 'Van'
PySpark로 하는 Machine Learning

소비량 대 질량: 기울기

모델 기울기를 보여주는 그래프

PySpark로 하는 Machine Learning

계수 확인

regression.coefficients
DenseVector([0.0027, 0.1897, -1.309, -1.7933, -1.3594, -1.2917, -1.9693])
mass        0.0027
cyl         0.1897

Midsize    -1.3090
Small      -1.7933
Compact    -1.3594
Sporty     -1.2917
Large      -1.9693
PySpark로 하는 Machine Learning

숫자 예측을 위한 회귀

PySpark로 하는 Machine Learning

Preparing Video For Download...