DeseoDeSeo
[Machine Learning] 회귀, 선형 회귀 모델 본문
⛤ 회귀 계수( Regression coefficients )
: 독립변수의 값에 영향
독립 변수 개수 | 회귀 계수의 결합 |
1개 : 단일 회귀 | 선형 : 선형 회귀 |
여러개 : 다중 회귀 | 비선형 : 비선형 회귀 |
회귀분석 : 시간에 따라 변화하는 데이터, 영향, 가설적 실험, 인과 관계 모델링 등에서 많이 사용.
종속 변수(목표)와 하나 이상의 독립변수(예측변수) 간 미래 사건을 예측하는 방법
➜ 연속형 변수들에 대해 두 변수 사이의 모형을 구한 뒤 적합도를 측정해 내는 분석법
➜ 수치적 가치를 추정
- 연속 숫자를 포함하는 머신러닝 문제 해결에 필수적, 딥 러닝 이론의 기초
- 선형 모델 (Linear Model) : 입력 특성에 대한 선형함수를 만들어 예측을 수행
- 다양한 선형 모델이 존재 (= 선을 그을 수 있는 방법이 다양하다.)
- 분류와 회귀에 모두 사용가능
- 기본식) 문제가 1개일때: y= wx +b
- 문제가 p개일때 : y = w1x1 + w2x2 + ...+ wpxp + b
- w : 가중치( 각 문제마다 다른 가중치가 적용됨 ) , b: 편향
단순 회귀 분석 | Y = wx + b | 하나의 종속변수, 하나의 독립변수 |
다중 회귀 분석 | y = w1x1 + w2x2 + ...+ wpxp + b | 하나의 종속변수, 여러 독립변수 |
☑ 선형회귀
: 종속변수가 연속인 경우.
: 성적 데이터를 기반으로 선형회귀를 이해해보자.
성적 데이터 생성을 위한 라이브러리 꺼내오기
import pandas as pd
import matplotlib.pyplot as plt
성적 데이터 생성
data = pd.DataFrame([[2,20],[4,40],[8,80],[9,90]],
index=['준화','철수','유리','민수'],
columns=['시간','성적'])
data
☑ MSE가 최소가 되는 최적의 w,b를 찾는 방법
- MSE : 평균제곱오차(Mean Squared Error) ➜ 비용함수(cost)
- : 추측값에 대한 정확성을 추측하는 법( 평균과 제곱을 이용하여 오차 계산)
- 0에 가까울수록 추측값이 원본에 가까워지기 때문에 숫자가 작을 수록 좋음.
-
- 수학 공식을 이용한 해석적 모델
- 경사하강법(XGBoost에서 오차 계산하는 방법)
(1) 수학 공식을 이용한 해석적 모델
- LinearRegression
- 공식을 이용해서 적은 계산으로 한번에 최적의 선형함수를 찾는 방법
- 공식이 완벽하지 않을 경우, 값을 못 찾을 수도 있고
- 공식이 잘못되었을 경우 고칠 수 없다는 문제가 있음. ➜ 추후 규제를 접목 개선
from sklearn.linear_model import LinearRegression
# 모델 생성 및 하이퍼파라미터 설정
linear_model = LinearRegression()
# 학습
linear_model.fit(data[['시간']],data['성적']) # 문제는 2차원, 정답은 1차원
y = wx + b ( 1개의 문제 )
# 기울기, 가중치 출력
print('기울기, 가중치: ', linear_model.coef_)
# 절편, 편향 출력
print('절편, 편향: ', linear_model.intercept_)
○ coef_ : 가중치(w)값 조회 가능
○ intercept_ : 편향(B) 조회 가능
예측
영지씨가 7시간 공부했을 때. 몇 점?
linear_model.predict([[7]])
☑ 가설함수
: H(x)
함수 정의
def h(w,x):
return w*x + 0
☑ 비용함수(Cost Function)
:비용 =오차
: 입력과 출력 간의 관계를 찾는 데 모델이 얼마나 잘못되어있는지 측정
비용 함수 정의
- data: 문제 값
- target : 정답(실제값)
- weight : 가중치
def cost(data, target, weight):
#예측
y_pre= h(weight,data)
# 평균 제곱 오차
# : ((예측값 - 실제값)^2).mean()
error = ((y_pre- target)**2).mean()
return error
가중치에 따른 오차값 확인
cost(data['시간'],data['성적'],8)
cost(data['시간'],data['성적'],10)
가중치 변화에 따른 비용함수의 변화를 그래프로 확인
cost_list =[]
for w in range(5,16): # 5 ~ 15까지 가중치 변화
err=cost(data['시간'],data['성적'],w)
cost_list.append(err)
cost_list
비용함수(MSE) 그리기
plt.plot(range(5,16), cost_list)
plt.show()
- 경사 하강법
- SGDRegressor
- 점진적으로 오차가 작은 선형 함수를 찾아가는 방법
- 오차를 수정하는 방향으로 그래프를 다시 그려줌.
- 선형함수를 잘못 찾았을 경우 수정이 가능
- 점진적으로 찾아가므로 계산량이 많아서 시간이 오래 걸림.
- 학습율(learning rate)
- 너무 크게 설정하면 오차가 커짐(발산)
- 너무 작게 설정하면 국소 지역점에 빠져서 최적의 해를 찾지 못함.
from sklearn.linear_model import SGDRegressor
#모델 생성 및 하이퍼 파라미터 설정
sgd_model = SGDRegressor(max_iter=5000, # 가중치 업데이트
eta0=0.001, # 학습률(learning rate)
verbose =1)
#학습
sgd_model.fit(data[['시간']],data['성적'])
예측
sgd_model.predict([[7]])
'Python' 카테고리의 다른 글
[Machine Learning] 선형 모델(회귀) 평가 지표 및 데이터 스케일링 (0) | 2023.09.13 |
---|---|
[Machine Learning ] ex09_보스턴 집값 예측 실습 (0) | 2023.09.07 |
[Machine Learning] 하이퍼 파라미터 튜닝(유방암 분류 실습) (1) | 2023.09.06 |
[Machine Learning] 하이퍼 파라미터 튜닝(타이타닉 실습) (0) | 2023.09.06 |
[Machine learning] 앙상블 (0) | 2023.09.05 |