인공지능

Tabular Data - 당뇨병에 걸릴 확률 회귀

별은_StarIs_Dev 2025. 2. 9. 15:47
반응형

목적

 - 당뇨병에 걸릴 확률을 예측해보자 (회귀)

 

1. 데이터 불러오기

import pandas as pd
train = pd.read_csv('./data_folder_reg/diabetes_reg_train.csv')
test30 = pd.read_csv('./data_folder_reg/diabetes_reg_test30.csv')

 

 

2. 데이터 분할

x = train.drop(columns=['target'])  # 특징(Feature) 변수들
y = train['target']  # 예측할 대상(Target) 변수

from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.3, random_state=2024)

 

 

3. 모델 학습

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(train_x, train_y)

 

  • 선형 회귀(Linear Regression) 모델을 생성하고 학습
  • fit(train_x, train_y): 훈련 데이터를 사용하여 모델 학습

 

 

4. 모델 예측

lr_train_pred = lr.predict(train_x)
lr_test_pred = lr.predict(test_x)

 

 

5. 모델 평가

from sklearn.metrics import mean_squared_error
lr_train_mse = mean_squared_error(lr_train_pred, train_y)
lr_test_mse = mean_squared_error(lr_test_pred, test_y)
print(f"lr train mse : {lr_train_mse}, lr test mse : {lr_test_mse}")

 

  • mean_squared_error(MSE): 평균 제곱 오차(작을수록 좋음)
  • train MSE: 학습 데이터의 평균 제곱 오차
  • test MSE: 테스트 데이터의 평균 제곱 오차
    훈련과 테스트 MSE 차이가 크면 과적합(overfitting) 가능성 있음

 

from math import sqrt
print(f"lr train rmse : {sqrt(lr_train_mse)}, lr_test mse : {sqrt(lr_test_mse)}")

RMSE(Root Mean Squared Error): MSE의 제곱근으로, 단위를 원래 스케일로 변환

 

6. 모델 저장 및 로드

import joblib
joblib.dump(lr, 'lr_result.pkl')

load_model = joblib.load('lr_result.pkl')

 

 

7. 새로운 데이터 예측

pred = load_model.predict(test30)

 

 

*추가

MSE대신 R2 score 계산하는 방법

from sklearn.metrics import r2_score
r2 = r2_score(test_y, lr_test_pred)
print(f"R^2 Score: {r2}")

 

**추가

정답파일만들기

result = test_x
result['target'] = lr_test_pred
result.to_csv('./diabetes_reg_result.csv', index=False)

 

최종코드

import pandas as pd
train = pd.read_csv('./data_folder_reg/diabetes_reg_train.csv')
test30 = pd.read_csv('./data_folder_reg/diabetes_reg_test30.csv')

x = train.drop(columns=['target'])  # 특징(Feature) 변수들
y = train['target']  # 예측할 대상(Target) 변수

from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.3, random_state=2024)

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(train_x, train_y)

lr_train_pred = lr.predict(train_x)
lr_test_pred = lr.predict(test_x)

from sklearn.metrics import mean_squared_error
lr_train_mse = mean_squared_error(lr_train_pred, train_y)
lr_test_mse = mean_squared_error(lr_test_pred, test_y)
print(f"lr train mse : {lr_train_mse}, lr test mse : {lr_test_mse}")

from math import sqrt
print(f"lr train rmse : {sqrt(lr_train_mse)}, lr_test mse : {sqrt(lr_test_mse)}")

import joblib
joblib.dump(lr, 'lr_result.pkl')

load_model = joblib.load('lr_result.pkl')

pred = load_model.predict(test30)

result = test_x
result['target'] = lr_test_pred
result.to_csv('./diabetes_reg_result.csv', index=False)
반응형