Data Story

데이터 사이언스, 쉽게 설명하기

Spark

Spark - [Regression Analysis]

_data 2022. 12. 11. 18:11

Regression Analysis

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("lr_ex").getOrCreate()
from pyspark.ml.regression import LinearRegression
data = spark.read.csv("../Ecommerce_Customer.csv", inferSchema=True, header=True)

그림 1

data.select("Avg Session Length", "Time on App").show()

직관적으로 한 행을 출력해보자.

그림 2

for col, item in zip(data.columns, data.head(1)[0]):
	print(col, ":", item)

VectorAssembler

사용할 변수를 묶어주기 위해서 VectorAssmbler을 사용한다.

데이터의 컬럼은 [그림 3]과 같다.

그림 3

이제 VectorAssembler에 컬럼을 넣어주고, 이 묶음의 이름을 features로 지정하자.

#for numeric variables
assmbler = VectorAssembler(inputCols = ["Avg Session Length","Time on App","Time On Website",'Length of Membership'],
							outputCol ='features')

data를 변형해주고 한 행을 보자.

아래 [그림 4]에서 맨 끝 'features'가 보이는데 4개의 변수가 들어간 것이 보인다. 소수점 넷 째자리까지 표현이 된다.

그림 4

output = assembler.transform(data)
output.head(1)

독립변수 x와 종속변수 y를 추출하자.

그림 5

#X,y
final_data = output.select("features", "Yearly Amount Spent")
final_data.show()

Train Test Split

훈련 데이터와 테스트 데이터를 분리할 수 있다.

그림 6

#train test = 7 : 3
train_data, test_data = final_data.randomSplit([.7,.3], seed=42) 

train_data.describe().show()
test_data.describe().show()

Linear Model

선형 모델을 구축할 수 있다.

1. LinearRegression

lr = LinearRegression(featuresCol = "features", labelCol = "Yearly Amount Spent")

2. Fitting

lr_model = lr.fit(train_data)

3. Evaluate

test_results = lr_model.evaluate(test_data)

4. Residuals & Metrics

#residulas
test_results.residuals.show()

#RMSE
test_results.rootMeanSquaredError

#R^2
test_results.r2

Prediction

실제로 독립변수를 가지고 예측을 할 수 있다.

먼저, 데이터의 레이블을 없애주는 과정을 해주자.

unlabeld_data = test_data.select("features")

다음, 예측해보자.

그림 7

pred = lr_model.transform(unlabeld_data)
pred.show()

 

'Spark' 카테고리의 다른 글

Spark - [Clustering]  (0) 2022.12.12
Spark - [Tree Model]  (0) 2022.12.12
Spark - [Logistic Regression]  (0) 2022.12.11
Spark - Basic  (0) 2022.12.08
Spark - [pyspark]  (0) 2022.12.08