Just Fighting

[PySpark] 나이브 베이즈 실습 본문

ML & DL

[PySpark] 나이브 베이즈 실습

yennle 2022. 6. 9. 16:41
728x90

데이터 불러오기는 아래 링크 참고▼

2022.02.24 - [Big Data] - [Spark] pyspark로 hdfs 데이터 불러오기

 

 

먼저 라이브러리부터 import

from pyspark.ml.classification import NaiveBayes
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml.feature import VectorAssembler

 

공식 문서에서는 아래 사진과 같은 데이터를 사용하기 때문에

바로 데이터를 분리하고 모델을 생성하지만 내가 가진 데이터는 그렇지 않기 때문에

VectorAssembler 과정을 거쳐야 한다. 

공식 문서
내가 가진 데이터

# feature 묶기
assembler = VectorAssembler(
    inputCols=data.columns[1:],
    outputCol="features")

data = assembler.transform(data)

'win'을 제외한 나머지 컬럼들을 하나로 묶어주고, 그 묶음을 다시 데이터에 추가한다.

 

 

그리고 데이터를 학습 데이터와 테스트 데이터로 분리!

# 데이터 분리
train_data, test_data = data.randomSplit(weights=[0.8, 0.2],  seed=13)

 

다음은 모델을 생성한다. 

modelType에는 multinomial, bernoulli, gaussian이 있다. 필요한 타입을 사용하면된다.

그리고 featuresCol에는 아까 묶었던 컬럼명을 써주고, labelCol에는 분류할 컬럼을 넣어주면 된다.

# 모델 생성 & 학습 - multinomial
nb = NaiveBayes(smoothing=1.0, modelType="multinomial", featuresCol='features',labelCol='win')
model = nb.fit(train_data)
# 샘플 출력
predictions = model.transform(test_data)
predictions.select(['win','prediction','probability']).show(20, False)

 

정확도를 측정해보자.

정확도는 그리 높진 않았다,,

# 정확도 측정
evaluator = MulticlassClassificationEvaluator(labelCol="win", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)
print("Test set accuracy = " + str(accuracy))

 

 

마지막으로 bernoulli를 한번 해보려고 했으나, 오류로 인해 실패^^

 

[참고]

https://spark.apache.org/docs/latest/ml-classification-regression.html#naive-bayes

https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.ml.classification.NaiveBayes.html#

 

728x90
Comments