아래 데이터프레임에서 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()

'Machine Learning' 카테고리의 다른 글
| Logistic Regression - Confusion Matrix 인공지능 성능 평가 (0) | 2022.12.02 |
|---|---|
| Logistic Regression ( 로지스틱 회귀 ) - 인공지능으로 데이터 결과 예측하기 (0) | 2022.12.01 |
| Dataset 을 Training 용과 Test용으로 나누기 (0) | 2022.12.01 |
| 머신러닝 - Label Encoding , Ont-hot Encoding (0) | 2022.12.01 |
| [sklearn] 데이터 표준화, 정규화 - StandardScaler , MinMaxScaler (0) | 2022.11.30 |