AI딥러닝/Python

파이썬에서 당뇨병으로 시작하는 머신러닝

Ystory96 2026. 1. 31. 14:42

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

###전처리 완료한 자료받아오기
df=pd.read_csv("C:/data/diabetes3.csv",encoding="utf-8")
#iloc 정수위치 기반 행, 컬럼 선택 메서드
y=df.iloc[ : ,[-1]] #당뇨여부.. 정답
X=df.iloc[:, :-1] #속성명 8개
print(df)

###학습 자료와 테스트 자료 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0,shuffle=True)

print("학습자료",X_train)
print("정답",y_train)

#학습과 예측을 위해 pipe 라인이용하여 모델 생성
#파이프라인을 통해 표준편차, 회귀분석을 함께하여 데이터 누수를 방지함
model=Pipeline([("scaler",StandardScaler()),("clf",LogisticRegression())])
model.fit(X_train, y_train.values.ravel()) #1차원벡터로 펴주는역할(ravel)

"""
비포 (2차원): [[1], [0], [1], [0]] (세로로 긴 상자들)
애프터 (1차원): [1, 0, 1, 0] (옆으로 쭉 늘어선 데이터)
\사이킷런의 fit()
"""
print("정확도 = ",model.score(X_test,y_test)) #테스트자료로 30%

#특정 환자의 자료를 입력하여 당뇨 여부 확인
a = int(input("임신 횟수: "))
b = int(input("경구 포도당 내성 검사에서 2시간 후 혈장 포도당 농도: "))
c = int(input("이완기 혈압 (mm Hg): "))
d = int(input("삼두근 피부 두께 (mm): "))
e = int(input("2시간 혈청 인슐린 (mu U/ml): "))
f = float(input("체질량지수 (kg/m²): "))
g = float(input("당뇨병 가족력 함수 (가족력을 기반으로 당뇨병 발병 가능성을 예측하는 지표): "))
h = int(input("나이 (년): "))
new = pd.DataFrame([[a,b,c,d,e,f,g,h]], columns=X.columns)

#model이 있기 때문에 scalar.transform을 호출할 필요가 없음
#파이프라인을 통해 표준편차, 회귀분석을 동시 진행
#반환 형태: [[0인 확률, 1인 확률]] 형태의 2차원 배열을 반환
#predict_proba: [[Class 0 확률, Class 1 확률]]
proba=model.predict_proba(new)

"""
diabetes=proba[0][0] #0이면 당뇨
normal=proba[0][1] #1이면 정상
"""
#순서 바꿔도 상관 없음
normal=proba[0][0] #0이면 정상
diabetes=proba[0][1] #1이면 당뇨

print(diabetes) # = 0.743482642408591

print(f"당뇨 확률:{diabetes*100:.1f}") #소숫점 첫째자리까지 표시 # = 당뇨 확률:74.3
print(f"정상 확률:{normal*100:.1f}") # = 정상 확률:25.7

if diabetes>0.5:
    result="당뇨"
else:
    result="정상"

print(diabetes) # = 0.743482642408591   
print("AI 예측 결과",result)