회귀선에서 일정 양만큼 떨어진 부분에 영역을 생성하여 영역 안과 밖에 있는 데이터들의 가중치를 변화
parameter(매개변수)
C
기본값 : 1.0
규제 강도의 역수
마진(margin) 영역의 크기
kernel(커널 함수의 종류)
기본값 : 'ref'
실제의 데이터가 선형이 아닌 경우 커널 함수를 이용하여 데이터를 고차원 공간으로 배열하여 직선으로 구분
'linear' : 선형 SVM
'poly' : 다항식 커널
'rbl' : 가우시안 커널 (가장 많이 사용)
gamma
커널의 개수
kernel이 linear가 아니면 사용
gamma가 크다면 경계가 복잡해짐 (과적합 위험)
gamma가 작다면 경계가 유얀해짐 (일반화 위험 : 과소적합 위험)
degree
기본값 : 3
다항식 커널에서의 차수
probability
기본값 : False
확률을 출력할 것인가? -> True일 경우에는 predict_proba() 사용이 가능
True로 설정시 추가적인 계산으로 속도가 느려질 수 있음
속성
support_ : 서포트 벡터 경계선에 딱 붙어있는 데이터의 인덱스 값
support_vector_ : support_의 위치의 값이라면 그 값에 해당하는 실제 데이터의 값
n_support_ : 클래스(컬럼) 별 서포트 벡터 개수
coef_ : 결정 계수 (linear 사용 가능)
메서드
decision_function()
결정 함수의 값 (margin 과의 차이)
predict_proba(x)
클래스 별 예측 확률
predict_log_proba(x)
클래스 별 예측 로그 확률
score(x, y)
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
최적화가 될때까지 최대 반복 횟수(수치가 불안정한 경우 필요 - svm모델에서는 시간이 오래 걸리기 때문에 가급적이면 사용)
tol
기본값 : 0.001
수렴의 판단 기준
속성
dual_coef_ : 쌍대문제의 알파 값들
coef_ : 회귀 계수
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error, r2_score
boston=pd.read_csv('../csv/boston.csv')
x=boston.drop('Price',axis=1)
y=boston['Price']
#train,test 데이터 분할
X_train,X_test,y_train,y_test=train_test_split(
x,y,test_size=0.3,random_state=42,stratify=x['CHAS']
)
index=['RBF','Linear','Poly']
cols=['MSE','R2']
result=pd.DataFrame(index=index, columns=cols)
result
#모델들을 리스트로 생성
preds=[pred_rbf,pred_lin,pred_poly]
for pred, idx in zip(preds, index):
mse=mean_squared_error(y, pred)
r2=r2_score(y, pred)
result.loc[idx, 'MSE']=round(mse,2)
result.loc[idx, 'R2']=round(r2,2)
result