-
R을 이용한 머신러닝 - 2 (비선형 회귀분석)Programming & Machine Learning/R X 머신러닝 2017. 7. 11. 00:24
2. 비선형 회귀
2.1 SVM를 이용한 비선형 회귀
- SVM : 고차원의 입력에 대해, 변환함수를 통해 가중치를 찾게 됨
이론을 통해 배우는 회귀분석은 대부분 선형적인 모형을 가정하고 있다. 하지만 실제의 데이터는 대부분 선형성을 만족하지 못한다. 따라서 실제적으로 데이터 분석에서 처리해야 하는 데이터는 비선형적인 모델이라고 할 수 있다. 선형 모형은 독립변수에 따라 종속변수가 일정한 변화, 즉 선형성을 보이지만 비선형 모형은 일정한 변화를 보이지 않는다. 수학적인 의미로는, df가 계속 변한다고 할 수 있다. 사인함수나 지수함수처럼 선형적인 모양을 하지 않는 독립변수를 포함하는 모형을 일반적으로 비선형 모형이라 한다.
- R에서의 SVM 회귀 분석 코드
### 비선형 회귀 x = sample(0:2*pi, 1000, replace=T) y = sin(x) e = rnorm(1000, 0, 1) y_e = y+e plot(x, y_e) # 샘플데이터 생성 x1 = seq(0, 2*pi, 0.01) data = data.frame() for(i in x1){ e1 = rnorm(10, 0, sample(1:3, 1, replace = T)) y1 = sin(i) + e1 x2 = rep(i, 10) # rep -> repeat의 약자 data1 = cbind(x2, y1) data = rbind(data, data1) } plot(data, cex=0.1) # 선형 라인 그리기 non1 = lm(y1~x2, data) line(data$x2, non1$fitted.values) abline(non1, col='red') ### SVM 다중 회귀 install.packages('e1071') library(e1071) svm1 = svm(y1~x2, data) # 참고 : svm은 svc, scr로 classification / regression 용으로 나뉨. # R에서는 y가 연속형이면 svr, y가 factor형이면 svc로 자동 실행함. pred1 = predict(svm1, newdata = data) points(data$x2, pred1, col = 'red', pch = "*", cex = 0.3) points(data$x2, sin(data$x2), col='blue', pch="#", cex=0.4) non_svm1 = lm(y1~x2, data) pred2 = predict(non_svm1, newdata = data) rmse_s = sqrt(mean(data$y1-pred1)^2) rmse_n = sqrt(mean(data$y1-pred2)^2) c(rmse_s, rmse_n) # --> svm과 non-svm 수치 비교 # 참고 : lm은 변수들의 계수, p-value등 각종 지표로 모델을 평가할 수 있지만, # svm은 rmse로 모델을 평가하는게 거의 유일한 방법. 따라서 그래프를 통해 직관으로 발견하거나 rmse로 평가하는게 일반적임. svm2 = svm(Species~., train) pred3 = predict(svm2, newdata = test) t1 = table(test$Species, pred3) diag(t1) # table의 대각선 값을 추출하는 함수 sum(diag(t1)) / sum(t1) # 전체 중에 잘 맞힌것만 찾아낸 비율
'Programming & Machine Learning > R X 머신러닝' 카테고리의 다른 글
R을 이용한 통계분석 -5 (실제 데이터를 이용한 시계열 분석) (0) 2017.07.11 맥에서 R studio를 사용할때의 간단한 에러해결법 (0) 2017.07.11 R을 이용한 머신러닝 - 1 (선형 회귀분석) (1) 2017.07.11 R을 이용한 통계분석 - 4 (집단간 차이검정과 분산분석) (0) 2017.07.07 R을 이용한 통계분석 - 3 (R을 이용한 데이터 조작 및 가설검정 방법) (0) 2017.07.05 댓글