일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 퍼셉트론
- 인공지능
- 확률
- 통계
- Neural Network
- 30 Day Challenge
- LeetCode
- 심층학습
- Bayes Rule
- p-value
- Bayes Theorem
- 인공신경망
- 딥러닝
- 분산분석
- AI Winter
- AI
- ANOVA
- 컴퓨터 조립
- 컴퓨터
- 조건부 확률
- 편향
- 베이즈 정리
- 인공지능 겨울
- knn
- p 값
- Stack
- Today
- Total
목록Machine Learning (17)
군더더기 없는 기계학습 백과사전

XGBoost는 초보자들도 대략 100,000개 이하의 관측 개체들만 주어진 상황에서 쓸 수 있는 강력하고 연산과정이 최적화된 경사 부스팅 트리에 해당되는 기계학습 알고리즘 중 하나다. 해당 글은 Telco Churn (고객 이탈) 데이터를 이용한 간단한 XGBoost를 사용한 이탈 고객 예측 튜토리얼이다. 데이터셋 자체는 바로 IBM 사이트 자체에서 구하기는 힘드므로 구할 수 있는 Github 주소를 올리도록 하겠다. 물론 그저 해당 글을 본인의 데이터를 위한 참고용으로만 봐도 된다. 목차(Ctrl + F로 임시 이동) 필요 모듈 데이터 가져오기 및 간단한 데이터 가공 누락값 (missing data) 찾기 및 교체 혹은 제거 독립 변수와 의존 변수로 나누기 원핫 인코딩 XGBoost 모델 기본 틀 만..

※해당 설명에서 사용되는 로지스틱 회귀 분석은 이해를 돕기 위한 단순 예시이다. 해당 개념은 다른 기계학습 분류 알고리즘에도 적용할 수 있다. ROC(Receiver Operating Characteristics) 곡선 여러분에게 다음과 같은 쥐의 몸무게 데이터가 주어졌다고 하자. 푸른색 점들은 비만인 쥐들이고 붉은색 점들은 정상 몸무게 쥐들이다. 그럼 이 관측들을 이용해 로지스틱 회귀 곡선을 그리자. 그럼 y 축은 이제 0과 1 사이의 값으로 표현되는 관측 개체가 비만일 확률이다. 여기서 한 가지 문제가 생길 것이다. 비만일 확률은 아는데 쥐들을 비만으로 분류는 어떻게 할까? 한 가지 방법은 0.5이라는 임계값을 설정해 그 이상인 관측 개체들을 비만으로 분류하고 그 이하는 정상 몸무게로 분류하는 것이다..

혼동 행렬을 완성하면 두 가지 지표를 계산할 수 있다. 민감도(Sensitivity) 우리의 예에서 민감도는 실제로 심장 질환이 있는 사람 중에 올바르게 분류된 사람들의 비율이다. 이는 곧 참 양성과 거짓 음성으로 분류된 개체 중 참 양성의 비율을 뜻한다. 특이도(Specificity) 우리의 예에서 특이도는 실제로 심장 질환이 없는 사람 중에 올바르게 분류된 사람들의 비율이다. 이는 곧 거짓 양성과 참 음성으로 분류된 개체 중 참 음성의 비율을 뜻한다. 예시 앞의 글에서 만들었던 혼동 행렬을 가져와보자. 해당 혼동 행렬은 랜덤 포레스트를 환자 데이터에 적용해 얻은 혼동 행렬이다. 앞서 정의한대로 민감도와 특이도를 구하면 각각 142/(142+29) = 0.83와 110/(22+110) ≒ 0.83.이다..

해당 글은 기계학습 알고리즘 중 제일 성숙한 분야이며 널리 쓰이는 분류기에 초점을 맞춰 써진 글입니다. 이 글에서 분류기(Classifier)는 불연속 혹은 연속적인 피쳐 값들로 이루어진 벡터를 입력값으로 받아들이고 한 개의 클래스(class)라는 불연속 출력 값을 내놓는 시스템으로 정의됩니다. 예를 들어 이메일을 '스팸' 혹은 '스팸 아님'으로 분류하는 스팸 필터기가 있다고 할 때 입력값은 다음과 같을 것입니다: $$\mathbb{x} = (x_1,..., x_j,..., x_d).$$ 여기서 $x_j =1$이란 사전에 있는 $j$번째 단어가 이메일 글에 등장한다는 뜻이며 그렇지 않다면 $x_j =0$입니다. 학습자(learner)는 $(\mathbb{x}_i, y_i)$라는 예시들로 이루어진 훈련 집..

우리에게 다음과 같은 정보 집합(dataset)이 주어졌다고 해보자. 우리는 혈압, 혈중 콜레스테롤 수치, 혈당 같은 변수들과 기계학습 알고리즘을 이용해 환자가 심장질환이 있을 확률을 예측하고자 한다. 이를 위한 기계학습 알고리즘으로는 로지스틱 회귀분석, K 최근접 이웃, 랜덤 포레스트 같은 다양한 알고리즘을 선택할 수 있는 선택지가 있다. 그러나 이 중 제일 적절한 알고리즘을 어떻게 고를 수 있을까? 우리는 일단 데이터를 훈련 데이터와 시험 데이터로 나누어 훈련 데이터로 기계학습 모델을 훈련시킨 뒤 시험 데이터로 그 성능을 평가할 것이다. 평가를 위해 동원되는 방법 중 하나는 혼동행렬을 만들어보는 것이다. 일단 여기서 행은 알고리즘이 예측하는 클래스(class), 열은 관측의 실제 클래스라고 하자. 이..

만약 우리에게 다음과 같은 정보 집합(dataset)이 주어졌다고 해보자. 우리는 주어진 데이터를 이용해 혈압, 혈중 콜레스테롤 수치, 혈당 같은 변수를 이용해 환자 중 누군가가 심장질환을 가지고 있는지 예상하고자 할 것이며 이를 위해서 모델을 만들 것이다. 그 뒤 데이터에 없었던 새로운 환자가 나타나면 같은 변수들의 수치를 모델에 넣어 그 환자가 심장질환을 가지고 있는지 예상하고자 할 것이다. 그렇다면 이때 어떤 기계학습 알고리즘을 이용해야하는지 결정을 내릴 수 있는 방법은 무엇일까? 우리에게 주어진 선택지는 다양하다. 로지스틱 회귀분석 일수도 있고, K 최근접 이웃일수도 있고, SVM 아니면 그 외 다양한 기계학습 알고리즘이 존재한다. 교차검증은 이 다양한 알고리즘들의 성능을 비교하고 실전에서 실제 ..

꼭 그렇지만은 않다. 대표적으로 리터러리 다이제스트(The Literary Digest)지에서 실시한 대선 여론 조사의 사례가 있다. 1936년에 진행된 해당 여론 조사는 프랭클린 델라노어 루즈벨트와 알프레드 모스만 랜던 중 누가 대선에서 승리할까 묻는 설문 조사였는데 당시 1000만 명에게 보내진 설문 조사에서 236만 명이나 되는 응답이 왔고 랜던의 앞도적인 승리가 예상되었다. 그러나 현실에서는 전체 득표율에서 루즈벨트가 62%나 가져가 버렸고, 48개 주 중에서 46개를 가져가는 대승리를 거두는 반대 상황이 연출되었다. 리터러리 다이제스트지가 이처럼 커다란 실수를 저지른 이유는 표본의 크기를 너무 신뢰하고 표본의 타당성을 간과했기 때문인데, 이는 표본이 수집된 곳이 설문 조사 응답을 얻기 쉬운 3가..

이번 편에서는 진짜 데이터를 상대로 Scikit-learn 패키지에 내장된 K 근접 이웃 알고리즘과 2편에서 우리가 직접 파이썬에서 써본 알고리즘을 사용해보고 비교해 보도록 하겠다. 일단 데이터부터 구해보자. 데이터는 UCI 기계학습 데이터 저장소에서 구할 수 있는 위스콘신 대학에서 진행한 연구에서 집계한 유방암 진단 데이터를 가져오도록 하겠다. 데이터 폴더(Data Folder) 링크에 들어가서 breast-cancer-wisconsin.data 파일을 다운로드하면 된다. 해당 파일을 열어보면 다음과 같이 CSV 형식의 데이터가 등장할 것이다. breast-cancer-wisconsin.names 파일에서 속성(attribute)에 관한 정보를 찾아보면 다음 리스트를 볼 수 있을 것이다. 여기서 1열(..