나는 Spark와 Python을 처음 접한다. 저는 Spark를 사용하여 단지 2 개의 클래스 (0과 1)로 Logistic Regression 모델을 교육 시켰습니다. 나는 기차 데이터 프레임을 사용하여 그것을 훈련했다. 내 lr_predictions이처럼 보이는 열 '가능성'이 지금바이너리 분류를위한 스파크 로지스틱 회귀 : 2 클래스를 예측하기위한 새로운 임계 값 적용
lr_predictions = lrModel.transform(test)
: 내 테스트 dataframe을 사용하여 예측을 실행
다음# Model definition:
lr = LogisticRegression(featuresCol = "lr_features", labelCol = "targetvar")
# Pipeline definition:
lr_pipeline = Pipeline(stages = indexStages + encodeStages +[lr_assembler, lr])
# Fit the logistic regression model:
lrModel = lr_pipeline.fit(train)
:
이 내 파이프 라인 모델을 정의하는 방법이다 중첩 목록. 예를 들어 첫 번째 셀의 내용은 다음과 같습니다. [1,2, [], [0.88,0.11]]
클래스 1 (= 0)의 확률은 0.88, 클래스 2의 확률 (= 1)은 0.11이다. 은 F-측정을 극대화 기본적으로
fMeasure = lr_summary.fMeasureByThreshold
bestThreshold = fMeasure.orderBy(fMeasure['F-Measure'].desc()).first().threshold
I bestThreshold를 '확률'열에 적용하고 bestThreshold를 기준으로 0.5에 반하는 클래스 할당 (0 또는 1)을 포함하는 새로운 열 (예 : 'pred_new')을 얻고 싶습니다.
나는 아래의 코드를 사용할 수 없습니다 '확률'열이 너무 복잡하기 때문에 :
from pyspark.sql.functions import when
lr_predictions = lr_predictions.withColumn("prob_best", \
when(lr_predictions["probability"] >= bestThreshold, 1).otherwise(0)
는 내가 새로운 임계 값을 기반으로 새 컬럼에 '확률'을 매핑해야합니다 생각합니다. 그러나 '확률'열의이 복잡한 구조를 감안할 때 어떻게해야할지 모르겠습니다.
많은 조언을 주셔서 감사합니다.
(+1) ...! – desertnaut