본문 바로가기

Python-머신러닝

Logistic Regression 실습: 사람이 데이터를 잘 봐야한다.

반응형

 

ex) pima-indians-diabetes.csv 파일을 읽어서, 당뇨병을 분류하는 모델을 만드시오.

ㄴ 컬럼 정보

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)

 

- Nan 체크

df.isna().sum()

 

- X와 y 설정

X = df.loc[:, : 'age']
# df.iloc[: , 0: -2+1]

y=df['class']

 

- 이상한 점 발견

ㄴ 혈압이 0이면 죽은 사람 아니냐, 등의 최소가 0인 값이 있다는 것이 좀 이상한 이야기 인것 같다.  

 

- 정확한 인공지능을 만들기 위해서는, 사람이 데이터를 잘 봐야한다.

df.loc[df['Pres']==0,].shape
df.shape
df.loc[df['skin']==0,].shape

 

- 해당 상황은 데이터가 비어있어야하는 데, 비어있는 내용을 0으로 넣었을 수도 있다. 

 

- 데이터가 비어있으면, Null이라고 표시되며, 비어있도록 놔두는 것이다. 

ㄴ 판다스의 장점은 비어있는 데이터는 Nan로 처리해준다. 

ㄴ 백앤드 개발자일 떄, 데이터가 없으면 그냥 없는대로 넘기면 좋다.

 

- 0이라고 되어있는 걸 Nan으로 바꿔주는 작업을 해야한다.

- 최소값이 0이라고 되어있는 컬럼이 Preg, Plas, Pres, skin, test, mass.

 

- 데이터 프레임에 replace라는 함수가 있다. 

ㄴ문자열에 쓰이는 replace와는 다른 함수이다.

import numpy as np

X.loc[:,'Plas': 'mass'] = X.loc[:,'Plas': 'mass'].replace(0, np.nan)

 

- Nan의 데이터가 카운트 되었다. 

 

- Nan 처리 방법

ㄴ 첫번째 전략: Nan 없애는 전략

ㄴ 두번째 전략: Nan을 다른 값으로 채우는 전략

 

- 두번째 전략을 채택하여, Nan의 값을 평균값으로 채워보자.

 

X = X.fillna(X.mean())

 

- 피쳐스케일링: 정규화로 진행해본다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
X_scaled

 

- 트레이닝셋과 테스트셋으로 나눈다.

from sklearn.model_selection import train_test_split

X_train,X_test, y_train, y_test = train_test_split(X_scaled,y,test_size = 0.2, random_state= 0)

 

-  모델링

from sklearn.linear_model import LogisticRegression

classifier = LogisticRegression()
classifier.fit(X_train,y_train)

 

-   컴퓨전 매트릭스로 검증

y_pred = classifier.predict(X_test)

y_test.values

from sklearn.metrics import confusion_matrix,accuracy_score, classification_report
cm = confusion_matrix(y_test, y_pred)

ㄴ y_test.values: 시리즈니까, 넘파이로 만들기

ㄴ cm = confusion_matrix(실제값, 예측값)

 

 

-   정확도


accuracy_score(y_test,y_pred)

print(classification_report(y_test,y_pred))

 

 

- 그래프로 만들기

import seaborn as sb
import matplotlib.pyplot as plt

sb.heatmap(data = cm, cmap = 'RdPu', linewidths=0.5, annot = True)
plt.show()

 

반응형