판다스(Pandas)
딥러닝을 다루기 위한 1단계는 데이터를 파악하는 것
데이터를 시각화해서 눈으로 직접 확인해 보는 방법이 유용
판다스 라이브러리는 넘파이 기능을 포함하면서도 다양한 포맷의 데이터를 다룰 수 있음.
맷플롯립(Matplotlib)
파이썬에서 그래프를 그릴 때 사용되는 라이브러리
시본(Seaborn)
맷플롯립을 기반으로 조금 더 정교한 그래프를 그리게 해주는 라이브러리
피마 인디언 데이터 분석 실습
colab에서 실습
[판다스를 활용한 데이터 조사]
# 필요한 라이브러리를 불러옵니다.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 깃허브에 준비된 데이터를 가져옵니다.
!git clone https://github.com/taehojo/data.git
# 피마 인디언 당뇨병 데이터셋을 불러옵니다.
df = pd.read_csv('./data/pima-indians-diabetes3.csv')
# 불러온 데이터의 첫 다섯 줄 불러오기
df.head(5)
# 데이터 프레임의 각 컬럼의 값이 몇 개가 있는지 확인
df["diabetes"].value_counts()
# 정보별 특징 확인
df.describe()
정보별 샘플 수(count), 평균(mean), 표준편차(std), 최솟값(min), 백분위 수로 25%, 50%, 75% 해당값, 최댓값(max)
# 각 항목의 상관관계 확인
df.corr()
colormap = plt.cm.gist_heat # 그래프의 색상 구성을 정합니다.
plt.figure(figsize=(12,12)) # 그래프의 크기를 정합니다.
# 각 항목 간 상관관계를 나타내는 heatmap() 함수를 통해 그래프 표시
# vmax는 색상 밝기 조절 인자
# cmap은 미리 정해진 맷플롯립 색상 설정 값을 불러옴.
sns.heatmap(df.corr(), linewidths=0.1, vmax=0.5, cmap=colormap,
linecolor='white', annot=True)
plt.show()
heatmap() 함수는 두 항목씩 짝을 지은 후 각각 어떤 패턴으로 변화하는지 관찰하는 함수
두 항목이 전혀 다른 패턴으로 변화하면 0, 서로 비슷한 패턴으로 변화하면 1에 가까운 값 출력
[중요한 데이터 추출하기]
# 히스토그램을 그려주는 맷플롯립 라이브러리의 hist() 함수 사용
# 가져오게 될 칼럼을 x축으로 지정
# df 안의 plasma 칼럼 중 diabetes 값이 0인 것과 1인 것을 구분하여 불러옴.
# 불러온 데이터의 이름을 narmal과 diabetes로 지정
plt.hist(x=[df.plasma[df.diabetes==0], df.plasma[df.diabetes==1]], bins=30, histtype='barstacked', label=['normal','diabetes'])
plt.legend()
bins는 x축을 몇 개의 막대로 쪼갤지 정하는 변수
barstacked 옵션은 여러 데이터가 쌓여 있는 형태의 막대바를 생성하는 옵션
# BMI를 기준으로 각각 정상과 당뇨가 어느 비율로 분포하는지 확인
plt.hist(x=[df.bmi[df.diabetes==0], df.bmi[df.diabetes==1]], bins=30, histtype='barstacked', label=['normal','diabetes'])
plt.legend()
BMI가 높아질 경우 당뇨 발병률도 증가하는 것 확인 가능
[케라스를 이용하여 피마 인디언의 당뇨병 예측 실행]
X = df.iloc[:,0:8] # 세부 정보를 X로 지정합니다.
y = df.iloc[:,8] # 당뇨병 여부를 y로 지정합니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 모델 구조 설정
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu', name='Dense_1'))
model.add(Dense(8, activation='relu', name='Dense_2'))
model.add(Dense(1, activation='sigmoid', name='Dense_3'))
model.summary()
은닉층을 하나 더 추가
층과 층의 연결을 한 눈에 볼 수 있게 해주는 model.summary() 부분 추가
Dense_1 : 입력층과 첫 번째 은닉층을 연결
Dense_2 : 첫 번째 은닉층과 두 번째 은닉층을 연결
Dense_3 : 두 번째 은닉층과 출력층을 연결
Output Shape : 각 층에 몇 개의 출력이 발생하는지 표시
8개의 입력이 첫 번째 은닉층을 지나며 12개가 되고, 두 번째 은닉층을 지나며 8개가 되었다가 출력층에서 1개의 출력 생성
Param : 파라미터 수 표시 (가중치 + 바이어스)
가중치 : 8 × 12 = 96 (입력 8개가 12개의 노드로 분산)
전체 파라미터 : 96 + 12 (각 노드에 바이어스 1개씩, 총 12개)
# 모델을 컴파일합니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 모델을 실행합니다.
history = model.fit(X, y, epochs=100, batch_size=5)
100번을 반복한 현재, 약 68.62%의 정확도를 보임.
'Theory > Deep Learning' 카테고리의 다른 글
07 모델 성능 검증하기 실습 (0) | 2023.07.11 |
---|---|
05 다중 분류 문제 해결하기 실습 (0) | 2023.07.03 |
03 퍼셉트론 / 다층 퍼셉트론 / 오차 역전파 / 활성화 함수 / 고급 경사 하강법 (0) | 2023.07.01 |
02 다중 선형 회귀 / 로지스틱 회귀 (0) | 2023.07.01 |
01 선형 회귀 (0) | 2023.06.29 |
댓글