상세 컨텐츠

본문 제목

[머신러닝]당뇨병 분류하는 모델

coding/머신러닝

by golduny_zoo 2021. 5. 20. 12:29

본문

728x90

Import 라이브러리

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb

1. 데이터 확인

컬럼 정보 :

Preg=no. of pregnancy

Plas=Plasma

Pres=blood pressure

skin=skin thickness

test=insulin test

mass=body mass

pedi=diabetes pedigree function

age=age

class=target(diabetes of not, 1:diabetic, 0:not diabetic)

데이터에서 Null데이터는 존재하지 않았지만
(혈압이 0인 사람, 피부두께가 0인사람은 존재하지 않는다..  상식적으로)
0인 데이터가 존재하면 학습에 오류가 생길 데이터들이 많다고 판단하여 지워줄려고 했더니..
모든 데이터가 삭제되는 상황이 발생하여 
각 컬럼의 평균으로 바꿔줄부분은 바꿔주고, 지워줄 부분만지워주었다.

처음 데이터와 다르게 0데이터가 평균값으로 바뀜

데이터의 평균값이 describe함수와 달라 당황했다. 

0데이터를 nan값으로 바꾸어 평균이 바꼈다는 것을 생각하지 못했다. 

그러므로 지금 나온 평균값이 일반적인 평균이다. 


2. 데이터 전처리 

상관관계확인

데이터끼리의 상관관계를 확인하여 학습에 넣을 데이터를 추려본다. 

상관관계의 값이 0.1이 다 넘어가므로 관계가 없다고 생각할 수 없어 모든데이터를 학습에 넣는다. 

 

학습데이터와 분류값 분리

스케일링

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X=sc.fit_transform(X)

train, test 셋 분리 


모델 학습 / 성능확인

분류에 사용하는 모델이여서 KNN, Logistic 두가지를 이용해 사용해 봤다.

Logistic Regression

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix,accuracy_score
classifier = LogisticRegression(random_state =0)
classifier.fit(X_train, y_train)
y_pred=classifier.predict(X_test)
y_test= y_test.values

0.81로 정확도가 측정되었다. 

 

KNN

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix,accuracy_score
classifier = KNeighborsClassifier(n_neighbors= 15,metric='minkowski')
classifier.fit(X_train, y_train)
y_pred=classifier.predict(X_test)
y_test= y_test.values

KNN의 K의 숫자를 바꿀 때마다 수치가 달라졌고, 15을 넣었을 때 정확도가 가장 높았다.

 

 

관련글 더보기