데이터 분석/빅데이터 분석 기사
[빅분기 실기] 머신러닝 - 회귀문제
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