학습 및 사례

[빅데이터분석기사 실기 3탄] 학습실행 - 머신러닝, Prediction or Regression

에스오에스데이터랩 2025. 5. 27. 10:25

주) 본인 학습을 위해 학습기간중 지속적으로 update 됩니다. 방문하신 분들을 위한 것이 아닙니다. 타이핑 연습용!^^

 

 

머신러닝 수행 단계별 사용 변수명

단계 내용 사용변수명
1 데이터셋 전처리한다. -
2 데이터셋 분할한다. train, test
3 머신러닝 모델 만든다.  model
4 테스트셋으로 '예측'한다. yhat
5 실제값과 비교 검증한다. (yhat - y)

 

 

ML 모델별 라이브러리 및 함수

ML 분류 모델 유형 R 라이브러리 함수명
다중선형회귀분석(MLR) base lm( )
인공지능신경망(ANN) nnet nnet( )
Regression트리(RT) rpart rpart( )
서포트벡터머신(SVM) kernlab ksvm( )
랜덤포레스트 randomForest randomForest( )

** base : 기본으로 설치된 라이브러리

 

 

 

MSE(Mean Square Error)

 

 

 

yhat : test data사용 model로 예측한 값

y : test set의 실제 값

오차 : (yhat-y)

오차제곱 : (yhat-y)^2

오차제곱합 : ∑(yhat-y)^2

평균오차제곱합(MSE) : (∑(yhat-y)^2)/n

R code : mean(yhat-y)^^2


 

# Load datasets -base - read.csv()

# 라비브러리 MASS, Boston dataset 사용

> library(MASS) # Load MASS library
> str (Boston) # Boston dataset의 구조
'data.frame':   506 obs. of  14 variables:
 $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
 $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
 $ indus  : num  2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
 $ chas   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ nox    : num  0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
 $ rm     : num  6.58 6.42 7.18 7 7.15 ...
 $ age    : num  65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
 $ dis    : num  4.09 4.97 4.97 6.06 6.06 ...
 $ rad    : int  1 2 2 3 3 3 5 5 5 5 ...
 $ tax    : num  296 242 242 222 222 222 311 311 311 311 ...
 $ ptratio: num  15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
 $ black  : num  397 397 393 395 397 ...
 $ lstat  : num  4.98 9.14 4.03 2.94 5.33 ...
 $ medv   : num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...

 

** 14개 변수, 354 관측행 
** integer 변수 2개, 연속형 변수 12개

 

 

# Check missing values - base - table(is.na())

> table(is.na(Boston)) # Check missing values
FALSE 
 7084

 

 

머신러닝 - 데이터셋 분할

 

# Split datasets - base -sample()

더보기

idx <- sample()  #  index 무작위 비복원 추출

train <- ...   # 트레인셋 만들기

test <- .....   # 테스트셋 만들기

 

R code

> idx<-sample(1:nrow(Boston), size=nrow(Boston)*0.7, replace=F)
> train<-Boston[idx,]
> test<- Boston[-idx,]
> str(train) ; str(test)

 

 

머신러닝 - '예측' 모델

 

목적변수 : $medv (median value of owner-occupied homes in $1000s.)

설명변수 : $medv 제외 13개

 

#1 MLR - base - lm()

더보기

#1 Multiple Linear Regression - base - lm()

model<- lm(medv~., train) # train set으로 MLR 모델 만들기

model2<- step(model, method="both") # no 영향변수 제거후 모델

yhat<-predict(model2, test, type="raw") # test data로 예측

mean((yhat-test$medv)^2) # MSE 계산

R code

#1 MLR - base - lm()
model<-lm(formula=medv~., data=train)
model2<-step(model,method="both")
yhat<-predict(model2, test)
mean((yhat-test$medv)^2)

 

#2 ANN - nnet - nnet()

더보기

#2 ANN - nnet - nnet()

library(nnet) # load nnet library

model<-nnet(medv~., train, size = 5) # 인공지능신경망 모델 만들기

yhat <- predict (model, test) # test data로 예측

mean((yhat-test$medv)^2) # MSE 계산

R code

#2 ANN -nnet -nnet()
library(nnet)
model<-nnet(medv~., train, size=5)
yhat<-predict(model, test)
mean((yhat-test$medv)^2)

 

#3 Regression tree - rpart - rpart()

더보기

library(rpart) # load rpart library
model<-rpart(medv~., train) # 회귀트리 모델 만들기
yhat <- predict (model, test) # test data로 예측
mean((yhat-test$medv)^2) # MSE 계산

R code

 #3 Regression Tree - rpart -rpart()
library(rpart)
model<-rpart(medv~., train)
yhat<-predict(model, test)
mean((yhat-test$medv)^2)

 

#4 SVM - kernlab -ksvm()

더보기

library(kernlab) # load kernlab library
model<-ksvm(medv~., train, kernel="rbfdot") # 서포트벡터머신 모델 만들기
yhat <- predict (model, test) # test data로 예측
mean((yhat-test$medv)^2) # MSE 계산

R code

#4 SVM - kernlab - ksvm()
library(kernlab)
model<-ksvm(medv~., train, kernel="rbfdot")
yhat<-predict(model, test)
mean((yhat-test$medv)^2)

 

#5 RF - randomForest - randomForest()

더보기

library(randomForest) # load randomForest library
model<-randomForest(medv~., train) # 랜덤포레스트 모델 만들기
yhat <- predict (model, test) # test data로 예측
mean((yhat-test$medv)^2) # MSE 계산

R code

#5 RF - randomForest - randomForest()
library(randomForest)
model<-randomForest(medv~., train)
yhat<-predict(model, test)
mean((yhat-test$medv)^2)

 

 

모델별  MSE

 

Model MSE
Multiple Linear Regression 25.20274
Artificial Neural Network 533.8449
Regression Tree 30.50108
Suppot Vector Machine  15.27348
RandomForest 17.47483

 


 

R종합코드

 

> #1 MLR - base - lm()
> model<-lm(medv~., train)> 
> model2<-step(model, method="both")
> yhat<-predict(model2, test)
> mean((yhat-test$medv)^2)

> #2 ANN -nnet -nnet()
> library(nnet)
> model<-nnet(medv~., train, size=5)
> yhat<-predict(model, test)
> mean((yhat-test$medv)^2)

> #3 Regression Tree - rpart -rpart()
> library(rpart)
> model<-rpart(medv~., train)
> yhat<-predict(model, test)
> mean((yhat-test$medv)^2)

> #4 SVM - kernlab - ksvm()
> library(kernlab)
> model<-ksvm(medv~., train, kernel="rbfdot")
> yhat<-predict(model, test)
> mean((yhat-test$medv)^2)

> #5 RF - randomForest - randomForest()
> library(randomForest)
randomForest 4.7-1.2
Type rfNews() to see new features/changes/bug fixes.
> model<-randomForest(medv~., train)
> yhat<-predict(model, test)
> mean((yhat-test$medv)^2)

# THE END

 

자필기억