Machine Learning

Linear Regression ( 선형 회귀 )- 인공지능으로 데이터 결과 예측하기

yugyeong 2022. 12. 1. 14:03

 

아래 데이터프레임에서 YearExperience에 대한 Salary 의 데이터 값을 인공지능으로 예측할 것이다.  

 

 

 

1. NaN 확인

 

먼저 nan 데이터가 있는지 확인을 한 후, 만약 nan 데이터가 존재시 다른값으로 데이터를 채워주거나, 해당 행을 지워준다.

 

 

2. X 와 y 로 분리

 

 

그 후  예측할 컬럼 y , 예측하는데 필요한 컬럼 X로 데이터를 분리해준다.

 

 

 

 

3. 문자열 데이터는 숫자로 바꿔준다.

 

현재 데이터프레임은 모두 숫자 데이터이기 때문에 바꿔줄 필요가 없다.

 

 

4. 피처 스케일링 ( 정규화/ 표준화 )

 

리니어 리그레션은 자체적으로 피쳐스케일링을 해준다.
따라서, 피쳐스케일링 할 필요가 없다.

 

 

 

5. Training / Test 셋으로 분리

 

데이터결과 예측을 하기 위해서 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= 1)

 

 

 

 

6. 모델링 한다

from sklearn.linear_model import LinearRegression 을 임포트 한다.

 

여기서 Linear Regression (리니어 리그레션)으로 모델링을 하는 이유는 현재 데이터가 수치 데이터이기 때문이다.

 

메모리에 LinearRegression 을 올려주기 위해서 변수 regressor 에 저장을 해준다.

그 후 fit()을 이용하여 인공지능에 x_train과 y_train을 학습 시킨다.

 

regressor = LinearRegression()
regressor.fit(X_train, y_train)

 

 

 

여기서 선형회귀는 y = ax + b 와 같은 형태이다.

랜덤으로 a와 b 값을 셋팅하고 fit 함수를 실행하면 X_train, y_train 가지고 오차를 찾아서 오차가 최소가 되도록 a와 b값을 셋팅한다.

 

 

위 인공지능이 오차가 최소가 되도록 찾아낸 a와 b 값이다.

a 값을 찾을 때는 regressor.coef_ 를 이용하고, b는 regressor.intercept_ 를 이용하여 값을 리턴받을 수 있다.

regressor.coef_ 

regressor.intercept_ 

 

 

 

7. 테스트하기

 

학습이 끝나면, 이 인공지능이 얼마나 똑똑한지 테스트를 해야한다.
따라서, 테스트용 데이터인 X_test로 테스트한다.

regressor.predict() 괄호 안에 테스트하고자 하는 변수를 넣는다.

테스트 결과값이 리턴된다.

예측한 테스트 결과값을 y_pred 라고 했다.

y_pred = regressor.predict(X_test)

 

 

 

여기서 y_test 는 실제 결과값이다.

 

 

인공지능이 알맞게 훈련되었는지 확인 하기 위해서 성능 측정을 해야한다.

성능측정은 오차를 구하고, 오차를 제곱한 후에, 평균을 구한 값 이다.

 

 

오차( error )는 실제값에서 예측값을 뺀 값이다.

 

 


#  mean (sum of) squared error => MSE
#  MSE 로 성능평가해서, 수치가 작을수록 좋은 인공지능이라는 뜻이다.

 

 

 

 

 

y_test 와 y_pred 를 차트로 그려서 비교할 수 있다.

아래는 plot 함수를 이용하여서 차트를 그린 것이다.

plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Real','Pred'])
plt.savefig
plt.show()