개발/머신러닝

파이썬. 머신러닝 - Linear Regression ?

웅'jk 2022. 12. 1. 13:14

리니어 리그레션은 수치와 관련된 예측을 하는 인공지능입니다.

 

y = aX+b 의 방정식을 기반으로 임의의 a , b 값을 설정하여

(x의 종류가 여러개일수도있습니다.)

X값과 y을 넣어 오차가 적어지는 a,b값을 구하는 방법이다.

 

먼저 학습할 데이터를 가져옵니다.

위와 같은 값을 가진 데이터프레임에서 경력별로 연봉값을 알고 싶습니다.

먼저 NaN값이 있는지 확인합니다.

df.isna().sum()

이제 X와 y 값을 나눕니다.

X = df.loc[:,'YearsExperience'].to_frame() 
# X를 반드시 dataframe 으로 가져와야합니다. 

y = df['Salary']

문자열 데이터가 있을 경우 바꿔줘야 합니다만 지금은 없기 때문에 넘어갑니다.

 

또한 피처스케일링(노멀라이징) 과정 또한 리니어 리그레션이 지원을 해주기 때문에 넘어갑니다.

 

이제 Training / 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 )

리니어 리그레션으로 모델링을 하여 학습합니다..

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit( X_train , y_train )

이제 a 값과 b값을 알 수 있게 됩니다.

regressor.coef_ # a
regressor.intercept_ # b

이번에는 이 결과를 가지고 테스트를 진행합니다.

y_pred = regressor.predict(X_test) # y_pred 에 테스트값 저장

성능 측정을 위해 먼저 오차값을 구합니다.

error = y_test - y_pred
# 에러는 : 실제값 - 예측값

이 에러값을 이용해 성능을 알아볼텐데 부호가 있기 때문에 이 부호가 있으면

결과값에 이상이 발생합니다. 따라서 제곱하여 평균을 구합니다.

 

(error **2).mean()

이렇게 나온 결과값을 

Mean Squared Error -> MSE 값이라고 합니다.

 

이결과를 차트로 나태내면 다음과 같습니다.

그래서 인공지능의 성능이 좋다는 뜻은 MSE값이 낮아야 좋다는 뜻입니다.