df
YearsExperience Salary
0 1.1 39343.0
1 1.3 46205.0
2 1.5 37731.0
3 2.0 43525.0
4 2.2 39891.0
5 2.9 56642.0
6 3.0 60150.0
7 3.2 54445.0
8 3.2 64445.0
9 3.7 57189.0
10 3.9 63218.0
11 4.0 55794.0
12 4.0 56957.0
13 4.1 57081.0
14 4.5 61111.0
15 4.9 67938.0
16 5.1 66029.0
17 5.3 83088.0
18 5.9 81363.0
19 6.0 93940.0
20 6.8 91738.0
21 7.1 98273.0
22 7.9 101302.0
23 8.2 113812.0
24 8.7 109431.0
25 9.0 105582.0
26 9.5 116969.0
27 9.6 112635.0
28 10.3 122391.0
29 10.5 121872.0
위의 데이터로 수치 인공지능 만드는 과정
1. 데이터의 NaN 확인
df. isna().sum()
YearsExperience 0
Salary 0
dtype: int64
* NaN 데이터가 있다면 삭제하거나 , 대체 한다
2. X와 y로 분리( 경력에 따른 연봉을 예측하고 싶다. ) 예측할 데이터를 y로 한다.
X = df.loc[ : , 'YearsExperience' ]
X
0 1.1
1 1.3
2 1.5
3 2.0
4 2.2
5 2.9
6 3.0
7 3.2
8 3.2
9 3.7
10 3.9
11 4.0
12 4.0
13 4.1
14 4.5
15 4.9
16 5.1
17 5.3
18 5.9
19 6.0
20 6.8
21 7.1
22 7.9
23 8.2
24 8.7
25 9.0
26 9.5
27 9.6
28 10.3
29 10.5
Name: YearsExperience, dtype: float64
데이터가 이렇게 된다.
이것을 데이터프레임으로 바꿔준다.
X = X.to_frame()
y값 구하기
y= df['Salary']
0 39343.0
1 46205.0
2 37731.0
3 43525.0
4 39891.0
5 56642.0
6 60150.0
7 54445.0
8 64445.0
9 57189.0
10 63218.0
11 55794.0
12 56957.0
13 57081.0
14 61111.0
15 67938.0
16 66029.0
17 83088.0
18 81363.0
19 93940.0
20 91738.0
21 98273.0
22 101302.0
23 113812.0
24 109431.0
25 105582.0
26 116969.0
27 112635.0
28 122391.0
29 121872.0
Name: Salary, dtype: float64
3 . X와 y에 문자열이 있는지 확인한다.
- 예시의 데이터에는 문자열이 없다.
4. feature 스케일링 하기
- 지금 사용하는 Lieaner Regression은 자체적으로 feature 스케일링을 해주기 때문에 내가 feature 스케일링을 할 필요 가 없다.
5. 데이터를 Training / Test 셋으로 분리한다.
- 분리하는 라이브러리 호출( from sklearn.model_selection import train_test_split )
train_test_split(X,y , test_size=0.2 , random_state = 1)
[ YearsExperience
26 9.5
3 2.0
24 8.7
22 7.9
23 8.2
4 2.2
2 1.5
25 9.0
6 3.0
18 5.9
13 4.1
7 3.2
27 9.6
1 1.3
16 5.1
0 1.1
15 4.9
29 10.5
28 10.3
9 3.7
8 3.2
12 4.0
11 4.0
5 2.9,
YearsExperience
17 5.3
21 7.1
10 3.9
19 6.0
14 4.5
20 6.8,
26 116969.0
3 43525.0
24 109431.0
22 101302.0
23 113812.0
4 39891.0
2 37731.0
25 105582.0
6 60150.0
18 81363.0
13 57081.0
7 54445.0
27 112635.0
1 46205.0
16 66029.0
0 39343.0
15 67938.0
29 121872.0
28 122391.0
9 57189.0
8 64445.0
12 56957.0
11 55794.0
5 56642.0
Name: Salary, dtype: float64,
17 83088.0
21 98273.0
10 63218.0
19 93940.0
14 61111.0
20 91738.0
Name: Salary, dtype: float64]
이렇게 나누어진 데이터를 순서대로 training 과 test로 나눈다.
X_train , X_test , y_train , y_test = train_test_split(X,y , test_size=0.2 , random_state = 1)
6. 인공 지능을 모델링한다.
- 모델링 라이브러리 호출( from sklearn. linear_model import LinearRegression )
- 함수를 변수에 저장해서 사용한다.
regressor = LinearRegression()
==> 학습되지 않은 인공지는의 껍데기 = LinearRegression
7. 인공지능을 학습시킨다.
- y = ax + b
- 랜덤으로 a와 b 셋팅
- fit 함수를 실행하면,
- X_train, y_train 가지고
- 오차를 찾아서 오차가 최소가 되도록
- a와 b값을 셋팅한다.
regressor.fit(X_train, y_train)
== > 함수를 저장한 변수.fit() 함수 파라미터에 전에 분리한 학습용 데이터를 넣는다.
8. y = ax + b 의 직선 방정식에서 오차가 가장 적은 a(계수) 값과 b 값을 찾는다.
- 가장 오차가 적은 a 값 찾기 ( .coef_ )
regressor.coef_
array([9332.94473799])
- 가장 오차가 적은 b값 찾기 ( .intercept_ )
regressor.intercept_
25609.89799835482
-------------------------------------------- 인공지능 학습 끝 -----------------------------------------------------------
인공지능 TEST
학습이 끝나면 , 이 인공지능이 얼마나 똑똑한지 테스트 해야한다.
- 똑똑하다는건 오차(error)가 적은 것
- 오차( error ) 의 정의 : 실제값 - 예측값
- 테스트용 데이터인 X_test를 이용해서 테스트한다.
- error = y_test - y_pred
** 성능 측정을 하기 위해서는 테스트 데이터에서 예측 데이터를 뺀다. 하지만 부호 때문에 이상하게 계산이 될 수 있다.
따라서 부호를 없애기 위해서 오차에 제곱을 한 후 평균을 가져온다. == Mean Squared Error 줄여서 MSE
- (error ** 2) .mean()
- MSE로 성능을 평가하고 , 수치가 작을수록 좋은 인공지능이다.
여기서 구한 실제값과 예측값을 plot으로 비교하기
plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Real', 'Pred'])
plt.show()
y_test는 시리즈기 때문에 .values를 이용해서 넘파이로 가지고 온다.
plt.legend() 로 그래프가 무엇을 나타내는지 표시해준다.