관리 메뉴

물 만날 물고기

[KNIME] Workflow - 의사결정나무(Decision Tree)를 이용한 UCI 유방암(Breast Cancer) 데이터 분석 본문

KNIME

[KNIME] Workflow - 의사결정나무(Decision Tree)를 이용한 UCI 유방암(Breast Cancer) 데이터 분석

Lung Fish 2023. 1. 15. 06:30

🔍 예상 검색어

더보기

# KNIME 의사결정나무를 이용한 데이터 분석

# KNIME Decision Tree를 이용한 데이터 분석

# KNIME 유방암 데이터 분석

# KNIME Breast Cancer Data 분석

# CSV Reader

# Row Filter

# String To Number

# Column Filter

# Number To String

# Rule Engine

# Partioning

# Decision Tree Learner

# Decision Tree Predictor

# Scorer (JavaScript)

# Value Counter

 


 

 해당 포스팅은 데이터 분석 솔루션 KNIME을 이용하였으며,  UCI 유방암 데이터셋으로 의사결정나무(Decision Tree) 알고리즘을 사용하는 방법(Workflow)에 대하여 정리를 하고자 작성하였습니다. 

 참고사항으로 해당 워크플로우는 성능향상에 대한 내용보다는 Decision Tree 사용방법에 대한 정리가 주목적이며, 별도의 하이퍼 파라미터 튜닝, 스케일링 및 오버샘플링 기법등이 적용되지는 않았으니 참고하시기 바랍니다. 이후에 관련된 부분들도 정리하여 포스팅할 수 있도록 하겠습니다.

 

 

▼ KNIME Workflow

 

1. 데이터 불러오기

1.1 <CSV Reader> 노드를 통한 UCI - Breast Cancer Dataset을 불러오기 합니다. 해당 데이터셋은 URL 링크를 통해 불러오기 하였으며, 데이터셋에 대한 설명이 필요하신 분은 하단 참고자료에 관련 포스팅을 참고하시 바랍니다. 

 

▶ URL : https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data

 

1.2 데이터셋은 컬럼을 따로 가지고 있지 않으므로 Has column header 선택을 해제하여 주시고, Transformation 에서 컬럼명을 별도로 입력해야 합니다. 

 

 

1.3 유방암 데이터셋이 1~10까지 값으로만 구성된 데이터 셋이라 모든 데이터가 Number (Integer) 타입이어야 하는데, Column6  [Bare Nuclei] 컬럼이 String 타입으로 확인이 됩니다. 해당 부분은 별도의 전처리가 필요할 것으로 확인됩니다.

 

 

 

 

1.4 노드를 실행하면 총 699개 인덱스와 11개 컬럼으로 구성된 데이터셋이 정상적으로 로드되었음을 확인할 수 있습니다.

 

UCI - 유방암 데이터셋

 

2. 데이터 전처리

2.1 <Value Conter> 노드를 이용하여 String 타입으로 되어있었던 [Bare Nuclei] 컬럼을 확인해 보니 1~10까지 값 이외에  '?' 값으로 되어있는 인덱스 16개 존재하는 것을 확인할 수 있었고, 해당 인덱스는 Drop 하고 분석을 진행하도록 하겠습니다. 

 

Value Conter 노드를 활용한 Unique값과 인덱스 개수 확인 (파이썬에서 value_counts() 함수와 같은 기능을 함)

 

 

2.2 <Row Filter> 노드를 이용하여 [Bare Nuclei]에서 '?'값이 포함된 것으로 확인된 인덱스를 제외하고 필터링을 진행합니다. '?' 값이 포함되지 않아야 하기 때문에 Filter 조건을 Exclude rows by atrribute value로 선택하고, [Bare Nuclei] 컬럼을 선택 및 제외할 값의 패턴을 입력하여 실행합니다.

 

 

2.3 <String To Number> 노드를 이용하여 [Bare Nuclei] 컬럼도 다른 컬럼들과 마찬가지로 숫자형 컬럼으로 변경합니다. 숫자형 중에서도 정수형 타입이므로 Type 속성을 Number (integer)로 설정합니다.

 

 

2.4 <Column Filter>를 이용하여 [id] 컬럼을 제외하고,  <Number to String> 노드로 [Class] 컬럼을 Int 타입에서 String 타입으로 변경해줍니다. 분류모델을 돌릴 때 Target이 되는 컬럼은 String 타입 형태로 미리 변경해두어야 합니다.

 

 

2.5 <Rule Engine> 노드를 이용하여 Class 값을 이해하기 쉽도록 바꾸어 줍니다. 2 → Benign(양성), 4 → malignant(악성) 으로 변경해 주며 <String Replacer>노드를 2번 사용하는 방법도 있지만, 저는 <Rule Engine> 노드를 이용하여 바꾸는 방법을 선택하였습니다. 값을 변경할 컬럼을 선택하고 조건을 주고 나서 '=>' 값 다음에 변경할 값을 입력하면 됩니다.

 

 

2.6 마지막으로 <Partitioning> 노드를 이용하여 Training 데이터셋과 Test 데이터셋을 분리할 수 있도록 합니다. 저는 트레이닝과 테스트셋 비율을 7:3으로 설정하였고, Startified sampling 옵션을 이용하여 트레이닝 테스트셋의 클래스 비율도 전체 데이터셋의 비율과 동일하게 설정해주고, random seed도 사용하여 다시 실행하더라도 동일한 데이터셋 구성을 가질 수 있도록 설정해줍니다.

 

 

3. 데이터 모델링

3.1 <Decision Tree Learner> 노드 사용하기

 

3.1.1 <Decision Tree Learner> 노드를 이용하여 트레이닝 데이터셋에 대한 훈련을 진행하는데, 저 같은 경우 분기 기준을 Gini index로 설정하고, Pruning 관련 옵션은 선택하지 않았습니다. 대신 각 노드별 최소 샘플수를 30개로 지정하였습니다.

 

 

3.1.2 해당 노드에서 마우스를 우클릭하면 Decision Tree View를 통해 데이터가 어떻게 나누어졌는지 트리 모델을 확인할 수 있습니다. 저는 개인적으로 KNIME 트리 모델을 돌리고 났을 때, Simple 트리 뷰를 보는것이 가독성이 좋아서 선호를 하고 있습니다.

 

 

3.2 <Decision Tree Predictor> 를 이용해 앞서 훈련한 모델을 연결해주고, <Partitioning> 노드에서 분리된 테스트 데이터셋을 연결하여 모델에 대한 예측을 진행하여 줍니다. 향후에 Roc Curve 곡선을 보고 싶다거나 예측한 인덱스의 Proba값이 필요하면 Append Columns with normalized class distribution 옵션을 선택하면 됩니다. 저는 생략하고 진행하였습니다.

 

4. 성능평가

4.1 <Scorer (JavaScript)> 노드를 이용하여 예측된 모델의 성능이 잘 나왔는지 평가를 확인합니다. 성능 평가를 할 때 사용하는 노드 중에서 <Scorer> 노드도 있는데, 저 같은 경우 <Scorer (JavaScript)> 노드 사용을 더 선호합니다. F1 스코어도 확인하기 쉽고, 정리도 깔끔하게 되어 있어서 가독성이 좋다고 생각합니다. 만약 본인 KNIME의 Repository에서 해당 노드가 검색되지 않는다면 Install KNIME Extensions에서 검색하시어 설치하시면 됩니다.

 

 

4.2 분류모델의 성능평가 결과 Acc 93.17%로 확인되었고, Recall, Precision 등 기타 성능 지표들도 확인할 수 있었습니다.

 


 

지금까지 KNIME 솔루션을 활용하여 유방암 데이터를 분석하였고, 분석방법으로는 의사결정나무(Decision Tree)를 사용하였습니다. 현재 보여드린 워크플로우에서 다른 모델을 사용하거나 파라미터를 조정하는 방법으로 성능을 더 향상시킬 수도 있으며 이후에 해당 부분들도 정리해서 공유드릴 수 있도록 하겠습니다. 

 

 

# 참고자료

 

▽ UCI - Breast Cancer Wisconsin (Original) 데이터셋 설명

 

[Dataset/데이터셋] UCI - Breast Cancer Wisconsin (Original)

🔍 예상 검색어 더보기 # 유방암 데이터셋 # Breast Cancer Data # 1~10으로 이루어진 UCI 유방암 데이터셋 # UCI 유방암 악성 양성 분류 데이터셋 해당 포스팅은 머신러닝 연구 및 실습으로 많이 사용되

lungfish.tistory.com