머신러닝

[ML]10. 선형회귀모델

CodeJaram 2023. 8. 30. 09:00

머신러닝_10_선형회귀모델

 

  1. 선형회귀모델(Linear Model)
  • 회귀분석은 예측값이 평균과 같이 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법 이용
  • 입력특성에 대한 선형함수를 만들어 예측 수행
  • 분류와 회귀에 모두 사용가능

예)7시간 공부할 경우 성적은 몇 점일까?

→y=10x+0일 때 이상적

 

 

1)선형회귀함수

 

2)MSE(평균제곱오차)

  • cost function(비용함수)

*cost값이 0이 되게 하는 게 좋은 모델

 

 

 

  • 경사하강법: 평균제곱오차가 최소인 w(가중치)와 b(편향)을 찾는 방법

-learning rate: 기울기를 감소하는 속도 조절

 

[선형회귀모델 실습]

1. 문제정의: 선형회귀모델의 w(가중치),b(절편) 확인하기

 

#라이브러리 불러오기

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

 

# 선형회귀모델 불러오기

from sklearn.linear_model import LinearRegression

 

 

2.데이터 만들기

#데이터 프레임 생성

 

data=pd.DataFrame([[2,20], [4,40], [8,80], [9,90]],index=['A', 'B', 'C', 'D'],columns=['시간', '점수'] )

 

3.모델링: 선형회귀모델 학습, 예측 시 문제데이터(X)는 반드시 2차원 데이터형태

#모델링

lr_model=LinearRegression()

 

#모델 학습

#특징이 1개인 경우 시리즈별로 문제 데이터와 정답 데이터를 분리할 수 있음

#시간->문제, 점수->정답

 

lr_model.fit(data[['시간']],data['점수'])

 

 

4.경사하강법(가중치, 절편 찾기)

 

#가중치-> .coef_

print('모델가중치: ', lr_model.coef_)

 

#절편-> .intercept_

print('모델의 절편: ', lr_model.intercept_)

5.모델예측

#예측

#시간이 7일 때 점수 예측

lr_model.predict([[7]])

 

 

 


2. 회귀모델 평가지표 종류

1)평균제곱오차(MSE): 0에 가까울수록 좋은 회귀모델

2)평균제곱근 오차(RMSE)

3)평균절대비율오차(MAPE)

  • 예측값과 실제값을 뺀 오차를 실제값으로 나눈 값의 평균
  • 백분율로 표현하여 RMSE의 단점을 해결

4)R2 Score: 1에 가까울수록 좋은 회귀모델

 

 

  • 회귀 직선이 평균에 비해 얼마나 그 데이터를 잘 설명할 수 있는지에 대한 점수
  • 편차: 예측값과 평균과의 거리
  • 오차: 예측값과 회귀직선과의 거리
  • 일반적으로 0과 1사이의 값, 예측이 심하게 벗어나면 -값 나올 수 있음

 

 

◎예측오차의 크기가 중요하면→RMSE/MAE 사용

상대적인 오차의 중요성의 높으면→MAPE

모델의 설명력을 강조하려면→R2 Score

 

 

[보스턴 주택가격 예측회귀실습]



1.  문제정의: 특성변수 활용하여 주택가격 회귀 예측

 

2.  데이터 불러오기

 

boston=pd.read_csv('/content/drive/MyDrive/실습파일/머신러닝실습/Data/boston_housing.csv')

 

boston.info()



3.데이터 전처리

  • 필요없는 컬럼 삭제

boston.drop('Unnamed: 0', axis=1, inplace=True)

 

  • 문제/정답 데이터 분할

X=boston.drop('MEDV', axis=1)

y=boston['MEDV']

 

 

4. 상관관계 분석

 

#컬럼별 상관관계 분석

X.corr()

 

#히트맵으로 상관관계 확인하기

 

plt.figure(figsize=(15,15))

sns.heatmap(data=X.corr(),

            annot=True, #상관계수 히트맵에 표시

            annot_kws={'size' :12}, #상관계수 글자 크기

            fmt='.2f', #소수점 제한

            cmap='Blues'

            )



  • 학습용/테스트용 데이터 분할

from sklearn.model_selection import train_test_split

 

#데이터 분할

X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.3, random_state=10)



5.모델링

# 선형회귀모델 불러오기

from sklearn.linear_model import LinearRegression

 

#모델 생성

lr_model=LinearRegression()

 

#모델 학습

lr_model.fit(X_test, y_test)

 

#교차검증

from sklearn.model_selection import cross_val_score

 

#cross_val_score(모델이름, 문제데이터, 정답데이터, cv(분할))

result=cross_val_score(lr_model, X_train, y_train, cv=5)

 

print('교차검증', result) #데이터 편중

print('교차검증 평균', result.mean())

 

6. 가중치, 편향 확인

#가중치, 편향(절편) 확인

print('가중치: \n', lr_model.coef_)

print('편향: ', lr_model.intercept_)

 

 

7. 회귀모델 평가지표(MES, MAE,RMSE, R2score)

#평가지표 불러오기

 

from sklearn.metrics import mean_absolute_error #평균절대오차

from sklearn.metrics import mean_squared_error #평균 제곱오차

from sklearn.metrics import r2_score #결정계수, R2스코어

 

#RMSE(평균제곱근오차): MSE(평균제곱오차)에 루트 씌우는 함수 사용->np.sqrt()

 

#평균절대오차

 

mean_absolute_error(y_test, pre)

 

#MSE(평균 제곱오차)

mean_squared_error(y_test,pre)

 

#RMSE(평균제곱근 오차)

np.sqrt(mean_squared_error(y_test,pre))

 

#R2 Score

r2_score(y_test, pre)

 

#score 함수: 분류->f1-score, 회귀->f2-score 사용


'머신러닝' 카테고리의 다른 글

[ML]12. 로지스틱 회귀모델  (0) 2023.09.01
[ML]11. 모델 정규화  (0) 2023.08.31
[ML]9. 분류평가지표  (0) 2023.08.29
[ML]8. 타이타닉호 생존자 예측 모델  (0) 2023.08.25
[ML]7. 앙상블 모델  (0) 2023.08.18