퐈니썬's LIfe - 잘 실패하자 RSS 태그 관리 글쓰기 방명록
AI Study (16)
2022-02-16 09:12:02
728x90
반응형

 

 

Introduction

 

인공지능을 통해 문제를 해결할 때, 기본적인 인공지능 개발의 절차에는 "데이터 전처리" 라는 단계가 있습니다. 

"데이터 전처리"는 정확하고, 좋은 성능의 예측 모델은 잘 정리된 데이터가 필수적으로 기반되어야하기 때문에 존재하는 단계 입니다. 즉, 교한 예측 분석 모델을 얻기 위해서는 수집된 데이터에 누락된 부분이나, 오차, 또는 데이터 처리에 있어서 가공할 부분은 없는지를 살펴보아야 합니다. 

 

이러한 "데이터 전처리"를 하기 위해서는 데이터를 살펴 보아야 하는 "탐색적 데이터 분석 (Exploratory Data Analysis)" 를 통해 진행하게 됩니다. 

 

"탐색적 데이터 분석 (Exploratory Data Analysis)"  진행하기 위해서 데이터를 눈으로 확인할 수 있도록 "데이터 시각화" 작업이 굉장히 중요합니다. 

 

본 포스트에서는 "탐색적 데이터 분석"에 대해 살펴 보고, 데이터에 따른 시각화 전략, 시각화 방법등이 잘 기록된 사이트를 공유하고자 합니다. 

 

 

탐색적 데이터 분석(EDA)란?

 

탐색적 데이터 분석은 데이터를 분석하고 조사하여 주요 특성을 파악하는 데 사용되는 방식을 뜻합니다.  데이터의 사건에 따른 변수들이 어떻게 구성되어 있는가?, 즉 데이터의 분포와 경향성을 파악하는 작업입니다. 

 

제가 생각하는 탐색적 데이터 분석에 대한 생각의 흐름은 다음과 같습니다. 

 

(1) Raw 데이터 수집

(2) 데이터의 사건(행)에 따른 변수(열)을 시각화

(3) 데이터의 사건마다 데이터 수가 밸런스 맞게 구성되어있나?

(4) 값의 전체 평균은 어떤가? 

(5) 결측치는 있을까? 

(6) 이상치는 있을까? (Domain-specific, 기존에 데이터의 변동성을 안다면)

(7) 데이터의 수집에는 문제가 있을까?

..등등

 

이러한 부분들을 고려하여서 데이터 클린이 이루어진 후에 예측 모델로 넘어가는 것이 차후에 발생하는 문제들이 줄어들고 오히려 워크 플로우에 시간이 단축되고 예측 모델의 성능에도 직접적인 영향을 주기 때문에 굉장히 중요한 단계입니다. 

 

탐색적 데이터 분석의 핵심

 

<1. 데이터 백업>

데이터 분석은 Raw 데이터를 통해서 뿐아니라, 가공된 데이터를 통해서도 해야합니다. 즉, 데이터를 가공할 때마다 또는, 변형할 때마다 해당 데이터가 적합한지 분석을 계속 진행하고 수정해야합니다. 그러므로, 항상 백업을 해두는게 좋습니다. 

 

<2. 데이터에 대한 정확한 이해>

데이터 분석에서 가장 중요한 것은 해당 데이터에 대한 "Domain Specific Knowlege" 라고 볼 수 있습니다. 

테이블 데이터의 row, column의 의미는 무엇인지?

데이터 값의 Feasibility를 정량/정성적으로 판단할 수 있는가? 

(예시. 대한민국 사람의 신장 통계치에 300cm 기재시, 이게 맞는가? 라는 의문)

 

<3. 데이터 결측치에 대한 합리적인 처리>

수집한 데이터가 모두 채워져 있는 경우는 많지 않을 것입니다. 이때, 결측치를 어떻게 처리할지는 데이터 분석에서 중요한 요소입니다. 

수집한 데이터의 결측치 처리는 결국  "Domain Specific Knowlege" 따라 판단해야합니다. 

해당 결측치를 특정 값으로 처리할지?, 버릴지? 등등의 판단이 필요합니다. 

종국에는, 결측치에 의해 예측모델의 성능에 영향을 주어선 안됩니다. 

 

<4. 데이터 시각화>

데이터 시각화는 "데이터에 대한 통찰을 직관적으로 이해", "팀간의 소통" 을 위한 것입니다.

업무의 의사결정을 하는 사람에게 반드시 시각화를 통해 보여주는 것이 가장 효율적이라는 것은 자명합니다. 

여기서 어떻게 보여주느냐 역시, "Domain Specific Knowlege" 따라 판단해야합니다.

데이터 처리자를 위해서~
- 나도 오해/착각 할수 있다!
- 기본적인 것은 꼭 표시하자!( legend, 축, 단위 등)

청자/독자를 위해서 ~
- 사소한 것 까지 알려줘야 한다.
- 저들은 모른다.
- 누구나 이해하기 쉽도록 시각화 하기
- 초등 학생 정도가 들어도 이해할 수 있도록 

 

유용한 시각화 전략 사이트

 

 


데이터를 어떻게 표현해야지, 청자가 잘 이해할 수 있을까?

 

데이터 시각화에서 많은 시간이 걸리는 이유가 되지 않을까 생각합니다. 유용하게 사용될 수 있는 시각화 전략 사이트가 있습니다. 가장많이 사용되는 차트 순위, 차트 표현된 블로그, html, python 코드 등등 많은 부분 영감을 얻어 가실 수 있을거라 생각합니다. 

 

 

<Datavizcatalogue>

많이 사용되는 차트 순위나, 데이터에 따른 차트 사용에 대한 내용을 정리되어 있습니다.

https://datavizcatalogue.com/search/comparisons.html

 

Comparisons: The Data Visualisation Catalogue

Comparisons Visualisation methods that help show the differences or similarities between values. With an axis Without an axis

datavizcatalogue.com

 

<The Python Graph Gallery>

대부분의 차트에 대한 파이썬코드를 공유하고 있습니다.

https://www.python-graph-gallery.com/

 

Python Graph Gallery | The Python Graph Gallery

The Python Graph Gallery displays hundreds of charts made with Python, always with explanation and reproduciible code

www.python-graph-gallery.com

 

 

 

728x90
반응형
2022-01-26 22:48:57
728x90
반응형

<Introduction>

이번 포스트에서는 지난 포스트에 이어 Roboflow에 대해 알아보고자 합니다.

Roboflow의 특징인 사용자가 가지고 있는 데이터를 업로드하여 annotation 할 수 있는 기능을 활용해보고자 합니다. 

 

 

<Roboflow 사용 준비>

Roboflow를 사용 하기 위한 내용은 앞선 포스트를 참고하시길 바랍니다. 

 

2022.01.20 - [AI Study] - [AI Study] Roboflow 탐험하기(1) - 시작, 무료 데이터셋 접근

 

[AI Study] Roboflow 탐험하기(1) - 시작, 무료 데이터셋 접근

Roboflow라는 서비스에 대해 알아보고자 합니다. 최근 인공지능의 object detection task를 공부하면서 알게 된 서비스입니다.   Roboflow는 컴퓨터 비전(Computer Vision) 기술을 이용해 다양한 애플리케이션

panython.tistory.com

반응형

 

<Roboflow 탐험하기 (2) - 사용자 데이터 업로드 >

사용자의 데이터 업로드부터 살펴보겠습니다. 회원 가입을 완료하시고, 자신의 대시보드로 들어가시면 아래의 화면을 확인하실 수 있습니다. 

 

여기서 "Create New Project"를 클릭해주시면 아래의 창을 확인 할 수 있습니다. 

 

사용자가 업로드 할 데이터들에 대한 프로젝트 내용을 기입합니다. 

 

첫 번째로 프로젝트 명을 기입합니다.

두 번째로 해당 데이터에 대한 라이선스를 선택해줍니다. 여러 가지가 있는데, 특별히 정해진 내용은 있는 거 같진 않네요..

세 번째로 업로드 할 데이터들의 목적입니다. 

마지막으로, 업로드할 데이터의 라벨을 작성합니다. ex) 업로드할 이미지가 자동차 일 경우, car와 같이 작성해주시면 됩니다. 

 

저는 캐글의 "Brain MRI Images for Brain Tumor Detection" 의 데이터를 업로드하고자 합니다. 

분류 문제의 데이터를 객체 검출을 해보고자 프로젝트의 목적은 "Object Detection"이 되겠네요. 

 

 

해당 내용에 대한 작성이 완료되면 아래의 화면을 통해서 데이터를 업로드 하시면 됩니다!

 

업로드가 완료되면 "우측 상단의 Finish Uploading"을 누르시면 아래의 창을 확인할 수 있습니다!

 

업로드 된 데이터를 Train/Valid/Test로 나누는 비율을 설정해줍니다!! 목적에 맞게 설정하시고 "Continue"를 누르십시오!

 

업로드 완료!!

 

 

<Roboflow 탐험하기 (2) - 사용자 데이터 Annotation 하기>

이제 원하는 데이터를 업로드 하였으니, 목적에 맞는 Annotation을 진행하면 됩니다!

저는 객체 검출을 목적으로 데이터를 업로드하였습니다. 업로드가 완료된 화면에서 한 장의 이미지를 선택해줍니다. 

그러면 아래의 창을 확인할 수 있습니다. 

 

 

그러고 목적에 맞는 bounding box를 설정하시면 됩니다!! 이게 작업입니다 ㅠㅠ

 

 

 

<Roboflow 탐험하기 (2) - Annotation 한 데이터 다운로드하기>

위 단계에서  Annotation을 완료하였다면, 이제 학습을 위해 Annotation이 된 데이터를 받아야 할 겁니다. 원하는 데이터들에 대해 작업이 완료되면 우측 상단의 "Generate New Version"을 클릭하시면 아래의 창을 보실 수 있습니다. 

 

이제 Annotation이 된 우리의 데이터를 받기 전에 아~~ 주 중요하고 좋은 기능이 여기서 확인할 수 있습니다. 

데이터를 출력 전에 "전처리"와 "데이터 증폭 (Data augmentation)을 설정해서 다운로드할 수 있습니다!!

 

필요에 따라 설정하시면 되는데, 하나하나 확인하시면 좋을 거 같습니다!!

 

<Preprocessing Options>

 

<Data Augmentation Options>

 

해당 옵션을 설정하고 최종적으로 마지막 단계인 "Generate"를 클릭해주시면 아래의 창을 확인할 수 있습니다!

 

 

 

"Export"를 누르시면 Annotation 형식 설정 후 다운로드하시면 됩니다!!

 

이상 Roboflow 탐험하기를 마치겠습니다. 대회나 실제 프로젝트하시면서, 부족한 데이터를 충원할 때 충분히 유용하게 사용되고 있으니 꼭 한번 사용하시면 좋을 거 같습니다!

 

또 여러 가지 비슷한 웹 툴이 있으면 공유해주시면 감사하겠습니다!

728x90
반응형
2022-01-20 15:16:26
728x90
반응형

<Introduction>

Roboflow라는 서비스에 대해 알아보고자 합니다. 

최근 인공지능의 object detection task를 공부하면서 알게 된 서비스입니다. 

 

  Roboflow는 컴퓨터 비전(Computer Vision) 기술을 이용해 다양한 애플리케이션을 만들 수 있도록 지원해주는 서비스라고 소개합니다. 웹으로 구성되어 쉽게 사용이 가능하고, 주요한 특징은 무료 데이터셋을 제공하고, 사용자가 가지고 있는 데이터를 업로드하여 annotation을 할 수 있다는 점이 매력적입니다!!

 

추가적인 데이터를 학습할 대 bounding box를 잡는데 굉장히 용이하였습니다. 

아래 그림은 Roboflow가 제공하는 서비스들입니다.

 

 

<Roboflow 사용 준비>

Roboflow의 다양한 기능을 사용하기 전에 회원가입을 시작하여야 합니다. 아래의 링크를 통해 회원가입을 진행하세요.

 

https://roboflow.com/

 

Roboflow: Give your software the power to see objects in images and video

With just a few dozen example images, you can train a working, state-of-the-art computer vision model in less than 24 hours

roboflow.com

 

회원가입을 완료하시면 가격정책에 대해서 설정하라고 할 것입니다.

 

개인적으로 어노테이션을 작성하거나 무료데이터를 받는 수준에서는 무료 정책도 충분하다고 생각합니다!

 

 

 

<Roboflow 탐험하기 (1) - 무료 데이터셋 >

회원가입-가격정책을 정한 후에 보게되는 화면에서 좌측을 보시면 "public dataset"이라고 있습니다.

여기에 Roboflow가 제공하는 무료 데이터셋을 확인할 수 있습니다.

 

 

 

 

<Roboflow 탐험하기 (2) - 무료 데이터셋  다운받기>

이렇게 많은 무료 데이터를 제공한다는데 놀라웠습니다. 그런 후 사용을 해야겠죠.

예시로 원하는 데이터 셋을 눌러 들어가시면 데이터에 대한 설명들이 있습니다. 

 

그리고 원하는 데이터를 다운로드하기 위해 아래 그림과 같이 버튼을 누르시면 됩니다.

저는 "Cottontail-Rabbits" 데이터셋을 눌러보았습니다. 2009개의 이미지를 제공하네요.

 

 

 

위의 버튼을 누르면 아래의 화면을 보시게 될 것입니다! 주요 부분을 아래에 빨간색 박스로 표기해두었습니다. 

 

 

 

첫 번째로 해당 데이터셋이 지원하는 Annotation의 형식들을 보실 수 있습니다. 이는 차후에 다운로드할 때 실제로 지원하는 형식들을 선택하여 추출할 수 있습니다. 

 

두 번째로 데이터셋 구성입니다. 선택한 데이터셋의 Train/Vaild/Test data 구성을 보실 수 있습니다. 

제가 선택한 데이터셋의 경우, 2009장의 이미지 중 Train은 1980장, Vaild는 19장, Test는 10장으로 구성되어 있네요.

다운로드하고 원하시는 대로 다시 data split 하시는 게 좋을 듯합니다! 

 

세 번째로 Augmentation output입니다. 한 장의 이미지에 대해 augmentation 된 이미지를 몇 장 추출할지를 설정할 수 있습니다. 

즉, 30으로 설정 시 2009 x 30 장으로 총 60180장을 생성하여 다운로드할 수 있습니다. 

아래에 Augmentation을 어떻게 할 것인가 옵션을 정하실 수 있습니다. 

 

모든 게 정해지셨다면, 최종적으로 우측 상단에 "Download" 버튼을 누르시면 됩니다!

 

 

Format은 앞서 말씀드린 Annotation 형식입니다. 원하시는 형식으로 설정하시면 됩니다. 

 

두 번째로 다운을 받으실 때 로컬 저장소에 받으실 거라면 "download zip to computer"  하시면 되고, 웹에서 받으실 것이라면 "show download code" 누르시고 진행하시면 됩니다!!

 

 "show download code"는 "Colab"에서 테스트해볼 때 사용하는 걸 추천드립니다!!

 

다음 포스팅에서는 사용자의 데이터를 업로드하여 Annotation을 하는 방법을 담아볼 예정입니다. 

감사합니다.

 

728x90
반응형
2022-01-19 14:22:52
728x90
반응형

 

<Introduction>

뉴럴 네트워크의 각각 뉴런에 들어오는 입력값의 총합을 출력값으로 변환하는 함수를 "활성화함수 (activation function)" 라고 합니다. 대개 활성화함수의 종류를 보면, "비선형함수"를 고집합니다. 이에 대한 이유를 간단히 정리하고자합니다. 

 

<출처> https://hwk0702.github.io/ml/dl/deep%20learning/2020/07/09/activation_function/

 

<NonLinearlity>

검색해본바에의해 활성화함수 종류만 찾아보아도, "비선형성"이라는 말이 기본적으로 확인 할 수 있었습니다. 그렇다면 왜 활성화 함수는 비선형성을 지녀야할까요?

 

'''

선형함수인 h(x)=cx 를 활성화함수로 사용한 3층 네트워크를 떠올려 보세요.

이를 식으로 나타내면 y(x)=h(h(h(x))) 가 됩니다. 이는 실은 y(x)=ax 와 똑같은 식입니다. a=c3 (c의 세제곱임) 이라고만 하면 끝이죠.

즉, 은닉층이 없는 네트워크로 표현할 수 있습니다. 뉴럴네트워크에서 층을 쌓는 혜택을 얻고 싶다면 활성화함수로는 반드시 비선형 함수를 사용해야 합니다.

'''

 

즉, 역전파 알고리즘에 의해 활성화함수의 미분값이 곱해지면서 계산되는데, 선형함수의 경우 상수값이 곱해지는 단일층과 다를게 없으므로, 은닉층을 가진 뉴럴네트워크를 만들기 위해서, 각 레이어의 뉴런들의 weight 값들이 갱신 되기 위해서는 "활성화함수는 비선형성을 지녀야한다"

 

728x90
반응형
2022-01-05 00:32:26
728x90
반응형

<Introduction>

객체 검출 문제에서 이미지 내에서 사물을 인식하는 방법에는 다양한 유형이 존재합니다.

객체 검출 문제는 다수의 사물이 존재하는 이미지나 상황에서 "각 사물의 위치를 파악하고 사물을 분류" 하는 작업입니다.

 

위 그림을 하나씩 보도록 합시다. 

 

1. Classification: 전통적인 분류 문제는 하나의 이미지를 입력을 받아 해당 이미지가 어떤 클래스인지를 맞추는 문제

2. Classification + Localization: 전통적인 분류를 거치고 나아가 해당 클래스가 존재하는 위치까지 찾는 문제 

3. Object Detection: 한 이미지에 다수의 사물이 존재하여 다수의 사물의 위치와 클래스를 찾는 문제

4. Instance Segmentation: 각각의 사물 객체를 픽셀 단위로 다수의 사물의 클래스와 위치를 실제 edge로 찾는 문제

 

모두 사물을 인식하는 방법에 대한 유형이 되고, Object Detection에서 사용되는 모델 중 하나인 "R-CNN", "Fast R-CNN", "Faster R-CNN"에 대하여 간략히 리뷰하겠습니다. 

 

 

 

<R-CNN>

R-CNN은 대표적인 2-stage 방식의 알고리즘 모델이며, Regional Proposal 단계에서 Selective search 방식을 적용하여 2000개의 window를 사용하였습니다. 

 

 

위 그림을 단계별로 살펴 보겠습니다. 

1. 입력 이미지를 받아, "CPU" 상에서 Selective search 방식을 사용하여 약 2000개의 영역을 추출합니다. 

2. 추출된 약 2000개의 영역의 이미지를 모두 동일한 input size로 만들기 위해 이미지 crop과 resize을 진행합니다.

3. 2000개의 warped image를 각각 CNN 모델에 입력하여 피처를 추출합니다.

4. 피처 맵을 이용해서 SVM에서는 클래스를, Regressor에서는 클래스의 위치를 bounding box로 찾아냅니다.

 

특징

 

1. regional proposal 단계에서 추출한 2000개 영역을 CNN모델에 학습을 해야 합니다.

 

즉, CNN * 2000 만큼의 시간이 소요되어 수행 시간이 길어집니다. 

 

2. CNN, SVM, Bounding Box Regression 총 세 가지의 모델이 한 번에 학습되지 않지 않습니다.

 

즉, 학습한 결과가 Bounding Box Regression은 CNN을 거치기 전의 region proposal 데이터가 입력으로 들어가고, SVM은 CNN을 거친 후의 feature map이 입력으로 들어가기 때문에 연산을 공유하지 않고, 그렇기 때문에 end-to-end로 학습할 수 없습니다. 

 

 

 

<Fast R-CNN>

Fast R-CNN은 R-CNN이 가지는 단점을 극복한 모델로

1) ROI Max pooling,

2) 영역의 특징 추출을 위한 CNN 모델부터 클래스와 클래스 위치를 찾는 연산까지 하나의 모델에서 학습이 가능하도록 하였습니다. 즉, R-CNN에서 CNN * 2000 만큼의 시간을 CNN * 1 만큼의 시간이 걸리게 되었습니다. 

 

 

위 그림을 단계별로 살펴보겠습니다. 

1. 입력 이미지를 받아, "CPU" 상에서 Selective search 방식을 사용하여 약 2000개의 영역을 추출합니다. 

2. 추출된 약 2000개의 영역의 이미지를 모두 동일한 input size로 만들기 위해 이미지 crop만 진행합니다. 

3. 입력 이미지를 CNN에 통과시켜 feature map을 추출합니다. 

4. 추출된 약 2000개의 영역을  앞서 추출한 feature map에 projection 시킵니다. 

5. 추출된 약 2000개의 영역이 projection 된 feature map을 각 ROI에 대한 Pooling을 진행하여 feature vector를 추출합니다. 

6. 이 feature vector는 FC layers를 지나서 클래스를 분류하는 "softmax"와 클래스가 있는 bounding box를 찾는 regressor에 각각 입력되고 연산을 거쳐 결과를 도출합니다. 

 

특징

 

1. R-CNN에서 2000개의 영역에 대한 CNN을 수행하여 시간 소요가 길었지만, ROI pooling을 진행하여 CNN연산을 1번으로 줄었습니다. 

 

즉, CNN * 1 만큼만 시간이 소요되어 수행 시간이 줄었습니다. 

 

2. R-CNN에서 SVM과 regressor가 입력을 공유하지 않기 때문에 "end-to-end" 방식으로 진행하기 어려웠으나, 이를 ROI pooling을 진행함으로써 ROI의 영역을 CNN을 거친 후에 feature map으로 projection 시킬 수 있었습니다. 

 

즉, Bounding Box Regression와, 클래스 분류의 softmax에 CNN을 거친 후의 feature map이 동일한 입력으로 들어가기 때문에 연산을 공유하고, 그렇기 때문에 end-to-end로 학습할 수 있습니다. 

 

3.  Fast R-CNN이 R-CNN에 비해 성능과 시간을 효과적으로 향상했으나, 여전히 Region proposal 단계에서 Selective search 알고리즘을 "CPU"상에서 진행되므로 이 부분이 시간이 소요된다는 점이 단점으로 남아있었습니다. 

 

 

 

<Faster R-CNN>

Faster R-CNN은 Fast R-CNN이 가지는 단점을 극복한 모델하기 위해 RPN(Region Proposal Network)를 1-stage 단계에서 제안한 방법입니다. 

 

즉, Faster R-CNN의 아이디어는

"Fast R-CNN의 1-stage 단계에서 Region Proposal 방법으로 Selective search이 "CPU" 상에서 진행되니깐, "GPU"를 사용할 수 있도록 Region Proposal 자체도 네트워크를 적용해서 진행해보자!"입니다.

 

그렇기 때문에 Faster R-CNN은 한마디로 RPN + Fast R-CNN이라 할 수 있으며, Faster R-CNN은 Fast R-CNN구조에서 conv feature map과 RoI Pooling사이에 RoI를 생성하는 Region Proposal Network가 추가된 구조가 되겠습니다. 

1. 입력 이미지를 받아, "GPU" 상에서 RPN 네트워크를 사용하여 영역을 추출합니다.  

2. RPN 네트워크에서 사물이 있을 법한 영역과 위치를 추출합니다. ("사물이 있다", "사물이 없다" -> 2 softmax)

3. feature map을 각 ROI에 대한 Pooling을 진행하여 feature vector를 추출합니다. 

4. 이 feature vector는 FC layers를 지나서 클래스를 분류하는 "softmax"와 클래스가 있는 bounding box를 찾는 regressor에 각각 입력되고 연산을 거쳐 결과를 도출합니다. 

 

차후에 각 R-CNN에 대해 특히나 Faster R-CNN에 대해 상세하게 다루어 보겠습니다.

 

 

<R-CNN 시리즈 요약>

 

 

 

<참고 자료>

https://medium.com/zylapp/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852

 

Review of Deep Learning Algorithms for Object Detection

Why object detection instead of image classification?

medium.com

https://www.arxiv-vanity.com/papers/1908.03673/

 

Recent Advances in Deep Learning for Object Detection

Object detection is a fundamental visual recognition problem in computer vision and has been widely studied in the past decades. Visual object detection aims to find objects of certain target classes with precise localization in a given image and assign ea

www.arxiv-vanity.com

 

728x90
반응형
2022-01-04 21:31:43
728x90
반응형

<Introduction>

객체 검출 문제 방법에는 1-stage detector과 2-stage detector가 있습니다.

출처: nbsp;Object Detection in 20 Years: A Survey

 

위 그림은 객체 검출 문제를 해결한 모델들을 잘 나타내주고 있습니다. 1-stage 방식에는 대표적으로 YOLO, Retina-Net 등이 있으며, 2-stage 방식에는 RCNN 시리즈와, SPPNet 등이 있고, 이외에도 수많은 모델이 존재합니다. 

 

 

 

<2-stage detector>

객체 검출의 알고리즘 흐름에는 크게 Regional Proposal과 Classification이 있습니다. 

2-stage detector는 Regional Proposal과 Classification 을 순차적으로 진행하여 객체 검출을 하는 방식입니다.

 

출처:https://ganghee-lee.tistory.com/34

 

즉, "물체가 있을거 같다" 라는 영역을 Bounding Box로 대략적으로 찾은 후에, 물체가 있을 것이라 판단되는 영역 내에서 Classification을 진행하는 식으로 결과를 도출하게 됩니다. 

 

"1-stage detector 방식에 비해 시간은 소요되지만, 보다 좋은 성능의 결과를 도출하고 있습니다. "

 

여기서, "물체가 있을거 같다" 라고 하는 영역 추출은 "Sliding window" 방식과 "Selective search" 방식이 있습니다. 

 

"Sliding window" 방식

아래 그림처럼 검출하고자 하는 입력 이미지에 정해진 크기의 "Bounding Box"를 만들어 방향을 이동하면서 물체가 있을 법한 box 나 영역을 추출하는 것입니다. 모든 영역을 탐색해야 하기 때문에 시간이 많이 소요되어 비효율적이라는 특성이 있습니다. 

 

출처:https://www.bojankomazec.com/2020/01/object-detection-with-sliding-window.html

 

Selective search 방식

영역의 질감, 색, 강도 등을 갖는 인접 픽셀를 찾아서 물체가 있을 법한 box나 영역을 찾아냅니다. 

아래 그림의 흐름대로 입력 이미지와 최종 영역 추출 이미지의 차이를 확인 할 수 있습니다. 

출처:https://www.programmersought.com/article/21984124723/

 

 

 

<1-stage detector>

1-stage detector와 반대로 regional proposal와 classification이 동시에 진행하여 결과를 도출합니다. 

 

출처:https://ganghee-lee.tistory.com/34

 

 

영역 추출에 대한 좌표와 이미지 피처를 CNN을 통해 한번에 학습하여 결과를 도출합니다. 

 

"2-stage detector 방식에 비해 시간은 적게 소요되지만, 비교적 2-stage보다 좋지 못한 성능의 결과를 도출하고 있습니다. "

 

 

 

 

728x90
반응형
2021-12-31 08:41:01
728x90
반응형

"Chest X-ray 폐렴 진단 모델"을 kaggle 데이터를 통해 학습 모델을 만드는 과정 중에 만든 모델이 좋은가? 를 평가함에 있어서 서치한 내용을 정리하고자 합니다. 

 

분류 모델의 평가 

간단히 말해서 분류 모델의 평가는 아래의 질문으로 정리해보았습니다.

1. "분류를 잘하는가"

2. "모델이 낸 예측과 정답이 같은가"

3. "얼마나가 같은데?"

 

결국, 내가 만든 모델이 분류를 잘하는지를 알고 싶고, 그렇다면 예측값과 정답이 맞는지 확인해볼 필요가 있으며 최종적으로 얼마나 맞았는지가 이 모델의 성능이나 평가지표가 될 것입니다. 

 

예측값과 정답이 맞는 지를 "Confusion Matrix(혼돈 행렬)"를 통해서 확인할 수 있습니다.

 

 

출처 https://velog.io/@jiselectric/Evaluation-Metrics-in-Machine-Learning-Confusion-Matrix

 

  • TP(True Positive) :  Positive를 Positive라고 예측한 경우들 (정답)
  • FP(False Positive) : Negative를 Positive라고 예측한 경우들 (오답)
  • TN(True Negative) : Negative를 Negative라고 예측한 경우들 (정답)
  • FN(False Negative) : Positive를 Negative라고 예측한 경우들 (오답)

 

분류 문제에서 예측한 라벨과 실제 라벨을 배열로 정리한다면 혼동 행렬을 채울 수 있을 것입니다. 

이를 통해서 한눈에 모델의 예측값과 정답 관계를 파악할 수 있습니다.

이 표를 통해 최종적으로 모델의 성능을 평가하는 평가지표가 도출됩니다. 

 

분류 모델의 평가지표 

그래서, 위에서 정리한 혼돈 행렬을 통해서 주로 우리가 볼 수 있는 지표는 아래와 같습니다. 

Chest X-ray 폐렴 진단 모델"을 kaggle 데이터를 통해 학습 모델을 만드는 것을 예시로 작성하겠습니다. 

Model이 예측하는 라벨은 "폐렴이 아니다", "폐렴이다", 실제 라벨도 이와 동일할 것입니다. 

  • 정확도
  • 정밀도
  • 특이도
  • 재현율(민감도)

 

정확도 (Accuracy)

"전체 개수 중에서 양성과 음성을 맞춘 수"

수식을 보면 혼돈 행렬에 전체 예측한 데이터 중에 정답인 TP, TN의 비율로 구성된 지표입니다. 

 

 

전체 예측한 데이터중에서 "폐렴이 아니다", "폐렴이다"가 예측값과 실제값이 동일한 정답의 비율을 표기한 것입니다.

 가장 직관적이고 보편적인 지표이지만, 데이터의 특성에 따라 지표로 선정에 유의를 기울여야 합니다. 

예컨대, "폐렴이 아니다"의 정답이 "폐렴이다"의 정답에 비해 많은 부분을 차지해서 정확도가 높아지는 거라면, 해당 모델에서는 "폐렴인 환자를 폐렴이 아니다(FN)"라고 예측한 오답이 더 중요하게 고려되어야 할 것입니다. 

 

정밀도 (Precision)

"양성이라고 판정한 것 중에 실제 양성 수"

정밀도는 모델이 Positive라고 예측한 것 중에서 정답의 비율, 즉 실제도 Positive인 비율입니다. 

 

 

True Positive, TP: 모델에 의하여 Positive으로 예측되었고, 실제로도 Positive 인 경우.

False Positive, FP: 모델에 의하여 Positive로 예측되었으나, 실제로는 Negative 인 경우

 

Positive라고 예측한 것에 대한 정답률이니, PPV(Positive Predictive Value)라고도 불린답니다. 

 

"폐렴이다"라고 예측한 것들 중에서 "폐렴일 확률"을 표기한 것이죠. 질병을 진단할 때는 정밀도가 굉장히 중요하다고 생각합니다.

 

참고: 정밀도를 PPV라고 하고 반면에 NPV(Negative Predictive Value) 또는 Fall-out이라는 지표도 있습니다. "음성이라고 판정한 것 중에서 실제 음성 수" 하지만, 주로 고려될 필요가 없죠,,, 모델의 목적이 아닐 가능성이 높으니깐요!

 

 

특이도 (Specificity)

"음성 중 맞춘 음성의 수"

특이도는 Negative인 것 중에서 모델이 Negative라고 예측한 비율을 의미합니다.

 

 

True Negative, TN: 모델에 의하여 Negative로 예측되었고,  실제로도 Negative 인 경우.

False Positive, FP: 모델에 의하여 Positive로 예측되었으나, 실제로는 Negative 인 경우

 

"폐렴이 아니다"라고 예측한 것들 중에서 "폐렴이 아닐 확률"을 표기한 것이죠.

제가 예시로 든 질병 진단, 폐렴 진단 모델의 경우는 정확도보다는 정밀도와 특이도를 파악하는 것이 더 중요한 지표라고 생각합니다.

 

 

재현율 (Recall,  Sensitivitiy)

"양성 중 맞춘 양성의 수"

재현율은 Positive인 것 중에서 모델이 Positive라고 예측한 비율을 의미합니다. 

 

 

 

True Positive, TP: 모델에 의하여 Positive으로 예측되었고, 실제로도 Positive 인 경우.

False Negative, FN: 모델에 의하여 Negative로 예측되었으나, 실제로는 Positive 인 경우

 

 

정밀도, 재현율의 Trade-off 관계

이 관계에 대해 알아보기 전에 비슷한 개념은 "가설 검정"에서 "Type 1 error", "Type 2 error"가 있습니다.  

출처&amp;amp;amp;nbsp;https://sumniya.tistory.com/26

 

가설 검정 표를 혼돈 행렬과 같이 비교해본다면, 다음과 같을 것입니다.

 

H0 True : 모델이 Positive로 예상한 경우 (이 가설은 맞을 거야!)

H0 False : 모델이 Negative로 예상한 경우 (이 가설은 아닐 거야!)

Test result Accept : 실제 값이 Positive인 경우 (실제로 너의 가설이 맞아!)

Test result reject : 실제 값이 Negative인 경우 (실제로 너의 가설은 아니었어!)

 

Type 1 error는 모델이 Positive로 예상했지만 Negative인 경우, 즉 FP

Type 2 error는 모델이 Negative로 예상했지만 positive인 경우, 즉 FN

 

가설 검정 시에 어떤 상황에서 어떤 가설을 받아들일지의 기준이 필요하고, 그 기준이 "Any mean"을 어디로 설정할 지에 따라 "Type 1 error"와 "Type 2 error"는 Trade-off 관계를 가지게 됩니다. 

여기서 "Any mean"이 정해지는 것이 Threshold 선정이라고 불립니다. 

 

출처&amp;amp;amp;nbsp;https://stats.stackexchange.com/questions/211736/type-i-error-and-type-ii-error-trade-off

 

본론으로 돌아와서 정밀도와 재현율 이와 동일합니다. 

 

위의 그래프를 "폐렴 진단 모델"에 대한 혼돈 행렬의 TN, TP, FN, FP로 표현해보면 아래와 같습니다. 

 

이해가 되실까요?? 재현율과 정밀도를 구성하는 수식에서 "FN"과 "FP"로 다르고, 둘 다 분모에 위치하기 때문에

 

해당 모델에서 "Threshold"를 좌우로 이동하면 정함에 따라서 FN과 FP는 Trade-off 관계를 가질 수밖에 없고, 이는 정밀도와 재현율이 Trade off 관계를 이룰 수밖에 없게 됩니다. 

 

이 특성 때문에 재현율과 정밀도는 서로 보완적인 지표로 분류 모델의 성능을 평가하는데 적용되며, 둘 다 높은 수치를 얻는 것이 가장 좋은 성능을 의미한다. 반면 둘 중 어느 한 평가 지표만 매우 높고, 다른 하나는 매우 낮은 결과를 보이는 것은 바람직하지 않다.

 

그래서, Threshold는 어떻게 선정해야 할까요?

정밀도와 재현율이 왜 Trade-off 관계를 가질 수밖에 없는지 알았는데요! 그러면 둘 다 좋을 수 있는 최적의 Threshold를 선정하는 것이 좋을 것이고 이것은 어떻게 해야 할까요?

 

"결론적으로 목적에 따라 다릅니다. "

 

  • 재현율이 상대적으로 더 중요한 지표인 경우는 실제 Positive 양성인 데이터 예측을 Negative 음성으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우
    • 재현율이 중요 지표인 경우는 암 판단 모델이나 금융 사기 적발 모델과 같이 실제 Positive 양성 데이터를 Negative로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우
  • 정밀도가 상대적으로 더 중요한 지표인 경우는 실제 Negative 음성인 데이터 예측을 Positive 양성으로 잘못 판단하게 되면 업무상 큰 영향이 발생하는 경우
    • 스팸메일 여부를 판단하는 모델과 같은 경우는 정밀도가 더 중요한 경우

 

728x90
반응형
2021-07-16 14:30:04
728x90
반응형

00. 서문

오토 인코더에 대해서 공부해야 할 일이 생겨서, 하는 도중 정리하기 위해 포스팅을 하게 되었습니다.

공부하여 작성하는 거라, 부족할 수 있으니 많은 피드백 주시면 감사하겠습니다.

01. 오토 인코더 (autoencoder)

오토 인코더는 비지도 학습 방법의 하나입니다. 그러기 때문에 모델을 학습하기 위한 명확한 라벨(정답)이 제공되지 않습니다. 즉, 오토 인코더를 학습하기 위해서는 입력 데이터를 필요로 합니다.

 

 제가 공부하면서 느낀 것은 오토 인코더의 학습과정은 마치 "압축과 압축해제"와 같다고 느꼈습니다.

이미지를 학습한다고 가정했을 때, 입력 이미지를 받고, 학습 레이어를 거쳐 입력 이미지를 잘 설명할 수 있는 축소된 차원이 데이터("latent space" 또는 "bottle neck"이라고 하는)로 변환되고, 이 데이터를 다시 reconstruct하여 입력이미지를 복원하거나 target 이미지를 구성해내는 과정을 거친다고 이해했습니다.

 

 

 

조금 더 깊게 생각했을 때, 입력층에서 이미지가 들어오고, 각 노드들은 이에 대한 특징(feature)을 Encoder를 통해 차원 축소를 거치고, 입력 및 target 이미지를 잘 설명할 수 있는 데이터로 압축한 후에 이를 Decoder를 통해 복원하여 표현하는 과정이라고 이해했습니다. 

마치 오토 인코더는 PCA와 비슷하다고 생각도 들었습니다. 하지만, PCA는 선형적 차원축소하는 반면 오토인코더는 비선형적 차원축소를 한다고 합니다 (활성함수 이야기 인거 같습니다).

 

02. Encoder와 Decoder

오토인코더 과정은 3단계로 나누어 볼 수 있을 거 같습니다. 

  • 데이터 입력
  • Encoder 
  • Decoder

Encoder: Encoder는 결국 입력 데이터를"입력 데이터의 특징을 잘 설명할 수 있는 데이터로 차원 축소한다" 이 공간을 "latent-space", 또는 "bottle neck"이라고 합니다. 

 

Decoder: Decoder는 입력 및 target 데이터로 복원(복호화)을 합니다. decoder가 encoder로부터 받은 데이터로 정확하게 입력 및 target 데이터로 복원한다면 decoder의 성능이 좋다고 표현합니다.

728x90
반응형
2021-07-06 22:12:01
728x90
반응형

01. Confusion Matrix?

Confusion Matrix라고 해서 굉장히 어렵게 느꼈는데, 생각보다 간단하였습니다.

한국말로 "분류결과표"라고 합니다.

즉, 참값(타겟의 원래 클래스)와 예측값(모형이 예측한 클래스)가 일치하는지를 갯수로 수치화 한 결과 표입니다.

정답 클래스는 행(row)로, 예측 클래스는 열(column)로 표현합니다. 

 

02. 실습을 통해 Confusion Matrix 보기 (코드포함)

이전에, 포스트한 CIFAR-10 학습을 기반으로 해당 모델의 Confusion Matrix를 추출 해보았습니다. 

 

https://panython.tistory.com/12

 

[AI Study] ImageDataGenerator 사용하여 CIFAR-10 분류하기

01. CIFAR-10 이미지 분류해 보기 01. ImageDataGenerator 사용해 보기 keras에서는 이미지데이터 학습을 쉽게하도록 하기위해 다양한 패키지를 제공한다. 그 중 하나가 ImageDataGenerator 클래스이다. ImageData..

panython.tistory.com

 

이전에 학습하였던 모델을 사용하였습니다. 

 

이전 학습 모델을 불러와 테스트 데이터 예측하기

model = load_model('./saved_models/cifar10_cnn_model_epoch40.h5')
images = test_set
label, fns, images2 = load_rand_img(images,32)
predictions = model.predict(images2/255)

예측한 데이터와 정답 텍스트로 확인 하기

#정답보기
for i in range(32):
    pred_label = labels[np.argmax(predictions[i])]
    fn = fns[i]
    la = labels[label[i]]
    print(i, '번째', '파일', fn, '참값', la, '예측값', pred_label)
>>>0 번째 파일 ./CIFAR-10-images-master/test/truck/0959.jpg 참값 truck 예측값 truck
>>>1 번째 파일 ./CIFAR-10-images-master/test/truck/0830.jpg 참값 truck 예측값 truck
>>>2 번째 파일 ./CIFAR-10-images-master/test/bird/0134.jpg 참값 bird 예측값 bird
>>>3 번째 파일 ./CIFAR-10-images-master/test/horse/0935.jpg 참값 horse 예측값 horse
>>>4 번째 파일 ./CIFAR-10-images-master/test/horse/0147.jpg 참값 horse 예측값 horse
>>>5 번째 파일 ./CIFAR-10-images-master/test/dog/0239.jpg 참값 dog 예측값 dog
>>>6 번째 파일 ./CIFAR-10-images-master/test/frog/0285.jpg 참값 frog 예측값 frog
>>>7 번째 파일 ./CIFAR-10-images-master/test/truck/0876.jpg 참값 truck 예측값 truck
>>>8 번째 파일 ./CIFAR-10-images-master/test/deer/0236.jpg 참값 deer 예측값 frog

 

위의 방법이 있다는 수준으로 전달 드린 것입니다. 결국 참값과 예측값을 비교하는 것이죠!! 

 

이번에는 그림으로 시각화 해보시죠!

 

예측한 데이터와 정답 이미지로 확인 하기

#이미지 데이터를 랜덤하게 n개 추출하여 라벨, 파일이름, 이미지 배열 추출 함수 
def load_rand_img(imagesset, randint):
    images = imagesset.filepaths
    labels = imagesset.labels
    rand_imgs = []
    label = []
    for i in range(randint):
        rand_num = random.randrange(0,len(images))
        rand_imgs.append(images[rand_num])
        label.append(labels[rand_num])
    load_imgs = load_img(rand_imgs)
    return label, rand_imgs, load_imgs
    
# 예측 결과를 figure로 확인하는 함수 
def plot_predict(figsize, num, classes, label, images, predictions):
    fig = plt.figure(figsize=(figsize[0], figsize[1]))
    for i in range(num):
        plt.subplot(figsize[0], figsize[1], i + 1)
        plt.grid(False)
        plt.xticks([])
        plt.yticks([])
        fn = plt.imread(images[i])
        plt.imshow(fn)
        la = classes[label[i]]
        pred_label = classes[np.argmax(predictions[i])]
        if pred_label == la:
            color = 'green'
        else:
            color = 'red'
        plt.xlabel("{}({}, i={})".format(pred_label, la, i), color=color)
    plt.show()
    
# 메인 실행 
labels = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
label, fns, images2 = load_rand_img(images, 10000)
predictions = model.predict(images2/255)
plot_predict((4,8),32, labels, label, fns, predictions)

xlabel의 형식은 "예측값(참값)" 으로 설정하였습니다.

이번 시행에서 32개 중에 7개 오답을 보였으니, 약 22%의 오답률, 즉 78% 정답률을 보여주었지만, 해당 코드는 실행할 때마다 다시 랜덤추출하기 때문에 한눈에 모델을 평가하기는 어렵습니다!! 

 

그래서!! 모델의 성능을 한눈에 보기위해 "Confusion Matrix"를 적용해보았습니다!!

 

예측한 데이터와 정답을 "Confusion Matrix"로 확인 하기

Confusion Matrix에 대해 잠깐 본다면 참값(타겟의 원래 클래스)와 예측값(모형이 예측한 클래스)가 일치하는지를 갯수로 수치화 한 결과 표라고 보시면 되겠네요!

정답 클래스는 행(row)로, 예측 클래스는 열(column)로 표현하기때문에, Confusion Matrix는 모델이 잘 작동되는지 확인할 수 있는 좋은 방법입니다. 

예를 들면 아래의 표와 같다. (출처 : datascienceschool.net)

 

# confusion matrix 사용을 위한 라이브러리
from sklearn.metrics import confusion_matrix

# confusion matrix 그리는 함수 
def plot_confusion_matrix(con_mat, labels, title='Confusion Matrix', cmap=plt.cm.get_cmap('Blues'), normalize=False):
    plt.imshow(con_mat, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    marks = np.arange(len(labels))
    nlabels = []
    for k in range(len(con_mat)):
        n = sum(con_mat[k])
        nlabel = '{0}(n={1})'.format(labels[k],n)
        nlabels.append(nlabel)
    plt.xticks(marks, labels)
    plt.yticks(marks, nlabels)

    thresh = con_mat.max() / 2.
    if normalize:
        for i, j in itertools.product(range(con_mat.shape[0]), range(con_mat.shape[1])):
            plt.text(j, i, '{0}%'.format(con_mat[i, j] * 100 / n), horizontalalignment="center", color="white" if con_mat[i, j] > thresh else "black")
    else:
        for i, j in itertools.product(range(con_mat.shape[0]), range(con_mat.shape[1])):
            plt.text(j, i, con_mat[i, j], horizontalalignment="center", color="white" if con_mat[i, j] > thresh else "black")
    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')
    plt.show()

# 예측값과 참값 
pred_labels = np.argmax(predictions, axis=1)
true_labels = test_set.labels

#메인 실행 
confusion_matrix = confusion_matrix(true_labels, pred_labels)
plot_confusion_matrix(confusion_matrix, labels=labels, normalize=True)

 

 

 

짜잔! 이렇게 대각을 보시면 진한 파란색일 수록 많이 맞췄다는 겁니다. 

Xlabel은 예측값, Ylabel은 참값이기 때문에 각 라벨에서 몇개를 예측한지 볼 수 있으며 어떤 라벨은 어떤라벨에서 헷갈릴 수 있는지도 파악이됩니다!!

예를 들면, 예측값 dog이라고 예측을 했지만 사실상 cat이라고 예측한 비율도 꽤 높습니다. 이것을 미루어 볼때, 해당모델은 다른 라벨에 비해 dog과 cat을 분류하는데는 조금 좋지 못한 성능을 보이구나! 와 같이 확인 할 수 있습니다. 

 

728x90
반응형
2021-06-22 16:43:48
728x90
반응형

1. 나이브 베이즈

이번 포스트에서는 "확률 기반 머신러닝 분류 알고리즘의 대표격인 나이브베이즈 분류 알고리즘" 이 무엇인지 어떤 장단점이 있는지 알아보겠습니다. 

 

2. 나이브 베이즈의 이해 

나이브 베이즈 분류 알고리즘은 데이터를 나이브(단순)하게 독립적인 사건으로 가정하고, 이 독립 사건들을 베이즈 이론에 대입시켜 가장 높은 확률의 레이블로 분류를 실행하는 알고리즘입니다. 자세한 내용은 아래 링크 참조!

 

https://j1w2k3.tistory.com/773

 

[확률과 통계 13탄] 독립사건과 종속사건

독립사건과 종속사건은 내용은 어렵지 않은데...의외로 문제로 나오면 당황하게 만드는 경우가 있습니다. 특히 참,거짓과 관련된 문제로 많이 출제가 되는데 이번 시간에는 독립사건과 종속사

j1w2k3.tistory.com

 

❓ 독립적인 사건으로 가정한다??

 

독립 사건이란 두 사건 A, B가 있을 때, 서로에게 영향을 주지 않을 경우 사건 A, B는 독립사건이라고 합니다.

확률이론에서 독립적인 사건이란 굉장히 중요합니다.

왜냐하면 "두 사건이 독립 사건이다" → 두 사건의 확률은 "확률의 곱"으로 표현할 수 있습니다.

이로 인해 간단해지는 수식이 굉장히 많습니다.

 

다시 본론으로 돌아가서, 베이즈 이론이란 무엇 일까요?

 

베이즈 이론은 간단히 말해서 조건부확률을 말하는데요, 어떤 사건이 발생했을 때 다른 사건이 발생할 확률을 의미합니다.

 

독립사건 : 출처: 위키백과

이 내용이 이해가 안되시면, "주사위의 확률"을 생각해보세요!! 각 시행이 독립이기에 단순한 곱으로 확률을 표현하니깐요!

 

 

3. 나이브 베이즈 알고리즘의 학습 적용

나이브 베이즈 이론에 대해 알아보았고, 나이브 베이즈 이론이 어떻게 학습에 사용되는지 간단히 보도록 하겠습니다.

 

💡 자세한 내용은 아래 링크를 정독하셔도 좋구요! 이 블로그를 보고 제가 이해한걸 간략히 정리했습니다. 

 

https://gomguard.tistory.com/69

 

[머신러닝] 나이브 베이즈 (Naive Bayes)

지도학습 알고리즘 지도학습 관련 알고리즘들로는 최근접 이웃 (Nearest Neighbor) 나이브 베이즈 (Naive Bayes) 의사결정 트리 (Decision Trees) 분류 규칙 학습자 (Classification Rule Learners) 선형 회귀 (..

gomguard.tistory.com

나이브 베이즈 분류는 독립 사건을 가정한 베이즈 이론을 통해 , 즉 확률을 구해가면서 가장 높은 확률을 찾는 알고리즘입니다.

 

가령 아래와 같은 데이터들의 관계 표가 있을 때,

 

"오늘 날씨가 좋고 바람이 많이 불지않고 기압은 높은데 온도가 낮다면 오늘은 비가 올 것인가 안 올 것인가"

 

이 명제에 대한 결과를 도출하는 모델을 만든다고 가정해봅시다.

 

주어진 학습 데이터라고 보면되죠, 출처: https://gomguard.tistory.com/69

 

베이즈이론의 공식에 맞추어 "조건부 확률" 을 계산해 내야합니다. (중략)

 

주어진 데이터를 나이브베이즈 공식에 대입하여 확률 계산 과정

 

위와 같이 확률적으로 찾아가는 모델을 만드는 것이 머신러닝에서의 나이브 베이즈 알고리즘으로 이해 할 수 있습니다. (예시는 연속적인 데이터네요!)

 

4. 나이브 베이즈 알고리즘의 장단점 

장점

  1. 모든 데이터의 특징이 독립적인 사건이라는 나이브 가정에도 불구하고 실전에서 높은 정확도를 보이며, 문서 분류 및 스팸 메일 분류에 유리
  2. 나이브 가정에 의해 계산 속도가 상대적으로 빠
    1. 모든 데이터의 특징을 독립적인 사건이라고 분류하기 때문에 다른 분류 모델에 따라 제약이 크다.
728x90
반응형