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
반응형