본문 바로가기
머신러닝

머신러닝 - 수치 인공지능 만들기( LinearRegression( ) ) , MSE 확인하여 인공지능 성능 확인 , 오차를 plot으로 비교하기

by leo104 2022. 12. 1.
728x90
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() 로 그래프가 무엇을 나타내는지 표시해준다.

 

실제값과 예측값을 비교하는 plot

 

 

 

 

 

728x90