파이썬 라이브러리를 활용한 머신러닝

b6119391002_l

‘파이썬 라이브러리를 활용한 머신러닝’은 scikit-learn의 코어 개발자이자 배포 관리자인 안드레아스 뮐러Andreas Mueller와 매쉬어블의 데이터 과학자인 세라 가이도Sarah Guido가 쓴 ‘Introduction to Machine Learning with Python‘의 번역서입니다.

  • 온라인/오프라인 서점에서 판매중입니다. [YES24], [교보문고], [알라딘], [한빛미디어]
  • 456 페이지, 종이책: 30,000원—>27,000원, 전자책: 21,000원—>18,900원
  • 이 책에 실린 코드는 깃허브에서 주피터 노트북으로 볼 수 있습니다. [github], [nbviewer]
  • 이 책의 코드는 scikit-learn 0.18.1, 0.19, 0.19.1 버전에서 테스트 되었습니다.
  • 저자 안드레아스 뮐러와의 인터뷰는 한빛미디어 홈페이지에서 볼 수 있습니다.
  • 이 책의 1장과 2장을 ‘파이썬 머신러닝‘ 페이지에서 읽을 수 있습니다.

이 페이지에서 책의 에러타와 scikit-learn 버전 변경에 따른 바뀐 점들을 계속 업데이트 하겠습니다. 구글 그룹스 파이썬 머신러닝 메일링 리스트에 가입하시면 책의 에러타나 수정사항을 자동으로 수신할 수 있습니다.

이 책에 대해 궁금한 점이나 오류가 있으면 이 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 파이썬 머신러닝 Q&A에 글을 올려 주셔도 좋습니다.

적바림(미처 책에 넣지 못한 내용을 추가하고 있습니다)

감사합니다! 🙂


Outputs (aka. errata)

  • 3쇄 반영 : 1~5까지
  • 4쇄 반영 : 6~33까지
    1. scikit-learn 0.19 버전으로 인해 변경된 사항
      • p209: TSNE 버그 수정으로 그림 3-22가 변경되었습니다(좌: 변경전, 우: 변경후). 클래스 구분히 훨씬 잘 되는 것을 확인할 수 있습니다.
      • p213: KMeans의 클러스터 레이블 할당이 무작위이기 때문에 Out[52], Out[53]과 그 이후 이미지의 클러스터 레이블이 바뀔 수 있습니다.
      • p220, p221: KMeans 버그 수정으로 인해 그림 3-30의 클러스터 중심과 그림 3-31의 재구성 이미지가 달라졌습니다(좌: 변경전, 우: 변경후).
      • p242: DBSCAN 버그 수정으로 인해 In[79]의 클러스터 크기가 조금 달라졌습니다.
        eps=9일 때 [1308 749 3 3] 에서 [1307 750 3 3] 로,
        eps=11일 때 [ 415 1648] 에서 [ 413 1650] 로 바뀝니다.
      • p245: KMeans 버그 수정으로 인해 Out[81]의 클러스터 크기가 [133 353 232 144 185 136 292 249 211 128] 에서 [155 175 238 75 358 257 91 219 323 172] 로 달라졌습니다.
      • p246, p247: KMeans 버그 수정으로 인해 그림 3-43, 그림 3-44의 이미지가 달라졌습니다(좌: 변경전, 우: 변경후). 클러스터 중심에서 가깝고 먼 이미지가 보다 잘 구분되는 것을 확인할 수 있습니다.
      • p248: Out[85]의 ARI 점수가 0.07에서 0.09로 달라졌습니다.
      • p314: Out[16]의 교차 검증 점수가 [ 0.933 0.96 0.92 0.96 0.947 0.907 0.88 0.933 0.92 0.933] 에서 [ 0.867 0.907 0.973 0.973 0.893 0.96 0.987 0.893 0.933 0.973] 로 바뀌었습니다.
      • p325: Out[31]에서 “decision_function_shape=None” –> “decision_function_shape=’ovr'” 로 변경되었습니다.
      • p340: Out[44]의 dummy 점수가 0.80으로 바뀌었습니다.
        “하지만 더미 분류기조차도 77%를 맞혔습니다” –> “하지만 더미 분류기조차도 80%를 맞혔습니다” 로 수정합니다.
      • p342: Out[48]에서 무작위 더미 모델의 오차 행렬이 [[360 43] [43 4]] 에서 [[360 43] [40 7]] 로 바뀌었습니다.
      • p345: Out[49]에서 무작위 더미 모델의 f1 score가 0.14로 변경되었습니다.
      • p346: Out[51]에서 ‘9 아님’의 precision, f1-score이 0.90으로, ‘9’의 precision, f1-score가 0.14로, ‘avg / total’은 모두 0.82로 변경되었습니다.
      • p347: Out[52] 아래 문단에서 “‘9’ 클래스의 f_1-점수가 0.10이지만 (로지스틱 회귀는 0.89), ‘9 아님’ 클래스는 각각 0.91과 0.99라서 양쪽 모두 수긍할 만한 결과입니다.” –> “‘9’ 클래스의 f_1-점수가 0.14이지만 (로지스틱 회귀는 0.89), ‘9 아님’ 클래스는 각각 0.90과 0.99라서 양쪽 모두 수긍할 만한 결과입니다.” 로 변경합니다.
      • p355: Out[62]에서 랜덤 포레스트와 svc의 평균 정밀도가 각각 0.660, 0.666으로 변경되었습니다. 바로 아래 문장에서 “랜덤 포레스트가 조금 낫지만, SVC와 거의 같은 성능입니다” –> “랜덤 포레스트가 조금 지만, SVC와 거의 같은 성능입니다” 로 변경합니다.
      • p366: Out[74]의 가능한 평가 방식이 다음과 같이 많이 늘어 났습니다.
        [‘accuracy’, ‘adjusted_mutual_info_score’, ‘adjusted_rand_score’, ‘average_precision’, ‘completeness_score’, ‘explained_variance’, ‘f1’, ‘f1_macro’, ‘f1_micro’, ‘f1_samples’, ‘f1_weighted’, ‘fowlkes_mallows_score’, ‘homogeneity_score’, ‘log_loss’, ‘mean_absolute_error’, ‘mean_squared_error’, ‘median_absolute_error’, ‘mutual_info_score’, ‘neg_log_loss’, ‘neg_mean_absolute_error’, ‘neg_mean_squared_error’, ‘neg_mean_squared_log_error’, ‘neg_median_absolute_error’, ‘normalized_mutual_info_score’, ‘precision’, ‘precision_macro’, ‘precision_micro’, ‘precision_samples’, ‘precision_weighted’, ‘r2’, ‘recall’, ‘recall_macro’, ‘recall_micro’, ‘recall_samples’, ‘recall_weighted’, ‘roc_auc’, ‘v_measure_score’]
      • p380: Out[20]에서 “decision_function_shape=None” –> “decision_function_shape=’ovr'” 로 변경되었습니다.
      • p382: Out[26]에서 Pipeline 캐싱 옵션인 memory 매개변수가 추가되었습니다.
        “Pipeline(step=[(‘standardscaler’…” –> “Pipeline(memory=None, steps=[(‘standardscaler’…”
      • p405: Out[22]의 불용어 리스트의 순서에 따라 출력 결과가 달라질 수 있습니다.
      • p427, p428: In[48], In[52]의 LatentDirichletAllocation의 n_topics 매개변수가 0.19버전에서 n_components로 바뀌었습니다.
    2. (p315) 첫 문장 “GroupKFold를 사용할 수 있습니다.” 끝에 주석 “옮긴이_ cross_val_score 함수로 넘겨진 groups 매개변수는 함수 내부에서 cv.splits() 메소드를 호출할 때 groups를 매개변수로 전달합니다.”을 추가합니다.
    3. (p323) 마지막 문단의 중간에 “이 절의 서두에 있는 In[23] 코드의 결과와 대등합니다.”를 “이 절의 서두에 있는 In[22] 코드의 결과와 대등합니다.”로 고칩니다.
    4. (p333) “param_grid의 매개변수 조합은 42개입니다. 이때 만들어지는 모델은 총 42 x 5 x 5 = 1,050개나 되므로..” 를 “param_grid의 매개변수 조합은 36개입니다. 이때 만들어지는 모델은 총 36 x 5 x 5 = 900개나 되므로..” 로 변경합니다. (원서의 2판에서 1판의 오류가 정정되었으므로 원서에 맞게 매개변수 조합을 36개로 고칩니다)
    5. (p343) 정확도의 공식에서 분모의 덧셈 항목 중 EP를 FP로 수정합니다.
    6. (p392) 첫 문단의 “5장에서 본 것처럼 문자열 특성은…”을 “4장에서 본 것처럼 문자열 특성은…”으로 수정합니다.
    7. (p152~153) ‘MLP를 사용할 때는 ‘adam’과 ‘lbfgs’를 추천합니다.<주석>옮긴이_ 최근에 나온 “The Marginal Value of Adaptive Gradient Methods in Machine Learning”, A. C. Wilson et al. (2017, https://goo.gl/NAkWIa) 논문에서 적응적인 최적화 방법인 Adam, RMSProp, AdaGrad가 일부 데이터셋에서 좋지 않은 성능을 내었습니다. 따라서 무조건 Adam 알고리즘을 기본으로 고정하지 말고 ‘sgd’+모멘텀 방식을 함께 테스트해 보는 것이 좋습니다.</주석>
    8. (p153) 주석 73번에서 ‘이럴 경우에는 fit 메서드 대신에’를 ‘전체 데이터를 메모리에 모두 적재할 수 없을 때에는 fit 메서드 대신에’로 변경합니다.
    9. (p35) mglearn 라이브러리를 임포트하면 문제가 없지만 조금 더 명확한 설명을 위해 In[7]에 ‘from IPython.display import display’를 맨 앞에 추가합니다.
    10. (p323, p330) In[26]과 In[36]의 GridSearchCV()의 객체를 생성할 때, 0.21버전에서 return_train_score의 기본값이 True에서 False로 변경될 것이란 경고를 제거하기 위해 명시적으로 return_train_score=True를 추가합니다.
    11. (p176) “단축메서드와 효율적인 방법” 박스의 마지막 문장에 주석 추가. “옮긴이_ 테스트 세트에 fit_transform()을 적용하면 훈련 세트에서 학습한 내용이 모두 지워집니다. 따라서 테스트 세트에는 반드시 transform() 메서드를 사용해야 합니다.”
    12. (p98) 29번 주석 끝에 다음 문장을 추가합니다. “scikit-learn 0.19 버전에서 sag의 성능을 향상시킨 saga 알고리즘이 추가되었습니다. 자세한 내용은 옮긴이의 블로그(https://goo.gl/TLyqdo)를 참고하세요.”
    13. (p386) 6.6절 바로 위 문장 끝에 주석 추가. “옮긴이_ 탐색해야할 매개변수 조합이 많을 경우 scikit-learn 0.19버전에서 추가된 파이프라인 캐싱 기능을 사용하면 그리드서치 속도를 향상시킬 수 있습니다. 자세한 내용은 옮긴이의 블로그(https://goo.gl/EnX5aj)를 참고하세요.”
    14. (p316) 5.2절 바로 위 문장 끝에 주석 추가. “옮긴이_ scikit-learn 0.19 버전에 교차 검증을 반복하여 실행할 수 있는 RepeatedKFold와 RepeatedStratifiedKFold가 추가되었습니다. 자세한 내용은 옮긴이의 블로그(https://goo.gl/Cx8RSr)를 참고하세요.”
    15. (p285) 4.5.1절 바로 위 문장 끝에 주석 추가. “옮긴이_ 이렇게 하는 이유는 테스트 세트의 정보가 누설되는 것을 막기 위해서 입니다. 정보 누설에 대한 자세한 내용은 6장 ‘정보 누설에 대한 예시’ 사이드 노트를 참고하세요.”
    16. (p300) 그림 4-17 밑의 문단에서 정확한 의미 전달을 위해 “요일에 대해 하나의 계수를 학습하고, 시간에 대해서도 하나의 계수를” 에서 “요일마다 하나의 계수를 학습하고, 시간마다도 하나의 계수를” 로 변경합니다.
    17. (p36) NOTE_ 바로 윗 문단 끝에 주석 추가. “옮긴이_ pip로 설치하는 mglearn 모듈은 번역서의 깃허브에 있는 것과 그래프 등이 조금 다릅니다. 번역서 깃허브에 있는 mglearn 패키지를 사용하려면 깃허브에서 클론(clone)하거나 다운로드받은 파일의 압축을 푼 폴더에서 IPython이나 주피터 노트북을 실행하고 import mglearn 을 하면 됩니다.”
    18. (p376) ‘정보 누설에 대한 예시’ 사이드 노트에 나온 예제는 회귀 문제이므로 “교차 검증 정확도“라고 표현된 곳을 모두 “교차 검증 점수“로 변경합니다.
    19. (p395) 두 번째 줄에서 ‘인덱스가 1인‘을 ‘인덱스가 6인‘으로 정정합니다.
    20. (p410) 두 번째 문단에서 “가장 큰 계수 25개와 가장 작은 계수 25개를“을 “가장 큰 계수 40개와 가장 작은 계수 40개를“로 정정합니다.
    21. (p386) 6.6절 아래 문단 4번째 줄에서 ‘iris 데이터셋에서‘를 ‘cancer 데이터셋에서‘로 정정합니다.
    22. (p125) ‘장단점과 매개변수’ 바로 아래 문단에서 “이진 특성이 연속적인 특성에서도“를 “이진 특성이나 연속적인 특성에서도“로 정정합니다.
    23. (p38) 12번 주석에서 “번역 시점에 scikit-learn의 최신 버전은 0.18.1입니다. 번역서의 깃허브 저장소에 있는 소스 코드는 0.18.1 버전에 맞춰 테스트했습니다“를 “초판 번역 시점에 scikit-learn의 최신 버전은 0.18.1이었지만, 번역서의 깃허브 저장소에 있는 소스 코드는 최신 버전에 맞춰 테스트했습니다. 버전 변경으로 달라진 부분은 역자 블로그(https://goo.gl/FYjbK3)의 Outputs 절을 참고하세요“로 정정합니다.
    24. (p103) 두 번째 줄에서 “클래스에 데이터 포인트가 75개씩 있고”를 “클래스에 데이터 포인트가 50개씩 있고”로 정정합니다.
    25. (p104) 첫 번째 줄에서 “노드는 클래스 0에 속한 포인트 75개와 클래스 1에 속한 포인트 75개를 모두 포함한”을 “노드는 클래스 0에 속한 포인트 50개와 클래스 1에 속한 포인트 50개를 모두 포함한”으로 정정합니다.
    26. (p106) 다섯 번째, 여섯 번째 줄에서 “클래스 1로 결정된 영역이 클래스 0에 속한 포인트들로”를 “클래스 0으로 결정된 영역이 클래스 1에 속한 포인트들로”로 정정합니다.
    27. (p135) 53번 주석 끝에 “데이터셋에 따라 StandardScaler도 사용할 수 있습니다.” 추가.
    28. (p152) 신경망의 가중치 개수를 계산할 때 편향을 고려하지 않았습니다. 편향을 고려한 값으로 바꾸면
      • 100 * 100 = 10,000“는 “편향을 포함하여 100 * 100 + 100 = 10,100“로
      • 100 * 1 = 100“은 “100 * 1 + 1 = 101“로
      • 10,100“은 “10,201“로
      • 100 * 100 = 10,000“는 “100 * 100 + 100 = 10,100“로
      • 20,100“은 “20,301“로
      • 100 * 1,000 = 100,000“은 “100 * 1,000 + 1,000 = 101,000“으로
      • 101,000“은 “102,001“로
      • 1,000 * 1,000 = 1,000,000“은 “1,000 * 1,000 + 1,000 = 1,001,000“으로
      • 1,101,000“은 “1,103,001“로
        바뀌어야 합니다.
    29. (p183) 맷플롯립 최신 버전에서 색상이 바뀌었으므로 세 번째 줄에서 “푸른색“은 “초록색“으로 “붉은색“은 “푸른색“으로 수정합니다.
    30. (p249) 아래에서 다섯 번째 줄에 “이는 모든 포인트를 클러스터로 모으려고 DBSCAN의 결과를 생각하면”을 “이는 모든 포인트를 클러스터로 모으려고 한 이전의 DBSCAN 결과를 생각하면”으로 수정합니다.
    31. (p365, p376) In[73]은 AUC를 사용하여 그리드 서치를 하므로 365페이지에 있는 마지막 문장 “print(“테스트 세트 AUC: ….)“을 삭제합니다. 366페이지에 있는 첫 번째 코드에서 “print(“테스트 세트 정확도: …)”를 “print(“테스트 세트 AUC: …)”로 변경합니다. Out[73]에서 “테스트 세트 AUC: 1.000“을 삭제하고 “테스트 세트 정확도: 1.000″을 “테스트 세트 AUC: 1.000″으로 수정합니다.
    32. (p43) 첫 번째 줄에서 iris[‘target_names’]를 iris_dataset[‘target_names’]로 정정합니다.
    33. (p124) 두 번째 줄에서 ‘그림 2-25’를 ‘그림 2-35’로 정정합니다.
    34. (p180) ‘PCA를 적용해 유방암 데이터셋 시각화하기’ 섹션 위 문단 첫 줄에서 ‘다시 평균을 더해서 반대로 회전시킵니다’를 좀 더 의미를 정확하게 하기 위해 ‘다시 평균을 더하고 반대로 회전시킵니다’로 변경합니다.
    35. (p202) 그림 3-17 아래 첫 줄에서 ‘성분 11에 대한 계수 값이 큰 얼굴들은’을 ‘성분 3에 대한 계수 값이 큰 얼굴들은’로 정정합니다.

 


Your Inputs

파이썬 라이브러리를 활용한 머신러닝”에 대한 18개의 생각

  1. Jaeyeon Baek

    이제 1장 예제들 따라가고 있는데, 어떤 이유인지 제 환경에서는 mglearn 을 인스톨 하고 진행해야 하더라고요. 1장 그림1-3 예제가 mglearn 이 있다는 가정에 진행되는 것인가요? (메시지 전송은 답글로 착각하고 전송했습니다)

    좋아요

    응답
    1. 로드홈 글의 글쓴이

      네 맞습니다. 예제 노트북이 있는 폴더에서 주피터 노트북을 실행하시면 서브 디렉토리에 있는 mglearn을 그대로 임포트하실 수 있습니다. 안드레아스 뮐러가 pypi에 있는 mglearn에 깃허브 코드의 수정 사항을 모두 포함시켰는 지 잘 모르겠어요. ^^

      좋아요

      응답
      1. 안중호

        저 역시 같은 문제로 46페이지가 해결되지 않고 있습니다.
        pip install mglearn을 제대로 했는데도 역시 주피터 노트북에서는 mglearn에서 import error가 반복되고 있는데 해결방법은 없는지요?

        또한, 위에서 답변하신 “예제 노트북이 있는 폴더에서 주피터 노트북을 실행하면” 이라는 말이 무슨 의미이지 잘 모르겠습니다. 저는 여기에 제공된 코드를 긁어다 제꺼에 붙이면서 하나씩 실행해보고 있는데, 이 페이지 내에서 주피터 노트북을 실행하는 뭔가 다른 방법이 있는 것인지요?

        추가로 질문드리면, 여기 코드의 챕터 1 시작부분에 별다른 설명없이 제공된
        from preamble import *
        라는 코드는
        ModuleNotFoundError: No module named ‘preamble’
        의 에러를 발생시키고 있는데 제 수준에서는(구글링 몇시간째인데) 해결이 안되고 있습니다.

        감사합니다.

        좋아요

      2. 로드홈 글의 글쓴이

        안녕하세요. 문의 주셔서 감사합니다. pip install mglearn 했는데 import error가 난다면 설치에 사용한 pip와 노트북 실행에 사용한 python이 다른 버전(혹은 다른 배포판)이 아닌지 검토해 보시면 좋을 것 같습니다. 우분투나 맥OS라면 시스템에 기본으로 설치된 파이썬 버전과 혼돈을 일으키는지 확인해 보세요. virtualenv나 conda 환경을 만드셨다면 환경을 먼저 활성화 하고 mglearn 설치와 주피터 노트북을 실행하셔야 합니다.
        예제 노트북이 있는 깃허브를 클론하시면 mglearn 패키지를 설치하지 않으셔도 바로 사용할 수 있습니다. 이 때에는 클론한 디렉토리로 들어가서(윈도우즈 명령 프롬프트나 우분투 쉘) 주피터 노트북을 실행하면 되다는 의미입니다. 도움이 되셨는지 모르겠네요. 궁금한 점 있으시면 다시 코멘트 주세요. 감사합니다. ^^

        좋아요

  2. 박형준

    1장 산점도 행렬 그림이 않그려지는건 어떤 이유로 않되는 걸까요?
    출력값이 이렇게 나오네요

    array([[,
    ,
    ,
    ],
    [,
    ,
    ,
    ],
    [,
    ,
    ,
    ],
    [,
    ,
    ,
    ]], dtype=object)

    좋아요

    응답
  3. rgyeong

    안녕하세요 github에서 zip 파일로 다운받고 압축풀었습니다. 그 안에 있는 디렉토리로 이동
    후 jupyter notebook을 실행하였는데 응답하지 않는다고 뜨는데, 제 컴퓨터의 문제인가요?
    답변 부탁드립니다.

    좋아요

    응답
      1. rgyeong

        대신 한가지만 더 여쭙겠습니다. ;;
        module ‘mglearn.datasets’ has no attribute ‘train_1’ 이라는 오류가 나왔는데, import mglearn만 한 상태라 datasets모듈을 뒤에 붙여주는 것이 맞는 것 같고 책에도 그렇게 나와있는데, 왜 오류가 나는 건가요? 여기서 train_1은 두개의 컬럼으로 되어있고 값은 연속형 숫자 입니다. 책에서 처럼 이진수로 만들어 주지 않아서 그런가요?

        좋아요

      2. 박해선 글의 글쓴이

        안녕하세요. 책이나 깃허브 In[] 몇 번 코드인지 알려 주시면 밤늦게 확인해 드릴 수 있을 것 같습니다. ^^

        좋아요

      3. rgyeong

        네! 넘어가고 다른 것부터 해서 늦게 답글을 올립니다.
        4장 특성공학 269페이지 In[12]입니다 . X 와 y의 관계를 보기 위해서 데이터 셋중에서 두개의 컬럼을 만들어 테이블을 만들었고 이를 train_1에 저장했습니다. 두 컬럼 모두 연속형 숫자이고 `X, y = mglearn.datasets.train_1()` 이라고 입력했을 때 오류가 나타났습니다.

        그리고 하나 더 궁금증이 생겼습니다…. 어떤 특성 1과 특성2가 연관이 있어 하나로 뭉쳐(?)주고 싶은데, 이를 one-hot 인코딩으로 컬럼을 만들게 되면 컬럼 수가 너무 많아져서 다항 특성에서 나온 ‘x1 x2’, ‘x1 x3’ 처럼 연결짓고 싶은데, 제가 원하는 특성 조합을 만들 수 있는 방법이 있을 까요?

        좋아요

      4. 박해선 글의 글쓴이

        안녕하세요. mglearn.datasets은 책의 저자가 예제에 필요한 데이터셋을 만들기 위해 작성한 모듈입니다. 이 모듈에는 train_1 이라는 함수는 없는데요. 모듈에 함수를 추가하신 거라면 직접 작성하신 코드를 확인해 드리기는 어려운점 양해 부탁드립니다. 그리고 가지고 계신 데이터셋으로 필요한 차수만큼 다항 특성을 만든 후 4.5.2 모델 기반 특성 선택이나 4.5.3 반복적 특성 선택 절을 참고하면 적절한 특성을 골라낼 수 있을 것 같습니다. 🙂

        좋아요

  4. mchoixx

    안녕하세요? 3쇄 p. 386의 6.6 아래 문단 4번째줄 우측에서 iris 데이터 셋이라고 써있는데 실제 코드는 cancer 데이터셋 아닌지요? p. 387 설명에도 cancer 데이터셋이라고 명시되어 있고요. 확인해주시면 감사하겠습니다.

    좋아요

    응답
    1. 박해선 글의 글쓴이

      윽, cancer가 맞습니다. 원서의 오류네요. 원서와 번역서를 수차례 읽어왔는데도 실수를 바로 잡지 못했네요. 죄송합니다. 그리고 알려 주셔서 감사드립니다. 편안한 밤 되십시요. 🙂

      좋아요

      응답
  5. incio

    p 67. 3~4번째 줄에 이웃을 적게 사용하면 모델의 복잡도가 높아지고 ~( ) 에서 나온 그림 2-1이 아니라 2-6이 맞나요?

    좋아요

    응답
    1. 박해선 글의 글쓴이

      안녕하세요. 문의 주신 부분은 그림 2-1이 맞습니다. 이 문단에서는 과대/과소 적합을 설명하면서 그림 2-1과 비교하고 있습니다. ^^

      좋아요

      응답

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중