본문 바로가기

Python-머신러닝

Linear Regression

반응형

Linear Regression

ㄴ 수치 예측

ex) 실제 데이터가 있을 때, 경력이 11년인 사람의 샐러리 데이터가 없을 때, 이 사람의 연봉은 얼마나 줘야하는지 예측

 

- 저런 직선의 방정식을 컴퓨터는 찾는다.

기울기와 y절편만 있으면 된다.

ㄴ 직선의 방정식을 컴퓨터가 계산하면서 만들어간다.

 

ex) 데이터를 보유했을 경우, 3년에 천만원, 5년에 2천만원, 10년에 8천만원등의 직선 방정식을 잘 찾는 게 학습이 잘 되었다고 한다. 컴퓨터는 눈이 없기 때문에. 

 

y=ax+b

ㄴ a와 b의 값에 따라 결정된다. 고로, 무한대로 직선을 그릴수 있다. 

ㄴ 해당 방정식을, 우선적으로 컴퓨터가 랜덤으로 설정한다. 그리고 보유하고 있는 데이터 값으로, 각 x와 y값이 맞는지 확인한다. 

ㄴ 그 후에는, 기존에 있는 데이터와의 값과의 예측한 값의 차를 계산한다. 

ㄴ 오차라고 한다. 

 

오차 = 실제값 - 예측값

ㄴ Regression 성능평가(Regression Metrics)라고도함.

ㄴ 오차가 0이 되도록 (실제로는 0이 되도록 만들수는 없다)

ㄴ 오차가 최소가 되도록, 방정식의 미지수를 바꿔가는 것을 학습이라고 한다. 

ㄴ 오차는 마이너스 오차도 있고, 플러스 오차도 있다. 

ㄴ 하나의 데이터의 오차를 구하는 게 아니라. 데이터가 여러개의 오차를 더한다. 각각의 모든 데이터의 오차를 더해봤을 때, 마이너스와 플러스가 존재하기 때문에, 0이 나올수 있다.

ㄴ 해당 상황을 피하기 위해 제곱을 한다. 

ㄴ 우리가 가지고 있는 실제값을 y라고 그러고, 꺽쇠표시를 햇(모자)라고 하는 데, 그건 컴퓨터가 예측한 값.

ㄴ 오차를 제곱을 한다. 제곱해서 다 더한다. 그 값을 최소화 되어야한다. 

ㄴ 해당방법으로 오차를 구하는 방법을 MSE (Mean of Squared Error) 이라고하며, 제일 기본적인 방법이다. 

 

- Regression 성능평가(Regression Metrics) 기타방법

- Mean Squared Error (MSE)
- Root Mean Squared Error (RMSE)
- Mean Absolute Error (MAE)  
ㄴ절대값으로 계산
- R Squared (R²)
- Adjusted R Squared (R²)
- Mean Square Percentage Error (MSPE)
- Mean Absolute Percentage Error (MAPE)
- Root Mean Squared Logarithmic Error (RMSLE)

 

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

 

df = pd.read_csv('data/Salary_Data.csv')

 

 

- Nan 값 확인 후,

df.isna().sum()

 

- 예측하려는 값이 ‘Salary’ 컬럼, 고로 ‘Salary’ 는 y.

- 컬럼이 하나지만, 여러개 될 수 있으니까, 일단 대문자로 X표기.

ㄴ 경력 컬럼

- X 의 정보는 행렬이어야 한다. 그래서 이걸 reshape 시켜야한다. 

X = df.iloc[:, 0]

 

- X는 2차원이어야 학습이 가능하다

ㄴ 왜냐면? 인공지능 학습하는 함수는 fit 함수 

X 값은 2차원으로 넣어야 동작하기 때문이다. 

X.shape

(shape 크기 으로 확인)

 

- X 는 판다스 시리즈, values.하면 넘파이. 

X = X.values.reshape(30,1)
y = df['Salary']

 

- 피처스케일링한다.

- 리니어 리그레션 라이브러리는, 자체에서 피처스케일링을 해준다.

ㄴ 따라서, 바로 데이터를 사용해도 된다.

 

- 학습용과 테스트용으로 데이터 분리한다.

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=3 )

 

- 모델링한다.

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()

(regressor = LinearRegression(): 인공지능을 사용하겠다는 뜻) 

 

- 학습시킨다.

ㄴ학습 시킬 때는, X_train, y_train 두개를 정보로 줘야 학습한다.

ㄴ 학습 함수: fit 함수

ㄴ 밑에 뜬 것이. 학습 되었다고 하는 뜻.

regressor.fit(X_train,y_train)

 

- 테스트

ㄴ 실제로 학습이 끝나면, 우리가 해야할일:

ㄴ이 인공지능이 얼마나 똑똑한 인공지능인지 테스트 해야한다. 

ㄴ 리그레션의 테스트는 MSE를 구해본다. 

 

- 인공지능한테, 우리가 학습에 사용하지 않는 데이터를 넣어서 결과를 가져온다. 

- 이 값이 바로 y hat(인공지능이 예측한 값)이다. 

y_pred = regressor.predict(X_test)

 

- 아래가 실제값, 아래가 실제인데 위처럼 예측한것이다. 

- 그리하여, 둘의 오차값을 계산해야지 

y_test

 

- 오차를 구해본다.

- 오차 = 실제값 - 예측값

error = y_test - y_pred

 

- MSE: 제곱의 합 

error**2

 

- 이 값이 적을 수록 더 똑똑한 인공지능을 만들 수 있다. 

(error**2).mean()

 

- 실제값하고 예측값을 차트로 그려보자.

plt.plot(y_test.values)
plt.plot(y_pred)

plt.legend(['Real','Pred'])

plt.show()

(plt.legend: 첫번째가 무슨 이름, 두번째가 무슨이름)



import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data/Salary_Data.csv')

df.isna().sum()

y = df['Salary']
X = df.iloc[:, 0]

X.shape

X = X.values.reshape(30,1)

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=3 )

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()

regressor.fit(X_train,y_train)

y_pred = regressor.predict(X_test)

error = y_test - y_pred

(error**2).mean()


plt.plot(y_test.values)
plt.plot(y_pred)

plt.legend(['Real','Pred'])

plt.show()


반응형