Linear Regression 정리

juyeon·2022년 8월 22일
0

데이터 다루기

목록 보기
14/35
post-custom-banner

정리

알고리즘의 원리, 개념

  • 선형회귀식으로 target과의 관계를 설명
  • 오차를 최소화 하면서 parameter를 찾아간다.

전제조건

  • 결측치 조치, 가변수화, 독립성 가정

성능

  • 변수 선택이 중요

단순 회귀

다중 회귀

다중 공선성

  • 다중회귀시, feature들 간에 독립성이 전제되어야한다.
  • 그러나, 하나의 독립변수가 다른 여러 개의 독립변수들로 잘 예측이 되는 경우 이 가정이 깨지게 된다.

분산 팽창 지수(VIF)

  • 다중 공선성 확인 방법
  • 5이상, 다중 공선성 존재, 10 이상 강한 다중 공선성

but.. 다중 공선성을 항상 문제시하는건 아니다!

모델링 절차

  • 예시: 보스턴 집값 데이터

0. 데이터 준비

import numpy as np   # 수치연산
import pandas as pd  # 데이터프레임(2차원) 

데이터 정리

data['PriceDiff'] = data['CompPrice'] - data['Price']
data.drop('CompPrice', axis=1, inplace = True)
  • black 열은 드랍

데이터 분할: x, y 나누기

target = 'medv'
x = data.drop(target, axis=1)
y = data.loc[:, target]

NaN 조치

가변수화

x = pd.get_dummies(x, columns=['Education', 'ShelveLoc', 'Urban', 'US'], drop_first=True)

데이터 분할: train, validation 나누기

  • 여기서는 이미 test set이 나누어져 있다고 가정함
# trin 70%, validation 30%로 나눔
x_train, x_val, y_train, y_val = train_test_split(x, y, test_size = .3, random_state = 2022)
  • 변수 지정
# 학습에 사용할 변수를 지정
features = ['crim'] # list로 담음

# 지정된 변수로 데이터셋을 만든다. (x는 2차원 이상 이어야 한다)
x_train1 = x_train[features] # 대괄호안에 list로 담음 -> 결과가 데이터프레임으로 나옴. 
x_val1 = x_val[features]

Scaling

  • MinMaxScaler
scaler = MinMaxScaler()
x_train_s1 = scaler.fit_transform(x_train)
x_val_s1 = scaler.transform(x_val)
  • StandardScaler
scaler2 = StandardScaler()
x_train_s2 = scaler.fit_transform(x_train)
x_val_s2 = scaler.transform(x_val)

1. 함수 불러오기

import matplotlib.pyplot as plt  # 그래프

from sklearn.model_selection import train_test_split  # 데이터 분할: 사이킷런: ML 에서 엄청 중요

# 모델링용
from sklearn.linear_model import LinearRegression

# 회귀모델 평가용
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error, mean_absolute_percentage_error

import warnings    # 경고메시지 제외
warnings.filterwarnings(action='ignore')

2. 선언(모델 설계): 모델 알고리즘을 어떻게 쓸지

model1 = LinearRegression()

3. 학습(모델링)

model1.fit(x_train1, y_train)

4. 검증: 예측

pred1 = model1.predict(x_val1)

5. 검증: 평가

# MSE
mean_squared_error(y_val, pred1) 

# RMSE
mean_squared_error(y_val, pred1, squared = False) # squared = False: RMSE를 의미

# MAE(평균오차)
mean_absolute_error(y_val, pred1)

# MAPE(평균오차율): 원래 개념은 100(%)을 곱해야한다. 그렇지만 sklearn 함수는 100 안 곱한 채로 결과를 준다.
mean_absolute_percentage_error(y_val, pred1)

# 1 - MAPE : 회귀모델의 정확도
1 - mean_absolute_percentage_error(y_val, pred1)

+ 회귀계수와 절편 살펴보기

model1.coef_, model1.intercept_

# 출력
(array([-0.3570669]), 24.214633238567504)
profile
내 인생의 주연
post-custom-banner

0개의 댓글