연속형 데이터(Y)에 대한 회귀하면 선형 회귀(좀 더 나아가봐야 비선형 회귀..)에 그쳐 당황했던 기억으로 작성하는 회귀 머신러닝 알고리즘 종류
#데이터 기본 준비과정
library(plyr)
library(readr)
library(dplyr)
library(caret)
library(ggplot2)
library(repr)
dat <- read_csv("reg_data.csv")
glimpse(dat)
set.seed(100)
index = sample(1:nrow(dat), 0.7*nrow(dat))
train = dat[index,] # Create the training data
test = dat[-index,] # Create the test data
dim(train)
dim(test)
cols = c('pce', 'pop', 'psavert', 'uempmed')
pre_proc_val <- preProcess(train[,cols], method = c("center", "scale"))
train[,cols] = predict(pre_proc_val, train[,cols])
test[,cols] = predict(pre_proc_val, test[,cols])
summary(train)
1. 선형회귀
장 | 간단/심플/오버피팅 예방 가능 |
단 | outlier 영향 클 수/over-simplified |
lr = lm(unemploy ~ uempmed + psavert + pop + pce, data = train)
summary(lr)
2. 결정트리
장 | 해석하기 쉬움 |
단 | 예측 정확도가 떨어질 수 있음 |
3. SVR(Support Vector Regression)
장 | outlier 영향 적음/일반화 쉽/예측 정확도 높 |
단 | 큰 데이터 셋 부적합/노이즈 포함할 경우 잘 작동X |
4. Lasso Regression
장 | 오버피팅 X |
단 | 라쏘가 연관 피쳐 중 한 변수만 택/택 변수가 biased 되어있을 수 |
library(glmnet)
#먼저, 메트릭스를 만들어서 optimal 람다를 찾는다.
lambdas <- 10^seq(2, -3, by = -.1)
# Setting alpha = 1 implements lasso regression
lasso_reg <- cv.glmnet(x, y_train, alpha = 1, lambda = lambdas, standardize = TRUE, nfolds = 5)
# Best
lambda_best <- lasso_reg$lambda.min
lambda_best
#최적의 람다값을 활용해 모형 예측을 (train으로 glmnet해놓고 train, test 의 predict를 함)
lasso_model <- glmnet(x, y_train, alpha = 1, lambda = lambda_best, standardize = TRUE)
predictions_train <- predict(lasso_model, s = lambda_best, newx = x)
eval_results(y_train, predictions_train, train) #eval_results는 앞에서 defined function
predictions_test <- predict(lasso_model, s = lambda_best, newx = x_test)
eval_results(y_test, predictions_test, test)
#output
RMSE Rsquare
1 0.9378347 0.854096
RMSE Rsquare
1 1.099764 0.8676104
5. Ensenble Regression(Random Forest, Bagging, Bootstrap)
장 | 복잡 비선형 관계에 굳/해석 이해 쉽 |
단 | 오버피팅 가능성 높/앙상블 속도 느림 메모리 필요 |
library(randomForest)
library(ggplot2)
set.seed(4543)
data(mtcars)
rf.fit <- randomForest(mpg ~ ., data=mtcars, ntree=1000,
keep.forest=FALSE, importance=TRUE)
> rf.fit
Call:
randomForest(formula = mpg ~ ., data = mtcars, ntree = 1000,
keep.forest = FALSE, importance = TRUE)
Type of random forest: regression
Number of trees: 1000
No. of variables tried at each split: 3
Mean of squared residuals: 5.587022
% Var explained: 84.12
-
참고(라 쓰고 그저 번역수준):
'쫌쫌따리 통계+데이터+AI' 카테고리의 다른 글
베이지안 정리 (0) | 2022.06.10 |
---|---|
알고리즘 성능 평가와 시각화(작성중) (0) | 2022.06.08 |
EDA(Exploratory Data Analysis) vs 전처리 (3) | 2022.06.08 |
AWS Machine Learning Specialty 10시간 호다닥 합격 (1) | 2022.04.17 |
24회 ADP 데이터 분석 전문가 실기 (22/03/26) (0) | 2022.03.26 |
댓글