카테고리 없음
Spark와 MLlib를 사용하여 (원래 라벨, 예측 라벨)의 튜플을 생성하는 방법은 무엇인가요?
스택큐힙리스트
2023. 12. 1. 00:02
반응형
저는 MLlib의 Spark에서 받은 모델을 사용하여 예측을 하려고 합니다. 목표는 (원래 데이터의 레이블, 예측된 레이블)의 튜플을 생성하는 것입니다. 그런 다음 이러한 튜플을 모델 평가 목적으로 사용할 수 있습니다. 이를 얻기 위한 가장 좋은 방법은 무엇인가요? 감사합니다.
parsedTrainData가 LabeledPoint의 RDD인 것으로 가정합니다.
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.tree import DecisionTree, DecisionTreeModel
from pyspark.mllib.util import MLUtils
parsedTrainData = sc.parallelize([LabeledPoint(1.0, [11.0,-12.0,23.0]),
LabeledPoint(3.0, [-1.0,12.0,-23.0])])
model = DecisionTree.trainClassifier(parsedTrainData, numClasses=7,
categoricalFeaturesInfo={}, impurity='gini', maxDepth=8, maxBins=32)
model.predict(parsedTrainData.map(lambda x: x.features)).take(1)
이렇게 하면 예측값이 나오지만, 각 예측값을 데이터의 원래 레이블과 일치시키는 방법을 잘 모르겠습니다.
다음과 같이 시도해보았습니다.
parsedTrainData.map(lambda x: (x.label, dtModel.predict(x.features))).take(1)
그러나, 여기에서 작업자에게 모델을 보내는 내 방식은 유효하지 않은 것으로 보입니다.
/spark140/python/pyspark/context.pyc in __getnewargs__(self)
250 # 이 메서드는 SparkContext를 pickle화하려고 시도할 때 호출됩니다. 하지만 이는 항상 오류입니다:
251 raise Exception(
--> 252 브로드캐스트 변수, 액션 또는 변환에서 SparkContext를 참조하려고 하는 것으로 보입니다. SparkContext는 드라이버에서만 사용할 수 있으며 작업자에서 실행되는 코드에는 사용할 수 없습니다. 자세한 정보는 SPARK-5063 을 참조하세요.
Exception: 브로드캐스트 변수, 액션 또는 변환에서 SparkContext를 참조하려고 하는 것으로 보입니다. SparkContext는 드라이버에서만 사용할 수 있으며 작업자에서 실행되는 코드에는 사용할 수 없습니다. 자세한 정보는 SPARK-5063을 참조하세요.
답변 1
음, 공식 문서에 따르면 예측과 레이블을 다음과 같이 간단히 압축할 수 있습니다:
predictions = model.predict(parsedTrainData.map(lambda x: x.features))
labelsAndPredictions = parsedTrainData.map(lambda x: x.label).zip(predictions)
답변 2
스파크(Spark) 및 MLlib을 사용하여 (원래 레이블, 예측된 레이블) 유형의 튜플을 생성하는 방법에 대해 알아보겠습니다. 빅데이터 처리 및 머신러닝 작업을 용이하게 해주는 스파크는 많은 기업과 연구자들에게 인기가 있는 프레임워크입니다. MLlib은 스파크의 머신러닝 라이브러리로, 분류, 회귀, 군집화 등 다양한 작업을 지원합니다.우리가 다루고자 하는 문제는, 원래 레이블과 예측된 레이블 간의 관계를 튜플로 생성하는 것입니다. 이를 위해 MLlib의 분류 알고리즘을 사용하여 레이블을 예측하고, 예측된 레이블과 원래 레이블을 튜플로 생성합니다.
먼저, 예측에 사용할 데이터를 로드하여 스파크 데이터프레임을 생성합니다. 스파크는 다양한 데이터 포맷을 지원하며, 예제를 위해 CSV 파일을 사용해보도록 하겠습니다. `spark.read.csv()` 함수를 사용하여 데이터를 로드합니다.
```python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName(TupleGeneration).getOrCreate()
# 데이터 로드
data = spark.read.csv(path_to_data.csv, header=True, inferSchema=True)
```
데이터를 로드한 후, MLlib의 분류 알고리즘을 선택합니다. 분류 문제의 예시를 들어보면, 이진 분류 문제에서는 로지스틱 회귀 알고리즘이 일반적으로 사용되며, 다중 클래스 분류 문제에서는 랜덤 포레스트나 그래디언트 부스팅 트리 알고리즘이 일반적으로 사용됩니다. 각각의 분류 알고리즘은 MLlib에서 제공되므로 `pyspark.ml.classification` 패키지에서 해당 알고리즘을 가져올 수 있습니다.
```python
from pyspark.ml.classification import LogisticRegression
# 로지스틱 회귀 알고리즘 초기화
lr = LogisticRegression()
```
이제 데이터를 학습 데이터와 테스트 데이터로 분할해야 합니다. 데이터를 분할하려면 `randomSplit()` 함수를 사용하면 됩니다.
```python
# 데이터 분할
trainData, testData = data.randomSplit([0.7, 0.3], seed=42)
```
데이터를 분할 한 후, `fit()` 메서드를 호출하여 모델을 학습시킵니다.
```python
# 모델 학습
model = lr.fit(trainData)
```
모델을 학습시킨 후, 테스트 데이터를 사용하여 예측을 수행합니다.
```python
# 예측 수행
predictions = model.transform(testData)
```
위의 코드에서 `predictions` 데이터프레임은 테스트 데이터에 대한 예측 결과를 포함합니다. 이제 이 결과를 튜플로 변환하는 작업을 수행해야 합니다. `rdd()` 함수를 사용하여 데이터프레임을 RDD로 변환합니다. 그런 다음 `map()` 함수를 사용하여 각 행을 튜플로 변환합니다.
```python
# 예측 결과를 튜플로 변환
prediction_tuples = predictions.rdd.map(lambda row: (row.label, row.prediction))
```
마지막으로, `collect()` 함수를 사용하여 튜플의 모든 요소를 로컬 컬렉션으로 수집할 수 있습니다.
```python
# 튜플을 수집
result = prediction_tuples.collect()
```
이제 `result` 변수에는 (원래 레이블, 예측된 레이블) 형태의 튜플들이 포함되어 있습니다. 이를 원하는 방식으로 저장하거나 분석에 활용할 수 있습니다.
이와 같은 방법으로 MLlib을 사용하여 스파크에서 (원래 레이블, 예측된 레이블) 튜플을 생성할 수 있습니다. 이를 통해 머신러닝 모델의 정확성 평가, 오류 분석 등 다양한 작업을 수행할 수 있습니다. 성능에 기여하는 키워드를 사용하여 이 SEO 친화적인 한국어 에세이를 작성하였으며, 스파크와 MLlib을 사용하여 데이터 처리와 머신러닝 작업을 보다 쉽게 수행할 수 있습니다.
반응형