본문 바로가기
Code Example

Linear Regression Code Example

by Oceanlighth AI 2023. 1. 11.
Linear Regression Code Example

선형회귀 모형을 알아보기 위한 간단한 코드 예시 입니다.

모델 학습 환경은 Jupyter Notebook을 이용하였습니다.

 

sklearn 라이브러리를 통해 간단한 회귀 예측을 해보겠습니다.

라이브러리 불러오기
from sklearn.linear_model import LinearRegression
import pandas as pd
import matplotlib.pyplot as plt
키와 몸무게가 들어있는 파일 준비
# 파일 경로의 경우 사용자의 경로에 맞게 수정해주셔야 합니다.
df = pd.read_csv("C:/Users/User/Downloads/height_weight.csv")

그림 1. print(df)로 데이터 확인하기
height_weight.csv
0.00MB

위의 데이터는 kaggle(https://www.kaggle.com/datasets/mustafaali96/weight-height?resource=download)의 키와 몸무게에 대한 데이터를 약 100개 정도만 추리고 성별 column을 제거하여 .csv 파일로 저장하였습니다.

데이터 중 위에서 5개의 데이터만 확인해보는 코드
df.head()

그림 2. df.head()로 데이터를 위에서부터 5개만 확인하기

df.head()의 경우 위에서 5개의 코드만 보여주지만 괄호() 안에 숫자를 넣으면 그 숫자만큼 데이터를 보여줍니다.

matplotlib으로 주어진 데이터 시각화 
X = df["Height"] # .csv 파일의 Height column의 데이터를 X로 읽어들입니다.
y = df["Weight"] # .csv 파일의 Weight column의 데이터를 y로 읽어들입니다.
plt.plot(X, y, 'o')
plt.show()

그림 3. matplotlib를 통한 시각화

시각화를 통해 주어진 데이터가 우상향 패턴을 보인다는 것을 알 수 있습니다.

 

모델 정의 및 데이터를 모델에 맞게 맞추어 줍니다.
linear_regression = LinearRegression()
linear_regression.fit(X.values.reshape(-1,1), y)
임의의 데이터를 넣어 예측을 합니다.
print(linear_regression.predict([[72.12523]]))

그림 4.1 임의의 데이터에 대한 예측값

임의의 키 72.12523를 넣었을 때, 몸무게가 204.97262149로 나타났습니다.

 

(원본 데이터의 키의 단위는 Inch이고 몸무게는 Pound(lbs)를 사용하였습니다. 조금 이상해 보일지라도 예측에는 문제가 없기 때문에 그대로 사용하도록 하겠습니다.)

 

만약 linear_regression.predict([[?]]) 에 다른 데이터를 넣으면 다른 예측값을 나타냅니다.

print(linear_regression.predict([[62.23893]]))

그림 4.2 임의의 데이터에 대한 예측값 2

다음은 우리가 예측한 직선의 기울기를 알아보겠습니다.
print(linear_regression.coef_)

그림 5. 기울기

우리는 height라는 하나의 column만 사용했기 때문에 1차함수의 직선형태 그래프가 나올 것입니다. 따라서 다른 값을 넣어도 기울기는 똑같이 나오게 됩니다.

기울기를 알아보았으니 절편(bias)을 알아보도록 하겠습니다
print(linear_regression.intercept_)

그림 6. 절편, 편향치(bias)

절편은 그림 6. 과 같이 나타납니다.

그림 6.1 주어진 데이터의 키(Height) 최소값

그림 6.1 처럼 print(df.min())을 작성하여 우리가 미리 준비한 데이터의 최소값을 확인할 수 있습니다.

주어진 데이터의 최소값이 63.456494이기 때문에 X가 0일 경우의 y 절편이 음수가 나타났다고 할 수 있습니다.

마지막으로 주어진 데이터(X)에 대한 레이블(Y)의 상관관계를 그래프를 통해 알아보겠습니다.
plt.plot(X, y, 'o')
plt.plot(X,linear_regression.predict(X.values.reshape(-1,1)))
plt.xlabel("Height")
plt.ylabel("Weight")
plt.show()

해당 코드를 작성해서 실행해보면 다음과 같은 그래프가 나오게 됩니다.

그림 7. 주어진 데이터와 레이블의 상관관계 예측 그래프

그림 7.과 같이 직선이 생기기 전의 우상향 패턴과 비슷하게 그래프가 그려진 것을 알 수 있습니다.

마치며

위의 예시 코드는 단순 선형회귀를 알아보기 위해 간단하게 만들어본 모델입니다. 

 

다음 글에서는 x의 column이 하나가 아닌 여러개인 데이터에 대하여 예측을 하는 모델을 만들어 보겠습니다.

 

Simple_Linear_Regression.ipynb
0.05MB

댓글