본문 바로가기
수업 복습/머신러닝과 딥러닝

선형 회귀

by 김복칠 2023. 12. 29.

1. Rent 데이터셋

import numpy as np
import pandas as pd
import seaborn as sns

rent_df = pd.read_csv("/content/drive/MyDrive/KDT/8. 머신러닝 딥러닝/data/rent.csv")
rent_df

  • 필요로 하는 모듈들을  import 해줍니다
  • 이후 다양한 함수들을 통해 데이터프레임의 구성을 확인할 수 있습니다
rent_df.info()
  • 데이터프레임의 기본 정보를 요약하여 출력합니다. 열의 데이터 타입, 누락된 값의 개수, 메모리 사용량 등을 확인할 수 있습니다
rent_df.describe()
round(rent_df.describe(), 2)
  • 숫자형 열에 대한 기술 통계량을 제공합니다. 평균, 표준편차, 최소값, 25%, 50%, 75% 백분위수 등이 포함됩니다
  • round는 나타내고자 하는 소수점 자리를 설정할 수 있습니다
sns.displot(rent_df["BHK"])

  • sns.displot() 를 통해 컬럼에 있는 데이터를 시각화 할  수 있습니다
sns.boxplot(y=rent_df["Rent"])

  • sns.boxplot() 을 통해 컬럼에 있는 데이터의 연속성을 확인할 수 있는데 너무 동떨어져 있으면 데이터의 신뢰성이 떨어진다고 볼 수 있습니다
rent_df.isna().sum()
  • 데이터프레임에서 누락된 값(결측지)을 각 열마다 합산하여 표시해 줍니다
rent_df.isna().mean()
  • 데이터프레임에서 각 열별로 누락된 값(결측지)의 비율을 계산해서 나타내 줍니다
rent_df.dropna(subset=["BHK"])
  • 데이터프레임에서 특정 컬럼에 NaN 값이 존재한다면 그 행을 제거합니다
rent_df.fillna(rent_df.median())
  • 데이터 프레임에서 결측지를 해당 열의 중앙값(median)으로 대체해 줍니다
rent_df["Area Type"].value_counts()
  • 데이터프레임에서 해당 열(컬럼)에 속하는 고유한 값의 개수를 알려줍니다
rent_df["Area Type"].unique()
rent_df["Area Type"].nunique()
  • unique() 는 데이터프레임에서 해당 열(컬럼)에 해당하는 고유한 값(value) 값을 알려줍니다
  • nunique() 는 데이터프레임에서 해당  열(컬럼)에 해당하는 개수(counts)를 알려줍니다
for i in ['Floor', 'Area Type', 'Area Locality', 'City', 'Furnishing Status', 'Tenant Preferred', 'Point of Contact']:
    print(i, rent_df[i].nunique())

  • 위의 함수를 응용하여 반복문을 통해 데이터프레임 안에 있는 컬럼들의 value 또는 counts 를 쉽게 찾을 수 있습니다
X = rent_df.drop("Rent", axis=1) # 독립변수, 찾고자 하는 변수에 연관성이 있는 변수
y = rent_df["Rent"] # 종속변수, 찾고자 하는 변수
  • 이러한 데이터 분석을 바탕으로 원하고자 하는 변수를 설정하고 그에 응하는 상관관계를 찾기 위한 학습을 진행해 줍니다
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=10)
X_train.shape, y_train.shape
X_test.shape, y_test.shape
  • 이후 데이터 분배에 필요한 모듈을 import 한 뒤 위에서 설정한 변수에 데이터가 잘 분배되었는지 확인해줍니다

2. 선형 회귀(Linear Regression)

  • 데이터를 통해 가장 잘 설명할 수 있는 직선으로 데이터를 분석하는 방법
    • 단순 선형 회귀분석(단일 독립변수를 이용)
    • 다중 선형 회귀분석(다중 독립변수를 이용) -> 주로 이용
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
pred = lr.predict(X_test)
  • 데이터 학습에 필요한 모듈을 import 해줍니다
  • 이번 과정에서는 LinearRegression() 함수를 이용합니다
  • 이후 해당 함수를 변수에 담아주고 fit()을 통해 학습을 시켜줍니다
  • 그리고 predict() 를 통해 학습한 내용을 바탕으로 시험을 쳐줍니다

3. 평가 지표 만들기

3-1. MSE(Mean Squared Error)

  • 예측값과 실제값의 차이에 대한 제곱에 대해 평균을 낸 값
  • (1n)∑ni=1(yi−xi)2
p = np.array([3, 4, 5]) # 예측값
act = np.array([1, 2, 3]) # 예측값

def my_mse(pred, actual):
    return((pred - actual) ** 2).mean()
    
my_mse(p, act)
  • 첫번째 평가지표 결과는 4.0 입니다

3-2. MAE(Mean Absolute Error) 

  • 예측값과 실제값의 차이에 대한 절대값에 대해 평균을 낸 값
  • (1n)∑ni=1|yi−xi|
def my_mae(pred, actual):
    return np.abs(pred-actual).mean()
    
my_mae(p, act)
  • 두번째 평가지표 결과는 2.0 입니다

3-3. RMSE(Root Mean Squared Error)

  • 예측값과 실제값의 차이에 대한 제곱에 대해 평균을 낸 후 루트를 씌운 값
def my_rmse(pred, actual):
    return np.sqrt(my_mse(pred, actual))

my_rmse(p, act)
  • 세번째 평가지표 결과는 2.0 입니다

3-4. 평가 지표 적용하기

from sklearn.metrics import mean_absolute_error, mean_squared_error
mean_squared_error(y_test, pred)
mean_absolute_error(y_test, pred)
mean_squared_error(y_test, pred, squared=False)

X_train.drop(1837, inplace=True)
y_train.drop(1837, inplace=True)

lr.fit(X_train, y_train)
pred = lr.predict(X_test)
mean_squared_error(y_test, pred, squared=False)
  • 이후 3-3 에서 작업한 함수들을 import 해주고 그 값을 위에서 학습했던 시험과 결과값의 정확성을 확인해 줍니다
  • 이후 데이터 일부를 drop() 해준 뒤 다시 한번 재학습을 하고 시험을 쳐줍니다
  • 그리고 drop() 전 후의 결과값을 비교해줍니다
  • 이러한 과정을 반복하고 확인하면서 모델의 정확성을 높여줍니다

'수업 복습 > 머신러닝과 딥러닝' 카테고리의 다른 글

로지스틱 회귀  (0) 2024.01.08
의사 결정 나무  (0) 2024.01.03
타이타닉 데이터셋  (0) 2023.12.29
아이리스 데이터셋(Iris DataSet)  (1) 2023.12.29
사이킷런(Scikit-learn)  (1) 2023.12.27