데이터 분석/빅데이터 분석 기사

[빅분기 실기] 머신러닝 - 회귀문제

eunki 2022. 5. 24. 00:20
728x90

1. 분석 데이터 검토

# 행과 열 구조 확인
df.shape

# 기술통계 확인
df.describe()

# 히스토그램 확인
df.hist(bins=50, figsize=(20,15))

describe() : 평균과 중위수 일치정도, min/max, 이상치 확인

hist() : 정규분포와 유사한 형태인지 확인

 

 

 

2. 특성(x)과 레이블(y) 나누기

# 컬럼 이름으로 나누기
x = df[['컬럼명1', '컬럼명2', ...]]

# 컬럼 인덱스로 나누기
x = df[df.columns[0:5]]

# loc 함수로 나누기
x = df.loc[:, '컬럼명1':'컬럼명10']

# 목적변수
y = df[['value']]

 

 

 

3. train-test 데이터셋 나누기

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=42)

 

 

 

4. 정규화

① Min-Max 정규화 : 최솟값(min)은 모두 0이고, 최댓값(max)은 모두 1이다.

from sklearn.preprocessing import MinMaxScaler

scaler_minmax = MinMaxScaler()
# 학습 데이터로 기준 적용
scaler_minmax.fit(X_train)

# 훈련 데이터 변환
X_scaled_minmax_train = scaler_minmax.transform(X_train)
# 테스트 데이터 변환
X_scaled_minmax_test = scaler_minmax.transform(X_tset)

pd.DataFrame(X_scaled_minmax_train).describe()

 

 

② Standard 표준화 : 모든 평균이 0이고, 표준 편차가 1이다.

from sklearn.preprocessing import StandardScaler

scaler_standard = StandardScaler()
scaler_standard.fit(X_train)

X_scaled_standard_train = scaler_standard.transform(X_train)
X_scaled_standard_test = scaler_standard.transform(X_test)

pd.DataFrame(X_scaled_standard_train).describe()

 

 

 

5. 모델 학습

 

선형 회귀 모델

from sklearn.linear_model import LinearRegression

model = LinearRegression()
# 모델 학습
model.fit(X_scaled_minmax_train, y_train)

# 모델 예측
pred_train = model.predict(X_scaled_minmax_train)
pred_test = model.predict(X_scaled_minmax_test)
# 정확도 확인
model.score(X_scaled_minmax_train, y_train)
model.score(X_scaled_minmax_test, y_test)

 

 

 

모델 평가 - 틀린 정도, 오차 판단

import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error

# MSE
mean_squared_error(y_test, pred_test)

# MAE
mean_absolute_error(y_test, pred_test)

# RMSE
np.sqrt(mean_squared_error(y_test, pred_test))

# MAPE
np.mean(np.abs((y_test - pred_test) / y_test)) * 100

# MPE
np.mean((y_test - pred_test) / y_test) * 100

 

 

 

6. 예측값 병합 및 저장

# 예측 범주 컬럼 추가
y_test[['y_pred']] = pred_test

# 데이터셋 가로 병합
Total_test = pd.concat([X_test, y_test], axis=1)

# csv 파일로 내보내기
Total_test.to_csv('regression_test.csv')
 
728x90