본문 바로가기
  • UNIV_LIFE_BY_HUGWAN
Artificial Intelligence/Machine Learning 실습

BREAST CANCER CLASSIFICATION(실습)-1

by 이후지 2022. 12. 27. 17:35

안녕하세요! 

요즘 머신러닝과 딥러닝에 관한 이론적인 공부와 더불어 이를 토대로 직접 구현해 보고 싶어서 공부 중입니다!

 첫 번째 실습에서는 양성종양과 음성종양을 머신러닝을 통해 구별해 보겠습니다!!

오늘은 일단 데이터 셋을 다루는 방법에 대해서 알아보도록 하겠습니다.

재밌겠다! ㅎㅎ

 


일단 전체적인 개요에 대해서 설명하면, 

1. 데이터 가져오기

2. 데이터 분석

3. 모델 학습(training)

4. 모델 평가

5. 모델 성능 개선

 

이런 과정을 통해서 모델이 완성되는데, [1,2], [3,4], [5] 이렇게 세 개의 파트로 나눠서 블로그를 작성해 보도록 할게요!

그럼 오늘은 데이터를 가져오고 분석하는 방법에 대해 공부하겠습니다!

오늘 배우는 내용이 뒤에서 계속 쓰이기 때문에 가장 중요한 것 같아요!


1) 라이브러리 가져오기

일단 데이터를 가져오기 전에 우리가 쓸 라이브러리를 먼저 가져오도록 하겠습니다.

이 라이브러리 들은 데이터를 좀 더 쉽게 사용하기 위해서 쓰는 툴이라고 생각하시면 됩니다. 

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

판다스(pandas)

데이터프레임으로 우리가 가져올 데이터를 원하는 방식으로 바꿔서 사용할 수 있게 해 준다! 정도로만 생각하고 전 사용하고 있습니다. 인공지능을 공부할 때는 여러 라이브러리들을 잘 사용하는 게 중요한 것 같아요!

 

넘파이(numpy)

넘파이도 우리가 사용할 데이터들의 배열을 더 직관적으로 사용할 수 있게 해 준다고 생각하시면 됩니다.

 

matplotlib, seaborn

그래프(plot)를 그리고 데이터의 분포를 보기 위한 라이브러리로 생각하시면 됩니다.


2) 데이터 가져오기

 from sklearn.datasets import load_breast_cancer
 cancer = load_breast_cancer()

sklearn에서 데이터를 가져오겠습니다. 

인터넷에 sklearn의 dataset을 검색하면 어떤 데이터들이 있는지 나오기 때문에 

이거는 한번 보고 오셔도 도움이 될 것 같아요!

 

그중에 유방암에 대한 데이터를 가져왔습니다. 

이를 변수 cancer에 넣었습니다.

 

 print(cancer['DESCR'])

이렇게 출력해주면 cancer, 즉 load_breast_cancer의 description을 확인할 수 있습니다.

더보기

출력값입니다. 아래 보시면 569개의 예시가 있고, 30개의 특성이 있음을 확인할 수 있습니다.

**Data Set Characteristics:**

    :Number of Instances: 569

    :Number of Attributes: 30 numeric, predictive attributes and the class

    :Attribute Information:
        - radius (mean of distances from center to points on the perimeter)
        - texture (standard deviation of gray-scale values)
        - perimeter
        - area
        - smoothness (local variation in radius lengths)
        - compactness (perimeter^2 / area - 1.0)
        - concavity (severity of concave portions of the contour)
        - concave points (number of concave portions of the contour)
        - symmetry
        - fractal dimension ("coastline approximation" - 1)

3) 데이터 변환

이렇게 가져온 데이터는 직관적이지가 않아서 해석하기 어렵습니다.

이럴 때 사용하는 게 데이터프레임입니다!

pandas를 이용해서 데이터를 이쁘게 만들어볼게요.

df_cancer = pd.DataFrame(np.c_[cancer['data'], cancer['target']], 
                           columns = np.append(cancer['feature_names'],['target']))

일단 pandas에 DataFrame에는 data, index, column 등을 설정할 수 있습니다.

여기서는 np(numpy)를 이용해서 데이터를 합치고 column에는 원래 있던 feature에 target을 추가했네요.

index는 따로 지정해주지 않았기 때문에 숫자로 나타날 겁니다.

 

(이 코드가 이해하시기 힘드시면 pandas 데이터프레임에 대해 검색해 보시고 넘파이에 대한 내용을 공부하시면 됩니다!

아니면 일단 이런 방법으로 데이터를 만지는구나! 하고 넘어가셔도 될 것 같아요.)

 

그리고 데이터가 잘 보이는지 확인을 위해 head()를 사용하겠습니다!

df_cancer.head()

500개가 넘는 데이터 중 앞 5개를 보여줍니다.

저기 마지막 column에 target이 추가된 게 보이시나요? ㅎ

4) 데이터 확인하기

이제 만든 데이터를 그래프로 확인해 보겠습니다.

 sns.scatterplot(x = 'mean area', y = 'mean smoothness', hue = 'target', data = df_cancer)

sns(seaborn)을 통해서 데이터의 그래프를 확인할 수 있습니다.

여기서 지금까지 손 봐준 df_cancer가 변수로 당연히 들어갑니다.

hue는 target기준 값이 다르면 색을 다르게 표현합니다.

지금은 area와 smoothness를 기준으로 그래프를 그려보겠습니다.

 

결과는??

 

중요한 건, 양성과 음성 종양이 완전히 뒤섞여있지 않고 어느 정도 구별할 수 있다는 겁니다.

 

마지막으로 각 특징들 간의 상관관계를 확인해 보겠습니다. (30개의 특징들)

plt.figure(figsize = (20, 10))
sns.heatmap(df_cancer.corr(), annot = True)

이는 heatmap으로 가능한데, 결과를 확인해 보면?

이렇게 각 특징들 간의 상관관계를 수치로도 확인할 수 있습니다.

 


오늘 배운 중요한 점은 데이터를 가져와서 사용할 때는 판다스 데이터 프레임을 이용해 이쁘게 만들어 줘야 하고, 

이를 그래프로 확인해 볼 수 있었다는 것입니다. 그리고 양성과 음성이 구별할 수 있게 분포가 되어있다는 점도 확인했네요!

코드 하나하나를 이해하는 데에 시간을 쓰기보다는

일단 어떤 식으로 데이터 변환 과정이 일어나는지를 확인하는 게 중요한 것 같습니다.

 

그럼 다음시간에!! 이 데이터를 가지고 머신러닝 기법 중 하나인 SVM을 이용해 학습시켜보는 과정에 대해 공부하도록 하겠습니다.

댓글