경력과 연봉의 관계를 분석하여, 경력이 주어졌을때 연봉을 예측하려 한다.
데이터를 살펴보니, 아래와 같은 그래프로 나왔다고 가정했을 때,
아래 그림처럼, 해당 분포를 만족하는 직선을 찾으려 하는것이 목표다
직선을 찾기 위해서는, 우리가 잘 아는 직선의 방정식을 이용하여, 직선의 기울기와 y절편을 구하면 되는것이다.
여기에서 주의! x, y 가 우리에게 데이터셋으로 주어졌다. 따라서 우리는 b 를 찾아야 하는것이다.
즉, b0, b1 의 값을 찾아 가는 과정을 학습이라고 부른다!
그렇다면 학습이란??? 바로 error(오차)를 줄여 나가는 것이다.¶
아래는 오차를 나타낸다.
그렇다면 오차란?
그리고 직선은 처음에 어디서 가져오지?
모든 관측점(Observation) 에서의 y값의 error(오차)가 존재하고, 이 오차들의 총 합을 줄여 나가면 된다.
제곱을 하는 이유는?
오차를 줄여 나가서, 최소값이 되는 직선을 찾으면 끝난다.
최소값이 될때의 어떤 값을 찾는 것인가?
Type Markdown and LaTeX: 𝛼2
경력과 연봉의 관계 분석을 통해, 누군가 입사했을 때, 그사람의 경력에 맞는 연봉을 제시해 줄 수 있도록 합니다.
# 비어있는 데이터가 있는 지 확인
df.isna().sum()
YearsExperience 0
Salary 0
dtype: int64
# X는 무조건 2차원 이어야 한다. 따라서 슬라이싱 기호를 쓰면 2차원 데이터를 가져온다.
X = df.iloc[ : , :-2+1 ]
# y는 1차원이다. 그래서 소문자를 사용한다.
y = df['Salary']
# 피처 스케일링 한다!
### 리니어 리그레션은 자체에서 피처스케일링 해주므로
### 따로 피처스케일링 하지 않고, 바로 데이터를 사용하면 된다.
# 학습용과 테스트용으로 데이터를 분리!
# Train / Test 용으로 분리
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()
# 이 인공지능을 학습시킨다. 학습은 X_train, y_train으로 학습시킨다.
regressor.fit(X_train, y_train)
LinearRegression()
# 학습이 끝나면, 이 인공지능이 얼마나 똑똑한지
# 테스트 해야 한다.
# 따라서 X_test 테스트용 데이터로 예측한 결과를 가져온다.
y_pred = regressor.predict(X_test)
# MSE를 구한다.
# 1. 오차(error) = 실제값 - 예측값
error = y_test - y_pred
error
15 -4410.745198
5 3130.388749
22 697.553880
26 1294.846723
18 -404.312172
14 -7470.318409
Name: Salary, dtype: float64
# 2. 오차를 제곱하여 다 더한다.
(error ** 2).sum()
87386341.84040895
# 3. 다 더한값의 평균을 구한다. => MSE (Mean Sum of s\Squared Error)
(error ** 2).mean()
14564390.306734825
y_test
15 67938.0
5 56642.0
22 101302.0
26 116969.0
18 81363.0
14 61111.0
Name: Salary, dtype: float64
y_pred
array([ 72348.74519846, 53511.61125108, 100604.44611953, 115674.15327744,
81767.31217215, 68581.31840899])
plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Real', 'Pred'])
plt.show()
'AI 이론 > Prediction (supervised)' 카테고리의 다른 글
[실전연습] np.c_, np.append, grid .best_params_, gridsearchcv, classification_report (0) | 2021.11.25 |
---|---|
[머신러닝] Prediction- Regression, MSE 성능평가 (0) | 2021.11.24 |