전체 글 (71) 썸네일형 리스트형 [핸즈온 머신러닝 2/E] 8장. 차원 축소 우리가 마주하는 머신러닝 문제에서 훈련 샘플이 무수히 많은 특성(feature)을 갖고 있는 경우가 존재한다. 이렇게 많은 특성들이 존재하게 되면, 훈련 속도가 느려질 뿐만 아니라 좋은 솔루션을 찾기가 힘들다. 이번 챕터에서는 이러한 문제를 해결할 수 있는 방법인 "차원 축소"에 대해서 정리해보도록 하겠다. 자, 그럼 시작해볼까? 차원을 축소시키면 일부 정보가 유실된다. 따라서 훈련 속도가 빨라질 수는 있지만, 정보 손실의 문제가 발생할 수도 있다. 또한 작업 파이프라인이 더 복잡해지고 유지 관리가 어려워진다. 차원 수를 둘 또는 셋으로 줄이면 고차원 훈련 세트를 하나의 압축된 그래프로 표현할 수 있고, 군집과 같은 시각적인 패턴 또한 감지하기 쉬워서 중요한 insight를 도출해내는 경우가 많다. ▶ .. [핸즈온 머신러닝 2/E] 7장. 앙상블 학습과 랜덤 포레스트 이번 장에서는 앙상블 학습에 대해서 정리해보도록 하겠다. 그 중에서도 특히 많이 사용되는 랜덤 포레스트에 대해서도 다뤄보겠다. ▶ 앙상블 학습이란? 여러 개의 분류기를 생성하고, 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법이다. 각 분류기가 weak learner(약한 학습기)일지라도, 충분하게 많고 다양하다면 앙상블은 strong learner(강한 학습기)가 될 수 있다. 위처럼 말할 수 있는 근거가 바로 그 유명한 "대수의 법칙"이다. 앙상블 방법은 모든 분류기가 완벽하게 독립적이고, 오차에 상관관계가 없어야 최고의 성능을 발휘한다. 따라서 다양한 분류기를 얻는 한 가지 방법은 각기 다른 알고리즘으로 학습시키는 것이다. 대표적인 앙상블 모델로는 랜덤 포레스트(결정 트리의 앙상블)가.. [핸즈온 머신러닝 2/E] 6장. 결정 트리 이번 포스팅은 Decision Tree에 대해서 진행하도록 하겠다. 자, 그럼 오늘도 시작해보겠다!! ▶ 결정 트리 학습과 시각화 사이킷런의 DecisionTreeClassifier(분류)와 DecisionTreeRegressor(회귀)를 사용한다. export_graphviz( ) 함수를 사용해서 결정 트리를 시각화할 수 있다. ▶ 결정 트리 해석 위와 같은 결정 트리 모델 결과가 있다고 가정하고 설명을 해보도록 하겠다. 루트 노드(Root Node): 깊이가 0인 맨 꼭대기의 노드 리프 노드(Leaf Node): 자식 노드를 가지지 않는 노드 samples 속성: 얼마나 많은 훈련 샘풀이 적용되었는지 value 속성: 노드에서 각 클래스에 얼마나 많은 훈련 샘플이 있는지 Gini 속성: 불순도를 측정.. [핸즈온 머신러닝 2/E] 5장. 서포트 벡터 머신 이번 포스팅에서는 서포트 벡터 머신(SVM)을 다뤄보겠다. 머신러닝 모델들 중, 가장 많이 사용하고 성능이 뛰어난 모델이므로 개념을 정확하게 이해해야 할 것 같다. ▶ 선형 SVM 분류 SVM 분류기(또는 Large Margin Classification)는 클래스 사이에 폭이 가장 넓은 도로를 찾는 것이라고 생각하면 이해하기 쉽다. 마진(Margin)이란? 두 데이터 군과 결정 경계와 떨어져 있는 정도 우리의 목표는 이 margin을 최대화하는 결정 경계(선 또는 면)를 찾아내는 것!! 위 그림을 보면 알 수 있듯이, 도로 바깥쪽에 훈련 샘플을 추가해도 결정 경계에는 영향을 미치지 않는다. 또한 결정 경계는 도로 경계에 위치한 샘플. 즉, 서포트 벡터에 의해 결정된다. 서포트 벡터란? 두 클래스 사이의.. [핸즈온 머신러닝 2/E] 4장. 모델 훈련 이번 포스팅에서는 다양한 회귀 모델들에 대해 설명하고자 한다. 자, 그럼 시작해보겠다. ▶ 선형 회귀 ◆ 선형 회귀 모델의 예측 선형 회귀 모델의 예측값 y_hat은 다음과 같이 나타낼 수 있다. 통계학에서는 단순 선형 회귀와 다중 선형 회귀를 구분해서 배웠는데, 머신러닝에서는 어차피 단순 선형 회귀를 쓸 일은 거의 없으니 다중 선형 회귀로 통합시켜서 설명을 해놓은 듯 싶다. 위 식을 아래와 같이 벡터 형태로 쓸 수도 있다. ※ 위의 벡터 형태의 식이 어떻게 나왔는지에 대한 설명을 위해, 아래 이미지 2개를 첨부하였다. (첨부된 이미지를 보면, 해당 식이 어떻게 나왔는지 이해할 수 있을 것이다) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 우리의 목표는 회귀 모델의 성능 측정 지표로 많이 사용되는 .. [핸즈온 머신러닝 2/E] 3장. 분류 이번에 포스팅할 3장에서는 "분류(Classification)"에 대해서 설명해보려 한다. 우선 설명을 위해 예시로 사용할 데이터는 MNIST 데이터 셋으로, 아래와 같은 숫자 이미지 데이터이다. 본격적으로 시작하기에 앞서, MNIST 데이터 셋을 "특성들로만 이루어진 데이터 셋"과 "target 값들로만 이루어진 데이터 셋"으로 분리해주겠다. ▶ 이진 분류기 훈련 교재에서는 확률적 경사 하강법(SGD; Stochastic Gradient Descent) 분류기로 숫자 5를 식별하는 것을 예시로 보여주고 있다. ◆ 확률적 경사 하강법 분류기(SGDClassifier) 매우 큰 데이터 셋을 효율적으로 처리하는 장점이 있다. 한 번에 하나씩 훈련 샘플을 독립적으로 처리하기 때문! 사이킷런의 SGDClassi.. [알고리즘_Programmers] 9주차 2번 문제 및 풀이 이번 포스팅에서는 "탑"이라는 문제에 대한 풀이를 진행하도록 하겠다. 우선 문제는 다음과 같다. 우선 문제 자체가 굉장히 길다. (딱봐도 읽기 싫게 생겼네...) 그래도 문제를 안 읽으면 풀 수가 없으니, 천천히 읽어보고 문제를 풀어보았다! ^^ (지난 번처럼 삽질을 안하도록 문제를 꼼꼼하게 읽었다) 문제 접근법을 생각해내는 것은 크게 어렵지 않았으므로, 머리 속으로 생각한 내용들을 천천히 코드로 구현해보았다. 먼저 신호가 오른쪽에서 왼쪽 방향으로 전해지므로 reversed()를 사용해서 주어진 heights 리스트를 역순으로 바꿔주었다. 그 다음, [(idx1, heights1), (idx2, heights2), ...]의 형태로 리스트를 만들어주기 위해 list comprehension을 사용하였다... [알고리즘_Programmers] 9주차 1번 문제 및 풀이 이번 포스팅에서는 "멀리 뛰기"라는 문제에 대한 풀이를 진행해보도록 하겠다. 우선 문제는 다음과 같다. 이 문제는 n이 1 ~ 6인 경우의 결과 값들을 확인해보면, 쉽게 규칙을 발견할 수 있는 문제이다. n result 1 1 2 2 3 3 4 5 5 8 6 13 위 표의 결과 값들을 살펴보면, result 값들이 피보나치 수열의 형태를 띄고 있는 것을 알 수 있다. 따라서 피보나치 수를 구하는 코드를 구현해주면 문제는 쉽게 풀린다!! 처음에 피보나치 수를 구해주면 되는 쉬운 문제구나 하고, 코드를 입력해서 제출했는데 결과 값이 틀렸다고 나왔다. 너무 당황스러워서 "피보나치 수열을 사용해서 푸는 문제가 아닌가..?" 하는 생각이 들었고, 결국 순열과 조합을 사용한 방법으로 접근해보기까지 했다....(말 .. 이전 1 2 3 4 5 6 7 8 9 다음