반응형
목적
- 당뇨병에 걸릴 확률을 예측해보자 (회귀)
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)
반응형
'인공지능' 카테고리의 다른 글
Text Data - 네이버 영화리뷰 감정 분석하기(BERT) (0) | 2025.02.09 |
---|---|
Text Data - 문장 감정분류하기(BERT) (0) | 2025.02.09 |
*빅데이터분석기사 대비! AI 총정리. Tabular, Text, Image (0) | 2025.02.09 |
Tabular Data - 당뇨병에 걸릴지 안걸릴지 분류 (0) | 2025.02.03 |
Tabular Data - 타이타닉 생존자 분류 (0) | 2025.02.02 |