더북(TheBook)

이 장에서 이산적 데이터에 나이브 베이즈를 사용해 보았습니다. 그러므로 여러 타깃 클래스에 어떤 값들이 자주 등장하는지에 대한 테이블을 만드는 것으로 학습을 수행했습니다. 연속적인 수치형 값을 대상으로 한다면 조금은 다른 게임이 됩니다. 이 경우 학습은 중심점과 값들의 분포가 어떤지 알아내는 것이 됩니다. 가끔 우리는 정규 분포가 데이터에 잘 들어맞는다고 가정합니다. 그러면 이 프로세스는 가우시안 나이브 베이즈가 됩니다. 가우시안과 노멀은 본질적으로 동의어입니다. 우리가 가정을 하고 있다는 것을 유념하세요. 이 가정이 잘 작동할 수도 있고, 틀렸을 수도 있습니다. 가우시안 나이브 베이즈는 8.5절에서 더 자세히 알아보겠습니다.

성능을 다루는 장에서는 “프로그래밍에서 때 이른 최적화는 만악의 근원이다.”를 꼭 언급하고 지나가야 합니다. 컴퓨터 과학계의 노벨상인 튜링상을 1974년에 받은 도널드 커누스(Donald Knuth)의 수상 소감 연설에서 따온 말입니다. 커누스는 말할 필요도 없이 이 분야에서 컴퓨터 과학계의 거장입니다. 그의 표현에는 두 가지 포인트가 있습니다. 첫째, 컴퓨터 시스템에서 대부분의 실행 시간은 보통 코드의 작은 부분에 매여 있습니다. 이 관찰은 파레토 원리나 80-20 법칙의 한 형태입니다. 둘째, 코드를 최적화하는 것은 어렵고, 오류가 발생하기 쉬우며, 코드를 이해하거나 보수하고 변형하기 더 어렵게 만듭니다. 이 두 가지 포인트를 종합하면 시스템의 전반적인 성능에 기여하지도 않는 코드 최적화를 하는 데 쓸데없이 프로그래밍 시간을 낭비한다는 것을 알 수 있습니다. 그렇다면 더 나은 방법은 무엇일까요? (1) 훌륭하고 견고하고 뜻한 대로 동작하는 시스템을 만들고 나서 성능을 측정하세요. (2) 프로그램에서 느리거나 계산 집약적인 병목 구간을 찾으세요. (3) 그러한 병목 구간들을 최적화하세요. 우리는 꼭 처리해야 하는 필요성이 있고 최종 목표에 기여하는 일에만 집중해야 합니다. 또 이러한 격렬한 작업을 최소화해야 합니다. 한 가지 주의 사항이 있습니다. 내부 루프, 즉 반복되는 구문의 맨 안쪽에 위치한 영역은 보통 최적화를 했을 때 가장 생산적인 영역입니다. 그들은 그 정의상 가장 많이 반복되는 코드이기 때문입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.