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() |
'Python-머신러닝' 카테고리의 다른 글
linear regression 실습 + 미지수, 상수값: coef_, intercept_ (0) | 2022.05.08 |
---|---|
Multiple Linear Regression (0) | 2022.05.08 |
Dataset의 Training용과 Test 용: X_train,X_test,y_train,y_test (0) | 2022.05.06 |
Nan 처리, 문자열 처리(레이블/원핫 인코딩): LabelEncoder,OneHotEncoder, ColumnTransformer (0) | 2022.05.06 |
[Python] 머신러닝 개념 (0) | 2022.05.06 |