
목차 ▽열기
1. 예측 모델
auto-mpg.csv 데이터를 통해, mpg (mile per gallern, 자동차 연비) 를 예측하는 모델을 만드세요.
컬럼 정보
MPG (miles per gallon - 연비),
cylinders (실린더 갯수)
engine displacement (inches 배기량),
horsepower (마력),
vehicle weight (lbs. 무게),
time to accelerate from O to 60 mph (sec. 60mph까지 걸리는 시간),
model year ,
origin of car (1. American, 2. European, 3. Japanese).
Also provided are the car labels (types)
2. 실습 목표
"주어진 데이터를 바탕으로, X(특징 변수)와 Y(목표 변수)의 관계를 선형 회귀 모델을 통해 학습하고, 새로운 데이터를 기반으로 Y 값을 예측합니다."
- *선형 회귀(Linear Regression)**의 기본 개념 이해.
- 데이터를 사용하여 회귀 모델을 학습하고 예측하는 과정 실습.
- 모델 평가를 통해 예측 성능을 확인하는 방법 학습.
3. 코드 및 풀이
3-1. 필요 라이브러리 불러오기
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
3-2. 데이터 로드
- 첨부된 데이터셋을 불러옵니다.
# 데이터 불러오기
df = pd.read_csv('../data/auto-mpg.csv') # 파일명에 맞게 변경
df

출력

3-3. 데이터 전처리
- 결측치 확인 및 처리.
- 필요 없는 열 제거.
# 결측치 확인
df.isna().sum()

3-4. Feature와 Target 분리
# 필요한 열만 선택
X = df.loc[ : ,'cyl' : 'origin'] # 독립 변수
y = df['mpg'] # 종속 변수
X['origin'].unique()


3-5. 카테고리형 데이터를 숫자로 변환
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer( [ ( 'encoder',OneHotEncoder(), [ 6 ] )],remainder = 'passthrough')
X = ct.fit_transform(X)
X

출력

TIP💡
import pandas as pd
X = pd.DataFrame(X)
X = X.reset_index(drop=True)
type(X)
3-6. 데이터 분리
- 데이터를 학습용과 테스트용으로 나눕니다.
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 = 27)

3-7-1. 모델 학습( LinearRegression )
- 선형 회귀 모델 생성 및 학습.
from sklearn.linear_model import LinearRegression
# 모델 생성
regressor1 = LinearRegression ()
# 모델 학습
regressor1.fit(X_train, y_train)


3-7-2. 모델 학습( RandomForestRegressor )
from sklearn.ensemble import RandomForestRegressor
regressor2 = RandomForestRegressor(random_state = 27 ,n_estimators = 500)
regressor2.fit(X_train, y_train)


3-8. 예측
- 학습된 모델로 테스트 데이터를 예측.
# 예측
y_pred1 = regressor1.predict(X_test)


y_pred2 = regressor2.predict(X_test)

3-9. 모델 평가
- 평가 지표: MSE(Mean Squared Error), R²(결정 계수).
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
mean_squared_error(y_test, y_pred1)
r2_score(y_test, y_pred1)

출력
10.546527160278124
0.8427812773020084
mean_squared_error(y_test,y_pred2)
r2_score(y_test, y_pred2)

출력
5.722837561012684
0.914688769309842
4. 결과 시각화
- 실제 값과 예측 값 비교.
df_y['y_pred'] = y_pred
df_y['y_pred2'] = y_pred2
df_y

df_y = df_y.reset_index(drop = True)
df_y.iloc[0 : 9 , ].plot(kind = 'bar')
plt.show()


5. 추가 문제
# 배기량 301, 마력 113, 실린더 8개 가지고 무게 2900 엑셀 10.7, 81년식, 유럽차의
# 연비를 예측하세요
풀이 5.
regressor2

X[0, ]
array([1.000e+00, 0.000e+00, 0.000e+00, 8.000e+00, 3.070e+02, 1.300e+02,
3.504e+03, 1.200e+01, 7.000e+01])

np.array([[0,1,0 ,8, 301, 133, 2900, 10.7, 81]])
new_data = np.array([[0,1,0 ,8, 301, 133, 2900, 10.7, 81]])
new_data.shape
#(1, 9)
new_data
array([[0.00e+00, 1.00e+00, 0.00e+00, 8.00e+00, 3.01e+02, 1.33e+02,
2.90e+03, 1.07e+01, 8.10e+01]])

regressor2.predict(new_data)
출력
array([23.1934])

'Python > 실습' 카테고리의 다른 글
102. [Python] 프로그래밍 실습 : FUNCTIONS (함수) (0) | 2025.01.21 |
---|---|
98. [Python] 프로그래밍 실습 : Loop ( 반복문 ) (0) | 2025.01.20 |
96. [Python] 프로그래밍 실습 : COMPARISON OPERATORS (비교연산자) (0) | 2025.01.20 |
93. [Python] 프로그래밍 실습 : LISTS(리스트) (0) | 2025.01.19 |
92. [Python] 프로그래밍 실습 : STRINGS(문자열) (0) | 2025.01.19 |