AI/이론

124. [Python] [Machine Learning] : 선형 회귀 Linear Regression(연봉 예측)

천재단미 2025. 1. 25. 20:36
728x90
반응형

반응형

 

 

 

 

 

 

 


1. 선형 회귀(Linear Regression)란?

선형 회귀는 독립 변수(Feature)와 종속 변수(Target) 간의 선형 관계를 모델링하는 방법입니다.

  • 수식:y=wx+b
    • yyy: 종속 변수 (예측값, 연봉)
    • xxx: 독립 변수 (입력 데이터, 경력)
    • www: 기울기 (weight, 가중치)
    • bbb: 절편 (bias)
  • y=wx+by = wx + b
  • 목표: 데이터와 가장 잘 맞는 직선을 찾아 yyy 값을 정확히 예측하는 것.

 


 

 

 

2. 데이터 이해

 

 

2-1. 문제 정의

  • 회사 직원의 경력(Years of Experience) 데이터를 이용해 연봉(Salary)을 예측합니다.

 

2-2. Python을 활용한 데이터 로드

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 데이터 로드
data = pd.read_csv('salary_data.csv')

# 데이터 확인
print(data.head())

 

출력


2-3. 데이터 구성

  • 데이터셋:
    • YearsExperience: 직원의 경력 (x 값, 독립 변수)
    • Salary: 직원의 연봉 (y 값, 종속 변수)
# 1. Nan 처리
df.isna().sum()

#2. X와 y로 분리 
y = df['Salary']

# 1차원을 2차원으로 만드는 판다스 시리즈 => .to_frame()
X = df['YearsExperience'].to_frame()

# 3. 문자열 데이터를 숫자로 바꾼다. 
X
y

출력

 

 

 

 

 

2-4. 피처 스케일링

  • 피처 스케일링은 딥러닝에 사용
  • 생성된 리니어 리그레이션은, 자체적으로 피처스케일링 가능
# 4. 피처 스케일링 한다. 
# 피처 스케일링은 딥러닝에 사용한다. 
# 우리가 지금 만드려는 리니어 리그레이션은, 자체적으로 피처스케일링 한다. 
# 5. Dataset을 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 = 24)
X_train.shape
#(24, 1)

X_test.shape
#(6, 1)

# 모델링!!
# 연봉을 예측하려 한다. => 수치로 나오는것  => Regresssion
from sklearn.linear_model import LinearRegression
# regressor = > 딥러닝으로 만든 파일 이름을 대체적으로 부르는 파일 이름 
# 모델링
regressor = LinearRegression(positive=True)

# 학습
regressor.fit(X_train,y_train)

# y_pred => y의 예측값 
y_pred = regressor.predict(X_test)
y_pred

y_test

# 리그레이션에 대한 성능 평가 

# 오차를 구하자!! 오차(error) = 원래값 - 예측값 

# 오차의 제곱 평균 공식 => (MSE)
((y_test - y_pred)**2).mean()

 

 

출력

30955226.717302397



  실제 서비스화 :  경력 28년 연봉얼마인가?      

 

new_data = np.array([28 ])
new_data = np.array([28 ]).reshape(1,2)
new_data

#array([[28,  ]])


regressor = regressor.predict(new_data)
regressor

 

출력

array([294371.5885685])

 

 


 

 

 

3. 데이터 시각화

 

 

3-1.경력과 연봉 간의 관계

import matplotlib.pyplot as plt

plt.scatter(data['YearsExperience'], data['Salary'], color='blue')
plt.title('Experience vs. Salary')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()

결론: 경력이 많을수록 연봉이 증가하는 선형 관계를 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형