본문 바로가기
쫌쫌따리 통계+데이터+AI

Regression Algorithms

by stherhj 2022. 6. 8.

연속형 데이터(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

-

참고(라 쓰고 그저 번역수준):

https://www.analyticsvidhya.com/blog/2021/05/5-regression-algorithms-you-should-know-introductory-guide/

 

Regression Algorithms | 5 Regression Algorithms you should know

In ML, we use various kinds of regression algorithms to allow machines to learn the relationships within data provided and make predictions

www.analyticsvidhya.com

 

댓글