091

[R] 머신러닝(4): 회귀분석 - 다중선형 회귀분석, 로지스틱 회귀분석 본문

Programming Language/R

[R] 머신러닝(4): 회귀분석 - 다중선형 회귀분석, 로지스틱 회귀분석

공구일 2026. 5. 30. 23:54
728x90

1. 회귀분석 이론

- 회귀분석이란 과거 데이터로 변수들 간의 관계식을 찾아서 새 데이터의 결과값을 예측하는 지도 학습의 일종입니다. 이런 관계식은 독립변수, 종속변수 등으로 이루어집니다.

  독립변수(x) 종속변수(y)
의미 결과에 영향을 미치는 변수 독립변수로 인해 나타난 결과
다른 이름 입력변수, 설명변수, 특성 출력변수, 반응변수, 타겟

 

- 회귀 모델에는 여러 종류가 있지만 이 글에서는 다중회귀분석과 로지스틱 회귀분석에 대해 주로 다룰 것입니다. 일반 선형회귀분석은 아래 글에서 학습할 수 있습니다.

종류 독립변수 종립변수 함수 예시
단순선형 회귀 1개 연속형 숫자 lm() 키->혈당수치
다중선형 회귀 여러 개 연속형 숫자 lm() 키+몸무게->혈당수치
로지스틱 회귀 여러 개 범주형(분류) glm() 키+몸무게->당뇨 여부

-> lm()glm()의 가장 큰 특징은 종록변수의 타입이 각각 연속형 숫자, 범주형(정수)라는 점입니다.

 

[Python] 선형회귀분석

1. 선형회귀분석- 선형회귀분석이란 독립변수(X)와 종속변수(Y) 간의 선형적 관계를 모델링하는 통계적 방법, 최적의 직선을 찾아 변수 간의 관계를 설명하는 특징 -> 인과 관계 파악 및 예측과 추

in-ouput91.tistory.com

 

2. 회귀분석 실습

- 다중선형 회귀분석

w <- read.csv("chick.csv",header=T)
w_n <- w[,2:5]
head(w_n)

(1) 먼저 데이터를 가져와줍니다. 사용할 데이터를 w_n에 담아줍니다.

cor(w_n)
#cor(x=숫자형 데이터프레임 또는 행렬)
install.packages("corrplot")
library(corrplot)
corrplot(cor(w_n), method="number")
#corrplot(corr=cor()결과행렬, method="number"(숫자),"circle"(원)..등)

(2)상관계수 행렬을 corrplot()로 출력해보면 나머지 몸무게,종란무게, 먹는양은 서로 상관도가 높지만 이동량의 경우 높지 않아 제외해줍니다.

 

Mw_n <- w_n[,c(1,2,4)] #이동량 제외
head(Mw_n)
plot(Mw_n, col="red")

 

(3)이동량을 제외한 3변수를 산점도를 통해 선형 관계를 확인해주면 몸무게와 종란무게, 몸무게와 먹는양의 양의 상관관계가 있음을 알 수 있습니다.

 

MW_nmodel <- lm(weight~egg_weight+food, Mw_n)
#lm(formula(종속변수~독립변수1+독립변수2+...), data=dataStudy)
MW_nmodel

(4) 다중선형 회귀 모델을 생성해줍니다.

coef(MW_nmodel)
coef(MW_nmodel)[1]
coef(MW_nmodel)[2]
coef(MW_nmodel)[3]

(5) 위에서 만든 모델의 절편, 계수 등에 접근하기 위해서는 coef()를 사용하며 절편->독립변수1의 계수-> 독립변수2의 계수 순서입니다.

 

b <- coef(MW_nmodel)[1]
W1 <- coef(MW_nmodel)[2]
W2 <- coef(MW_nmodel)[3]
egg_wight <- 71
food <- 15
ggiwight <- W1*egg_wight+W2*food+b
ggiwight
#egg_weight 
#  151.5138

(6) 변수에 담아서 종란무게가 71, 먹는 양이 15일 때의 몸무게를 약 151.5로 예측합니다.

 

- 로지스틱 회귀분석

iris.new <- iris
iris.new$Species <- as.integer(iris.new$Species)
head(iris.new) #factor는 내부에서 숫자로 저장 -> integer로 변환

(1) 로지스특 회귀분석의 경우 범주형 정수를 예측하기 때문에 iris의 Species를 integer로 변환해줍니다.

mod.iris <- glm(Species~Sepal.Length+Sepal.Width+
                  Petal.Length+Petal.Width, data=iris.new)
mod.iris

(2) 위에서 Species 열을 정수형으로 바꾼 것으로 모델을 만들어줍니다.

unknown <- data.frame(rbind(c(5.1,3.5,1.4,0.2)))
unknown <- data.frame(c(5.1,3.5,1.4,0.2))
unknown <- data.frame(cbind(c(5.1,3.5,1.4,0.2)))
unknown <- data.frame(5.1,3.5,1.4,0.2)
unknown

names(unknown) <- names(iris)[1:4]
unknown

pred <- predict(mod.iris, unknown)
pred

(3) 예측 데이터를 만들어서 iris의 이름을 가지고 이름을 지정해준 뒤 predict에 넣어서 pred 값을 출력합니다. 

 

round(pred, 0) #1

unknown$Species <- round(pred,0)
unknown #1의 품종은 setosa

(4) 결과값을 열로 추가해줍니다.

728x90