Code Example

Linear Regression Code Example

Oceanlighth AI 2023. 1. 11. 13:34
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