본 글에서 사용한 코드는 모두 Google Colab에서 실행함
빅데이터 분석기사 실기 교재를 참고한 코드이며 실습 파일 또한 교재에 포함되어있음을 밝힘
회귀 문제에서의 SVM (SVR)
SVM을 회귀에 적용하는 방법은 마진 내부에 데이터가 최대한 많이 들어가도록 학습하는 것이다. 마진 밖에 있는 데이터들의 Error가 최소가 되도록 회귀선을 형성합니다.
#데이터 로드
data2=pd.read_csv('house_price.csv', encoding='utf-8')
X=data2[data2.columns[1:5]]
y=data2[["house_value"]]
#학습/테스트 데이터 분리
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test=train_test_split(X, y, random_state=42)
#데이터 Minmax로 정규화 후 학습데이터로 훈련
from sklearn.preprocessing import MinMaxScaler
scaler=MinMaxScaler()
scaler.fit(X_train)
X_scaled_train=scaler.transform(X_train)
X_scaled_test=scaler.transform(X_test)
from sklearn.svm import SVR
model=SVR(kernel='poly')
#훈련 데이터로 모델 훈련
model.fit(X_scaled_train, y_train)
#모델 예측값 저장
pred_train=model.predict(X_scaled_train)
#정확도 추출
model.score(X_scaled_train, y_train)
0.45177025582209707
kernel을 poly로 설정하고 모델을 수행한 코드이다.
훈련데이터의 정확도는 45.2%이다.
pred_test=model.predict(X_scaled_test)
model.score(X_scaled_test, y_test)
0.46997708027300966
테스트 데이터에서 예측값을 저장하고 정확도를 확인하니 47%로 나타났다.
# RMSE (Root Mean Squared Error)
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(y_train, pred_train)
MSE_test = mean_squared_error(y_test, pred_test)
print("훈련 데이터 RMSE:", np.sqrt(MSE_train))
print("테스트 데이터 RMSE:", np.sqrt(MSE_test))
훈련 데이터 RMSE: 70669.55248802518
테스트 데이터 RMSE: 69600.08964461758
kernel은 poly로 고정하고 C와 gamma를 설정하여 그리드 탐색의 설정값으로 지정
param_grid={'kernel': ['poly'], 'C': [0.01, 0.1, 1, 10],
'gamma': [0.01, 0.1, 1, 10]}
from sklearn.model_selection import GridSearchCV
grid_search=GridSearchCV(SVR(kernel='poly'), param_grid, cv=5)
grid_search.fit(X_scaled_train, y_train)
print("Best Parameter: {}".format(grid_search.best_params_))
print("Best Score: {:.4f}".format(grid_search.best_score_))
print("TestSet Score: {:.4f}".format(grid_search.score(X_scaled_test, y_test)))
Best Parameter: {'C': 10, 'gamma': 10, 'kernel': 'poly'}
Best Score: 0.4888
TestSet Score: 0.5092
분석 결과, C는 10, gamma는 10일 때, 최적의 결과를 보였다.
이때 훈련데이터의 정확도는 48.9%이며 테스트데이터는 51%의 정확도를 보였다.
안녕하세요