히트맵(Heatmap)에 대해

남가연·2023년 7월 20일
1

AI

목록 보기
5/11

히트맵(Heatmap)

열을 뜻하는 히트(heat)와 지도를 뜻하는 맵(map)을 결합시킨 단어
로, 색상으로 표현할 수 있는 다양한 정보를 일정한 이미지 위에 열분포 형태의 비주얼한 그래픽으로 출력하는 것

쓰는 이유

히트맵은 다른 시각적 요소보다 더욱 시각적이기 때문 → 여러 사람이 데이터를 한눈에 알아보기 쉬움.

이런 데이터보다

이런 데이터가 더 눈에 잘 들어올 것이다.

읽는 방법

  • 보통 히트맵에서 색상을 보고 읽는데, 옆의 연관성 척도(가장 오른쪽 길게 색상 이어지는거)를 보고 읽으면 됨
    • 위 예시를 기준으로는 색상이 진할수록 연관성이 높음
  • 그리고 같은 열의 기준으로 선대칭이기에, 실질적으로는 선을 기준으로 위나 아래만 보면 됨.

실습 : 미국 원주민들의 당뇨 현상과 연관된 것 찾기

먼저, 데이터들의 정보를 보면

임신 횟수, 공복 혈당 농도 등 여러 정보가 있지만, 우리가 가장 봐야 할 정보는 발병률(diabetes)이다

발병률과 연관성이 높다면 그것이 발병의 원인이 될 수 있기에, 연관성을 알아보기 위해 heatmap을 사용할 예정이다.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

!git clone https://github.com/taehojo/data.git
#데이터 가져오기 (위 git에서 가져옴)
df = pd.read_csv('./data/pima-indians-diabetes3.csv')

#데이터 정보 보기
df.info()

#데이터에 관한 설명들을 자세히 볼 수 있음음
df.describe()
#데이터 간의 연관성을 볼 수 있음
df.corr()

#heatmap 설정
colormap = plt.cm.gist_heat
plt.figure(figsize=(10,10))

#heatmap (데이터, 그 외 설정들)
sns.heatmap(df.corr(),linewidths=0.1, vmax=0.5, cmap = colormap, linecolor = 'white', annot = True)
plt.show()

결과 :

그 중 이 결과를 봐야 하는데, 여기서는 색상이 밝을수록 연관성이 높다 볼 수 있음

연관성이 높은 순으로 나열하면

  • plasma (식사 2시간 후 공복 혈당)
  • bmi (체질량지수)
  • age (나이)
  • pregnant (임신 횟수)

로 혈당과 지방과 관련된 것이 가장 높음을 볼 수 있었고, 그 다음으로 나이와 임신 횟수를 볼 수 있다. 나이와 임신 횟수 또한 당뇨와 연관이 있음을 여러 공인이 증명하기 때문에 관련 있음을 알 수 있다.

미국 원주민들의 당뇨 현상을 딥러닝으로 예측해보기

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from tensorflow.keras.models import Sequential  
from tensorflow.keras.layers import Dense

!git clone https://github.com/taehojo/data.git
df = pd.read_csv('./data/pima-indians-diabetes3.csv')

#데이터를 정보 / 결과로 분리함(x가 정보, y가 결과)
x = df.iloc[:,0:8]
y = df.iloc[:,8]

#model은 은닉층을 2층으로 함
model = Sequential()
# 첫번째 층은 relu 함수를 사용해 입력층과 은닉1층을 연결함
model.add(Dense(12, input_dim = 8, activation='relu', name = 'Dense_1'))
# 두번째 층은 relu 함수를 사용해서 은닉1층과 은닉2층을 연결함. Dense_1,2에서 relu 함수를 사용하는 이유는 기울기 소실을 방지하기 위해서,
model.add(Dense(8, activation = 'relu', name='Dense_2'))
# 세번째 층은 sigmoid 함수를 이용해서 은닉2층과 출력층을 연결함. sigmoid 를 사용한 이유는 이진 분류를 하기 위해서
model.add(Dense(1, activation = 'sigmoid', name = 'Dense_3'))
#model.summary()를 사용하면 층 사이의 연결을 볼 수 있게 해줌
model.summary()

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(x,y,epochs = 100, batch_size = 5)
print('history : ', )

결과 :

profile
-ㅅ-)b

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기

관련 채용 정보