data = [(1.0, 0.1, 0.2), (0.0, 0.4, 0.5), (1.0, 0.2, 0.3), (0.0, 0.3, 0.4)]
columns = ["label", "feature1", "feature2"]
df = spark.createDataFrame(data, columns)
# 특징 벡터 생성
assembler = VectorAssembler(inputCols=["feature1", "feature2"], outputCol="features")
df = assembler.transform(df)
# 로지스틱 회귀 모델 생성
lr = LogisticRegression(featuresCol="features", labelCol="label")
# 파이프라인 생성
pipeline = Pipeline(stages=[lr])
# 모델 피팅
model = pipeline.fit(df)
# 예측 결과 얻기
predictions = model.transform(df)
# 모델의 로그 우도 가져오기
objective_history = model.stages[-1].summary.objectiveHistory
log_likelihood = -objective_history[-1] # 마지막 값이 최종 로그 우도
# 샘플 수
num_samples = df.count()
# 모델의 매개변수 수
num_params = len(model.stages[-1].coefficients) + 1 # 계수의 개수 + intercept
# AIC 계산
aic = -2 * log_likelihood + 2 * num_params
# BIC 계산
bic = -2 * log_likelihood + num_params * np.log(num_samples)
print("AIC:", aic)
print("BIC:", bic)
300x250
반응형
'Data Science > Statistic' 카테고리의 다른 글
VIF(Variance Infalation Factor)로 다중공선성(Multicollinearity) 탐지하기(ft.Pyspark) (0) | 2024.01.05 |
---|