본문 바로가기
머신러닝

[머신러닝] Linear Regression

by eyoo 2022. 5. 6.

선형회귀(Linear Regression)를 통해 분포된 데이터에서 관계를 찾고 그 관계를 직선형 방정식으로 나타내어 다른 주어진 데이터로 예측할수있다.

 

x,y값은 데이터셋으로 주어졌으며 이를 통해 b를 찾아야한다.

그리고 실제와 예상의 오차를 줄여 b0, b1 의 값을 찾아 가는 과정을 학습이라고 한다.

 

여기 경력과 연봉데이터를 나타내는 데이터프레임이 있다.

 

df=

 

먼저 Nan을 찾고, 있으면 처리한다.

 

in:

df.isna().sum()

out:

YearsExperience    0
Salary             0
dtype: int64

# Nan이 없다.

 

 

X를 설정하자

 

in:

X = df.iloc[:,0]
X.shape

out:

(30,)

# X의 형태가 1차원으로 나온다.

 

※ X가 무조건 2차원일때 학습이 가능하다.

따라서 reshape을 사용해 2차원으로 변경하자

 

X = X.values.reshape(30,1)

 

 

y를 설정하자

 

y = df['Salary']

 

 

※ 리니어리그레션 라이브러리는 자체에서 피쳐스케일링을 해준다 .
따라서 피쳐스케일링 하지않고 바로 데이터를 사용하면 된다.

 

학습용과 테스트용으로 데이터를 분리한다.

 

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= 3)

 

 

그 후, 리니어리그레션을 선언(모델링)한다.

 

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()

# LinearRegression을 regressor 변수에 저장하여 만들었다.

 

 

이제 이것을 학습시키면 된다.

 

in:

regressor.fit(X_train,y_train)

out:

LinearRegression()

# fit함수의 변수로 X_train(학습 문제)과 y_train(답)을 입력하여 학습시킨다.

 

 

학습이 끝나면 이 인공지능이 얼마나 똑똑한지 테스트 해야한다.

인공지능한테 우리가 학습에 사용하지 않는 데이터를 넣어서 결과를 가져온다.

그값이 바로 y hat (y^) 이다. (인공지능이 예측한값)

 

먼저 X 테스트 데이터를 넣어 학습한것을 토대로 답을 산출하도록 한다.

 

in:

y_pred = regressor.predict(X_test)
y_pred

out:

array([ 72348.74519846,  53511.61125108, 100604.44611953, 115674.15327744,
        81767.31217215,  68581.31840899])

# predict함수를 사용한다.

 

 

실제 값과 예상값의 오차를 구해본다.

 

in:

error = (y_test-y_pred)
error

out:

15   -4410.745198
5     3130.388749
22     697.553880
26    1294.846723
18    -404.312172
14   -7470.318409
Name: Salary, dtype: float64

 

 

그 후, MSE(Mean Squared Error)를 구한다.

 

in:

(error**2).mean()

out:

14564390.306734825

# 오차의 평균값을 나타낸것이며 숫자가 작을수록 정확하다.

 

 

이를 그래프로 나타낼수있다.

 

in:

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

out:

 

 

 

 

 

댓글