본문 바로가기
프로그래밍/AI 머신러닝,LLM

머신러닝 회귀(regression) 개념

by -현's- 2025. 3. 29.
반응형

● 회귀(regression)

- 회귀라는 말은 사전적으로는 '한바퀴 돌아 본래의 자리로 돌아온다' 라는 뜻인데, 머신러닝의 회귀 개념과는 맞지 않습니다.

- 머신러닝에서의 회귀는 쉽게 설명하면 x,y 관계를 분석해서 패턴을 찾는다는 의미로, 주어진 데이터 이후에도 같은 패턴이 반복 될것이라고 예상하고 모델을 만드는 것입니다.

- 데이터를 반복적으로 관찰하면 어떤 패턴이 있고, 회귀 모델은 이를 수학적으로 표현하여 예측을 가능하게 하는것입니다.

- 주식가격예측, 아파트 가격 예측 등 연속적인 숫자값을 예측하는 머신러닝 기법입니다.

반응형

● 머신러닝 지도학습

- 머신러닝 지도학습에서는 크게 '회귀'와 '분류' 2가지가 있습니다.

- 회귀는 연속된 값을 예측할때 주로 사용하고 분류는 이산적 값을 예측할때 주로 사용합니다.

 

●회귀 종류

- 선형회귀

- 다항회귀 : 

- 다중회귀 : 

- 로지스틱회귀 : 

 

●선형회귀

어떤 데이터가 있을 때, 이를 가장 잘 설명할 수 있는 직선을 찾는 방법입니다.

예를 들면, 공부한 시간이 많을수록 시험 점수가 높아진다고 가정할때 공부한 시간과 시험 점수 사이의 관계를 직선으로 표시할 수 있습니다.
이 직선을 찾는 과정이 바로 선형 회귀입니다.

ex)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 샘플 데이터 (공부 시간: X, 시험 점수: y)
X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]).reshape(-1, 1)
y = np.array([50, 55, 65, 70, 72, 78, 85, 87, 95])

# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X, y)

# 예측
X_test = np.array([10]).reshape(-1, 1)
y_pred = model.predict(X_test)
print(f"공부 10시간 했을 때 예상 점수: {y_pred[0]:.2f}")

# 그래프 그리기
plt.scatter(X, y, color='blue', label="data")
plt.plot(X, model.predict(X), color='red', linewidth=2, label="line")
plt.xlabel("study time")
plt.ylabel("score")
plt.legend()
plt.show()

 

●다항회귀

선형 회귀의 확장으로, 데이터가 직선적인 관계가 아닌 곡선일때 사용합니다.

다항회귀는 주로 비선형 관계를 모델링할 때 유용합니다.

ex)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 예제 데이터 (X: 독립 변수, y: 종속 변수)
X = np.array([[1], [2], [3], [4], [5], [6]])
y = np.array([1, 4, 9, 16, 25, 36])  # y = X^2 (비선형 관계)

# 데이터를 훈련 세트와 테스트 세트로 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# 2차 다항식으로 변환
poly = PolynomialFeatures(degree=2)
X_poly_train = poly.fit_transform(X_train)  # 훈련 데이터에 다항식 변환
X_poly_test = poly.transform(X_test)  # 테스트 데이터에 다항식 변환

# 선형 회귀 모델 훈련
model = LinearRegression()
model.fit(X_poly_train, y_train)

# 예측
y_pred = model.predict(X_poly_test)

# 결과 출력
print("예측값:", y_pred)
print("실제값:", y_test)

# 다항 회귀 결과 시각화
plt.scatter(X, y, color='blue')  # 실제 데이터
plt.plot(X, model.predict(poly.transform(X)), color='red')  # 예측된 다항 회귀선
plt.title("Polynomial Regression")
plt.xlabel("X")
plt.ylabel("y")
plt.show()

 

●다중회귀

여러 개의 입력 변수들이 결과 변수에 어떻게 영향을 미치는지 분석하고 예측할 수 있도록 해주는 모델입니다.

예를 들어, 집 가격을 예측할 때, 집의 크기, 방 개수, 위치 등 여러 특성이 가격에 영향을 미친다고 할 수 있습니다. 이때 각 특성들이 집 가격에 미치는 영향을 고려하여 예측하는 것이 다중회귀입니다.

 

●로지스틱 회귀

로지스틱 회귀는 이름에 "회귀"가 들어가지만 사실은 분류 알고리즘입니다. 예를 들어, 이메일이 스팸인지 아닌지, 고객이 제품을 구매할지 말지 등을 예측하는 데 사용할 수 있습니다.
선형 회귀처럼 입력값을 가중치와 곱한 뒤 더하는 방식으로 계산하지만, 결과값을 그대로 쓰지 않고 시그모이드 함수를 적용해서 확률 값을 얻습니다.손실함수, 경사하강법 등을 이용하여 0~1값을 구해서 분류 결정을 합니다.

ex)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 1. 샘플 데이터 생성 (시험 점수, 합격 여부)
np.random.seed(0)
X = np.random.randint(50, 100, (100, 1))  # 시험 점수 (50~100점 사이)
y = (X >= 75).astype(int).ravel()  # 75점 이상이면 합격(1), 아니면 불합격(0)

# 2. 데이터 분할 (훈련 80%, 테스트 20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 로지스틱 회귀 모델 생성 및 학습
model = LogisticRegression()
model.fit(X_train, y_train)

# 4. 예측
y_pred = model.predict(X_test)

# 5. 정확도 출력
print(f"정확도: {accuracy_score(y_test, y_pred) * 100:.2f}%")

# 6. 데이터 시각화
plt.scatter(X, y, color='blue', label="Actual Data")
X_range = np.linspace(50, 100, 100).reshape(-1, 1)
y_prob = model.predict_proba(X_range)[:, 1]  # 확률값
plt.plot(X_range, y_prob, color='red', label="Logistic Regression")
plt.xlabel("시험 점수")
plt.ylabel("합격 확률")
plt.legend()
plt.show()

LogisticRegression.fit() 내부에 손실 함수,경사 하강법,시그모이드 함수, 정규화 등의 개념이 모두 구현되어 있습니다.
우리가 fit()을 호출하면 자동으로 손실을 최소화하는 방향으로 가중치를 학습하는 과정이 수행됩니다.

반응형

댓글