개발학습일지

[AI] 머신 러닝 Simple Linear Regression 순서 및 과정 본문

AI/Machine Learning

[AI] 머신 러닝 Simple Linear Regression 순서 및 과정

처카푸 2024. 4. 14. 19:03

데이터셋으로 X, y 의 값은 이미 주어져있다

b0, b1 의 값을 찾아 가는 과정을 학습이라고 부른다

학습이란??? 바로 error(오차)를 줄여 나가는 것이다

모든 관측점(Observation) 에서의 y값의 error(오차)가 존재하고, 이 오차들의 총 합을 줄여 나가면 된다.

 

이제 하나의 예시 데이터로 Simple Linear Regression 을 해보자

기본 임폴트

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

기본 데이터

- 경력과 연봉의 관계 분석을 통해, 누군가 입사했을 때, 그사람의 경력에 맞는 연봉을 제시해 줄 수 있도록 합니다.

df = pd.read_csv('Salary_Data.csv')
df.head() # 데이터가 커서 위에만으로 확인

df

1. nan 처리

   - isna().sum() 을 통해 각 컬럼 마다 nan의 갯수를 확인한다

   - nan 이 있으면 dorpna() 또는 fillna() 를 사용하여 해결한다

df.isna().sum()
>>>
    df.isna().sum()
    YearsExperience    0
    Salary             0
    dtype: int64

2. X와 y로 분리

   - X 는 2차원으로 만들어주기 위해 to_frame()을 사용

   - y 는 1차원인 컬럼추출 상태 그대로 만들어 둔다

# 1차원
y = df['Salary']
# 2차원
X = df['YearsExperience'].to_frame()

3. 문자열 데이터를 숫자로 바꾼다.

   - 이번 데이터에서는 모든 데이터가 다 숫자이다

4. 피처 스케일링 한다

   -  Linear Regression 에서는 자체적으로 피처 스케일링은 하므로 따로 해줄 필요가 없지만, 딥러닝에서는 필요하다

5. Training 과 Test 용으로 데이터를 분리

   -  sklearn 모듈 임폴트 from sklearn.model_selection import train_test_split

from sklearn.model_selection import train_test_split

   - train_test_split(X, y, test_size=*) 를 사용하여 X_train, X_test, y_train, y_test 4가지 변수 만들기

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state= 11 )
X_train.shape
# (24, 1)
y_train.shape
# (24,)
X_test.shape
# (6, 1)
y_test.shape
# (6,)

6. 인공지능 모델링한다 _연봉을 예측하는 것은 수치로 나오는 것이기 때문에 Regression 으로 학습시킨다

   - sklearn 모듈 임폴트 및 인공지능을 변수로 만들기

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()

7. 인공지능을 학습시키다

   - 리니어레그레이션 자체가 인공지능인데 지금은 아무것도 학습되어있는 상태가 아니여서 데이터로 학습(fit)시켜야한다

regressor.fit( X_train, y_train )
>>>
    LinearRegression
	LinearRegression()
# 인공지능 regressor 학습완료!

   - coef_, intercept_ 를 사용하여 학습한 결과 a, b 를 물어본다

regressor.coef_
# array([9504.98248109])
regressor.intercept_
# 25375.305271282858

8. 학습이 끝나면, 이 인공지능이 얼마나 똑똑한지 테스트 해야한다.

   - predict() 으로 테스트용 데이터인 X_test로 데스트 한다.

   - 예측한 후 예측 변수로 저장

y_pred = regressor.predict(X_test)

  - 실제 데이터와, 예측 데이터를 비교하여 테스트하면 된다.오차(실제값 - 예측값)를 구한다

  - 오차가 작으면, 똑똑한 인공지능 만든 것이다!

error = y_test - y_pred
error
>>>
    15   -4011.719429
    8     8653.750789
    6     6259.747285
    26    1296.361158
    3     -860.270233
    11   -7601.235196
    Name: Salary, dtype: float64

9. 오차의 제곱에서, 평균을 구한다

   - 제곱을 하는 이유는?  성능을 측정하기 위해서는 오차를 제곱해서, 부호를 먼저 없앤 후에 평균을 구하기 위함이다

  - 리그레이션 성능평가 방법 중 한개 Mean Squared Error (MSE) 이다

(error ** 2).mean()
# 31727520.866778105

10. 실제값과 예측값을 차트로 그려본다.

   - 시리즈와 넘파이 합치기

# 시리즈를 데이터프레임으로 만들기
df_test = y_test.to_frame()
# 예측값을 데이터 프레임에 새로운 컬럼으로 저장해두기
df_test['y_pred'] = y_pred
# 인덱스 조정해주기
df_test.reset_index(drop=True, inplace=True)

   - 바의 형태의 그래프로 오차범위를 한눈에 확인 할 수 있다

df_test.plot(kind='bar')
plt.show()