SVM 코드 문제

민성철·2022년 8월 15일
0
post-thumbnail

이 미션의 목적은, linear SVM과 커널을 적용한 SVM을 비교하고, 교차 검증을 위한 Randomized SearchCV를 직접 사용해 보는 것입니다.
캘리포니아 주택 가격 데이터셋으로 SVM 회귀 모델을 학습시키는 코드를 작성하세요.

# 사이킷런의 fetch_california_housing() 함수를 사용해 데이터셋을 로드

from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()

X = housing["data"]
y = housing["target"]

# 훈련 세트와 테스트 세트 나누기
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=8282)

# 데이터 스케일 조정
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 간단한 LinearSVR 훈련
from sklearn.svm import LinearSVR
lin_svr =  LinearSVR()
lin_svr.fit(X_train_scaled, y_train)

# mse, rmse로 trian set 성능 확인
from sklearn.metrics import mean_squared_error
from math import sqrt

pred_train = lin_svr.predict(X_train_scaled) 
pred_val = lin_svr.predict(X_test_scaled)

mae_train = mean_squared_error(y_train, pred_train)
mse = mean_squared_error(y_test, pred_val)
rmse = sqrt(mean_squared_error(y_test, pred_val))

print(f'MSE : %.4f, RMSE : %.4f' %(mse, rmse))

# RBF 커널을 적용한 모델 훈련. 
# 하이퍼파라미터 C와 gamma의 적절한 값을 찾기 위해 교차 검증을 사용한 랜덤 서치를 적용.
from sklearn.svm import SVR
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import reciprocal, uniform

param_distributions = {"gamma": reciprocal(0.001, 0.1), "C": uniform(1, 10)}
rnd_search_cv = RandomizedSearchCV(SVR(), param_distributions=param_distributions
                                    , n_iter=80, cv=5, n_jobs=1)
rnd_search_cv.fit(X_train_scaled, y_train)
rnd_search_cv.best_estimator_ 

colab

vscode

# RBF 커널을 적용한 모델 성능 RMSE로 측정
y_pred = rnd_search_cv.best_estimator_.predict(X_train_scaled)

mse = mean_squared_error(y_pred, y_train)
rmse = sqrt(mse)
print(f'MSE : %.4f, RMSE : %.4f' %(mse, rmse))

# RBF 커널을 적용한 모델을 테스트 세트에서 평가
y_pred = rnd_search_cv.best_estimator_.predict(X_test_scaled)

mse = mean_squared_error(y_pred, y_test)
rmse = sqrt(mse)
print(f'MSE : %.4f, RMSE : %.4f' %(mse, rmse))

profile
ENTJ-A

0개의 댓글