#!/usr/bin/env python # coding: utf-8 # # Chapter 1. 한눈에 보는 머신러닝 # --- # --- # ## 1.4 머신러닝의 주요 도전 과제 # ### 1.4.1 충분하지 않은 양의 훈련 데이터 # # - 대부분의 머신러닝 알고리즘이 잘 작동하려면 데이터가 많아야 한다. # - 간단한 모델을 포함하여 여러 다른 머신러닝 알고리즘에 충분한 데이터가 주어지면 복잡한 자연어 중의성 해소문제를 거의 비슷하게 잘 처리한다는 것을 아래 그림에서 확인 할 수 있다. # - 복잡한 문제에서 알고리즘보다 데이터가 더 중요하다. 하지만 훈련 데이터를 모으는 것이 항상 쉽거나 저렴한 일은 아니므로, 아직은 알고리즘을 무시하지 말아야 한다. # ![Figure1-20](./images/Figure1-20.png) # ### 1.4.2 대표성 없는 훈련 데이터 # # - 일반화가 잘되려면 새로운 사례를 훈련 데이터가 잘 대표하는 것이 중요하다. # - 아래 그림에서 점선으로 된 모델은 일부 나라가 빠져 있어 대표성이 완벽하지 못하다. 누락된 나라를 추가하여 훈련시키면 실선으로 된 모델을 얻는다. # # ![Figure1-21](./images/Figure1-21.png) # - 일반화하려는 사례들을 대표하는 훈련 세트를 사용하는 것이 매우 중요하지만, 어려울 때가 많다. 샘플이 작으면 **샘플링 잡음**sampling noise(즉, 우연에 의한 대표성 없는 데이터)이 생기고, 매우 큰 샘플도 표본 추출 방법이 잘못되면 대표성을 띠지 못할 수 있다. 이를 **샘플링 편향**sampling bias이라고 한다. # ### 1.4.3 낮은 품질의 데이터 # # - 훈련 데이터가 에러, 이상치outlier, 잡음이 많다면 머신러닝 시스템이 내재된 패턴을 찾기 어려워 잘 작동하지 않을 것이다. 그렇기 때문에 훈련 데이터 정제에 시간을 투자해야 한다. # - 일부 샘플에 특성 몇 개가 빠져있다면, 이 특성을 모두 무시할지, 이 샘플을 무시할지, 빠진 값을 채울지, 또는 이 특성을 넣은 모델과 제외한 모델을 따로 훈련시킬 것이지 등을 정해야 한다. # ### 1.4.4 관련 없는 특성 # # - 성공적인 머신러닝 프로젝트의 핵심 요소는 훈련에 사용할 좋은 특성들을 찾는 것이다. 이 과정을 **특성공학**feature engineering이라 하며 다음 작업을 포함한다. # - **특성 선택**feature selection: 가지고 있는 특성 중에서 훈련에 가장 유용한 특성을 선택한다. # - **특성 추출**feature extraction: 특성을 결합하여 더 유용한 특성을 만든다.(차원 축소) # ### 1.4.5 훈련 데이터 과대적합 # # - **과대적합**overfitting이란 모델이 훈련 데이터에 너무 잘 맞지만 일반성이 떨어진다는 뜻이다. # - 아래 그림은 훈련 데이터에 크게 과대적합된 사례를 보여준다. 이 모델이 훈련 데이터에 잘 맞는다 하더라도 실제로 이 예측을 믿기는 힘들다. # ![Figure1-22](./images/Figure1-22.png) # - 과대적합은 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 일어난다. 해결 방법은 다음과 같다. # - 파라미터 수가 적은 모델을 선택하거나, 훈련 데이터에 있는 특성 수를 줄이거나, 모델에 제약을 가하여 단순화시킨다. # - 훈련 데이터를 더 많이 모은다. # - 훈련 데이터의 잡음을 줄인다.(e.g., 오류 데이터 수정과 이상치 제거) # ### 1.4.6 훈련 데이터 과소적합 # # - **과소적합**underfitting은 과대적합의 반대이다. 이는 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못할 때 일어난다. 이 문제를 해결하는 주요 기법은 다음과 같다. # - 모델 파라미터가 더 많은 강력한 모델을 선택한다. # - 학습 알고리즘에 더 좋은 특성을 제공한다.(특성공학) # - 모델의 제약을 줄인다.(e.g., 규제 하이퍼파라미터를 감소) # # - 데이터에 완벽히 맞추면 과대적합이 일어나고, 일반화를 위해 모델을 너무 단순하게 만들면 과소적합이 발생하므로 둘 사이의 올바른 균형을 찾는 것이 중요하다. # --- # ## 1.5 테스트와 검증 # # - 모델이 새로운 샘플에 얼마나 잘 일반화될지 알기위해 훈련 데이터를 **훈련 세트**와 **테스트 세트** 두 개로 나눈다. 훈련 세트를 사용해 모델을 훈련시키고 테스트 세트를 사용해 모델을 테스트한다. 새로운 샘플에 대한 오류 비율을 **일반화 오차**generalization error(또는 **외부 샘플 오차**out-of-sample error)라고 하며, 테스트 세트에서 모델을 평가함으로써 이 오차에 대한 추정값estimation을 얻는다. # - 일반화 오차가 가장 낮은 모델을 만드는 최적의 하이퍼파라미터를 찾기 위해 테스트 세트에서 여러 번 측정하다보면 모델과 하이퍼파라미터가 테스트 세트에 최적화된 모델을 만든다. 이는 모델이 새로운 데이터에 잘 작동하지 않을 수 있다. # - 이 문제의 해결 방법은 **검증 세트**validation set라 부르는 두 번째 홀드아웃holdout세트를 만드는 것이다. 훈련 세트를 사용해 다양한 하이퍼파라미터로 여러 모델을 훈련시키고 검증 세트에서 최상의 성능을 내는 모델과 하이퍼파라미터를 선택한다. # - 훈련 데이터에서 검증 세트로 너무 ㅁ낳은 양의 데이터를 뺏기지 않기 위해 일반적으로 **교차 검증**cross-validation기법을 사용한다. 훈련 세트를 여러 서브셋subset으로 나누고 각 모델을 이 서브셋의 조합으로 훈련시키고 나머지 부분으로 검증한다. # --- # ## 1.6 연습문제 # # 1. 머신러닝을 어떻게 정의할 수 있나요? # >머신러닝은 데이터로부터 학습할 수 있는 시스템을 만드는 것입니다. 학습이란 어떤 작업에서 주어진 성능 지표가 더 나아지는 것을 의미합니다. # # 2. 머신러닝이 도움을 줄 수 있는 문제 유형 네 가지를 말해보세요. # >명확한 해결책이 없는 복잡한 문제, 수작업으로 만든 긴 규칙 리스트를 대체하는 경우, 변화하는 환경에 적응하는 시스템을 만드는 경우,사람에게 통찰을 제공해야 하는 경우(예를 들면 데이터 마이닝)에 머신러닝이 도움을 줄 수 있습니다. # # 3. 레이블된 훈련 세트란 무엇인가요? # >각 샘플에 대해 원하는 정답(레이블)을 담고 있는 훈련 세트 # # 4. 가장 널리 사용되는 지도 학습 작업 두 가지는 무엇인가요? # >회귀, 분류 # # 5. 보편적인 비지도 학습 작업 네가지는 무엇인가요? # >군집, 시각화, 차원 축소, 연관 규칙 학습 # # 6. 사전 정보가 없는 여러 지형에서 로봇을 걸어가게 하려면 어떤 종류의 머신러닝 알고리즘을 사용할 수 있나요? # >최상의 전략을 스스로 학습하는 강화 학습 알고리즘을 사용한다. # # 7. 고객을 여러 그룹으로 분할하려면 어떤 알고리즘을 사용해야 하나요? # >만약 그룹을 어떻게 정의할지 모른다면 비슷한 고객끼리 군비으로 나누기 위해 군집 알고리즘(비지도 학습)을 사용할 수 있습니다. 그러나 어떤 그룹이 있어야 할지 안다면 분류 알고리즘(지도 학습)에 각 그룹에 대한 샘플을 주입합니다. 그러면 알고리즘이 전체 고객을 이런 그룹으로 분류하게 될 것입니다. # # 8. 스팸 감지의 문제는 지도 학습과 비지도 학습 중 어떤 문제로 볼 수 있나요? # >스팸 감지는 전형적인 지도 학습 문제입니다. 알고리즘에 많은 이메일과 이에 상응하는 레이블(스팸 혹은 스팸 아님)이 제공됩니다. # # 9. 온라인 학습 시스템이 무엇인가요? # >올라인 학습 시스템은 배치 학습 시스템과 달리 점진적으로 학습할 수 있습니다. 이 방식은 변화하는 데이터와 자율 시스템에 빠르게 적응하고 매우 많은 양의 데이터를 훈련시킬 수 있습니다. # # 10. 외부 메모리 학습이 무엇인가요? # >외부 메모리 알고리즘은 컴퓨터의 주메모리에 들어갈 수 없는 대용량의 데이터를 다룰 수 있습니다. 외부 메모리 학습 알고리즘은 데이터를 미니배치로 나누고 온라인 학습 기법을 사용해 학습합니다. # # 11. 예측을 하기 위해 유사도 측정에 의존하는 학습 알고리즘은 무엇인가요? # >인스턴스 기반 학습 시스템은 훈련 데이터를 기억하는 학습입니다. 새로운 샘플이 주어지면 유사도 측정을 사용해 학습된 샘플 중에서 가장 비슷한 것을 찾아 예측으로 사용합니다. # # 12. 모델 파라미터와 학습 알고리즘의 하이퍼파라미터 사이에는 어떤 차이가 있나요? # >모델은 하나 이상의 파라미터(예를 들면 선형 모델의 기울기)를 사용해 새로운 샘플이 주어지면 무엇을 예측할지 결정합니다. 학습 알고리즘은 모델이 새로운 샘플에 잘 일반화되도록 이런 파라미터들의 최적 값을 찾습니다. 하이퍼파라미터는 모델이 아니라 이런 학습 알고리즘 자체의 파라미터입니다.(예를 들면 적용할 규제의 정도). # # 13. 모델 기반 알고리즘이 찾는 것은 무엇인가요? 성공을 위해 이 알고리즘이 사용하는 가장 일반적인 전략은 무엇인가요? 예측은 어떻게 만드나요? # >모델 기반 학습 알고리즘은 새로운 샘플에 잘 일반화되기 위한 모델 파라미터의 최적 값을 찾습니다. 일반적으로 훈련 데이터에서 시스템의 예측이 얼마나 나쁜지 측정하고 모델에 규제가 있다면 모델 복잡도에 대한 패널티를 더한 비용 함수를 최소화함으로써 시스템을 훈련시킵니다. 예측을 만들려면 학습 알고리즘이 찾은 파라미터를 사용하는 모델의 예측 함수에 새로운 샘플의 특성을 주입합니다. # # 14. 머신러닝의 주요 도전 과제는 무엇인가요? # >부족한 데이터, 낮은 데이터 품질, 대표성 없는 데이터, 무의미한 특성, 훈련 데이터에 과소적합된 과도하게 간단한 모델, 훈련 데이터에 과대적합된 과도하게 복잡한 모델 등 # # 15. 모델이 훈련 데이터에서의 성능은 좋지만 새로운 샘플에서의 일반화 성능이 나쁘다면 어떤 문제가 있는 건가요? 가능한 해결책 세 가지는 무엇인가요? # >모델이 훈련 데이터에서는 잘 작동하지만 새로운 샘플에서는 형편없다면 이 모델은 훈련 데이터에 과대적합되었을 가능성이 높습니다. 과대적합에 대한 해결책은 더 ㅁ낳은 데이터를 모으거나, 모델을 단순화하거나(간단한 알고리즘을 선택하거나, 특성이나 파라미터의 수를 줄이거나, 모델에 규제를 추가), 훈련 데이터에 잇는 잡음을 감소시키는 것입니다. # # 16. 테스트 세트가 무엇이고 왜 사용해야 하나요? # >테스트 세트는 실전에 배치되기 전에 모델이 새로운 샘플에 대해 만들 일반화 오차를 추정하기 위해 사용합니다. # # 17. 검증 세트의 목적은 무엇인가요? # >검증 세트는 모델을 비교하는 데 사용됩니다. 이를 사용해 가장 좋은 모델을 고르고 하이퍼파라미터를 튜닝합니다. # # 18. 테스트 세트를 사용해 하이퍼파라미터를 튜닝하면 어떤 문제가 생기나요? # >테스트 세트를 사용해 하이퍼파라미터를 튜닝하면 테스트 세트에 과대적합될 위험이 있고 알반화 오차는 매우 낙관적으로 측정될 것입니다. # # 19. 교차 검증이 무엇이고, 왜 하나의 검증 세트보다 선호하나요? # >교차 검증은 검증 세트를 별도로 분리하지 않고 (모델 선택과 하이퍼파라미터 튜닝을 위해) 모델을 비교할 수 있는 기술입니다. 이는 훈련 데이터를 최대한 활용하도록 도와줍니다.