목록분류 전체보기 (94)
혼자 정리
앞에서는 추정량에 대한 함수를 guess하고, 그 추정량의 bias와 variance와 같은 성질들을 분석했었다. 그러는 대신 특정한 원칙을 통해 여러 모형들에서 좋은 추정량 함수를 구해보자. Maximum likelihood principle이 그러한 원칙 중 가장 많이 쓰이는 것 MLE의 가정 알려지지 않은 true data generating distribution $p_{\text{data}} ( \boldsymbol{x})$에서 독립적으로 추출된 $m$개 example의 집합, $\mathbb{X} = { x^{(1)} ,..., x^{(m)} }$을 가정 $p_{\text{model}} (\boldsymbol{x}; \theta)$는 임의의 벡터 $x$를 true probability $p_{..
코드 형식을 맞추기 위해 규칙을 정하고 규칙을 잘 따르자. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두 그 규칙을 따르자 왜 형식을 맞추는지? 의사소통을 원활하게 하기 위해 내가 짠 코드를 나중에 누군가 보고 유지보수, 확장하기 위해서는 가독성이 좋아야 한다. → 가독성 좋은 형식 처음 구현할 때 잡은 형식은 추후에도 크게 바뀌지 않으니 처음 형식을 잡는 것이 중요 원활한 소통을 장려하는 코드 형식에 대해 보자 세로 형식 맞추기(Vertical Formatting) (자바 기준으로) JUnit, FitNesse, Time and Money등의 프로젝트에서 500줄을 넘기는 파일이 없고 대다수가 200줄 미만. 모든 프로젝트가 그런 건 아니지만 대개의 프로젝트는 500줄을 넘기지 않고 대부분 200줄 ..
5.4 Estimators, Bias and Variance 통계학의 도움을 통해 training set에서 학습한 모델을 generalize하는 데 큰 도움을 얻을 수 있다. 모수 추정(parameter estimation), 편의(bias), 분산(variance) 등을 통해 generalization, underfitting, overfitting의 개념을 formal하게 특징지어볼 수 있다. 5.4.1 Point Estimation(점 추정) 점 추정은 관심있는 무언가의 '가장 나은' prediction을 얻는 것이다. 관심있는 것은 parametric 모형에서 하나의 parameter일 수도 있고 parameter의 벡터일 수도 있고(선형 회귀이면 weights), 그냥 함수 전체..
표준 라이브러리 모듈 다음 컨셉을 포함 로그로 저장하고 싶은 message 다음 각 함수에 매칭되는 우선순위 레벨 : debug(), info(), warn(), error(), critical() 모듈과 연결된 logger객체 파일, 터미널, db 등에 메세지를 기록하는 Handler 출력물 생성하는 Formatters input에 따라 결정을 내리는 Filters 기본적인 동작 ex) >>> import logging >>> logging.debug("Looks like rain") >>> longging.info("And hail") >>> logging.warning("Did I hear thunder?") WARNING:root:Did I hear thunder? >>> logging.error..
4장 주석 주석은 '필요악'이다 주석을 유지 보수하는 것은 쉽지 않으니 오래될수록 코드와 동떨어지게 된다 → 없는 것보다 못하게 될 수 있음 가능하다면 코드에 제대로 된 정보를 담아서 해결하자 주석은 나쁜 코드를 보완하지 못한다 나쁜 코드를 주석을 통해 보완하는 것보다 코드를 정돈하는 것이 더 효율적이다. 코드로 의도를 표현하라! 물론 확실히 코드만으로 의도를 설명하기 어려운 경우도 있다. 그래서 많은 개발자들이 자신의 코드도 그런 경우라고 생각하는데 잘 생각해보면 해결책이 있는 경우가 더 많으니 코드로 해결해보자. ex) // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) if (employ..
FitNesse에서 길고, 중복이 많고, 이상한 문자열과 낯설고 모호한 자료 유형, API가 많은 코드를 부정적인 예시로 보여줌 (3-1) public static String testableHtml( PageData pageData, boolean includeSuiteSetup ) throws Exception { WikiPage wikiPage = pageData.getWikiPage(); StringBuffer buffer = new StringBuffer(); if (pageData.hasAttribute("Test")) { if (includeSuiteSetup) { WikiPage suiteSetup = PageCrawlerImpl.getInheritedPage( SuiteResponder...
2장 의미 있는 이름 의도를 분명히 밝혀라 변수(혹은 함수나 클래스)의 존재 이ㅠ는? 수행 기능은? 사용 방법은? 이러한 질문들에 따로 주석이 필요치 않게 이름을 지어야 한다. ex1) int d; // 경과 시간(단위: 날짜) 대신 다음과 같이 쓰는 것이 조금 더 명확하다.int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays; ex2) public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; } 위의 코드는 독자가 다음 정보를 안다고 가정..
5.3 Hyperparameters and Validation Sets Hyperparameter를 통해 학습 알고리즘의 행동을 제어할 수 있다. 하이퍼파라미터는 학습 알고리즘 자체에 의해 조정되지 않는다(물론 다른 학습 알고리즘의 하이퍼파라미터를 학습할 수는 있다) 다항 회귀 예시에서 하이퍼파라미터는 다항식의 차수 하나만 있었고, 이는 capacity hyperparameter로 작용했다. weight decay의 강도를 조절하는데 쓰였던 $\lambda$값도 하이퍼파라미터라고 할 수 있다. 하이퍼파라미터를 최적화 문제를 통해 정하기도 하지만 보통은 최적화 솔루션을 구하는 게 쉽지 않다. 게다가 training set에서 하이퍼파라미터를 학습하는 것은 보통 적절하지 않다. 특히 모델 capacity를 ..
Ch.5 Machine Learning Basics 5.1 Learning Algorithms 머신 러닝 알고리즘은 데이터에서 학습(learn)할 수 있는 알고리즘. Mitchell(1997)에서 다음과 같이 말함 A computer program is said to learn from experience $E$ with respect to some class of tasks $T$ and performance measure $P$, if its performance at tasks in $T$, as measured by $P$, improves with experience $E$. 5.1.1 The Task, $T$ ex) 로봇이 걷게 하고 싶다 하면 '걷는'것이 task 머신 러닝 t..
1장 깨끗한 코드 코드는 사라지지 않는다 시간이 갈수록 프로그래밍 언어에서 추상화 수준은 점차 높아질 것으로 예상. ex) DSL(Domain Specific Language) : 도메인 특화 언어로 특정 문제를 해결하기 위해 만든 프로그래밍 언어나 명세 언어 But, 기계에게 요구사항을 이해시키려면 어느 수준에서는 하나하나 상세한 요구사항을 알려줘야 한다. → 코드는 요구사항을 표현하는 언어, 기계를 원하는 목적으로 작동하게 하려면 어느 순간에는 상세한 요구사항(명확한 코드)이 필요 나쁜 코드 당장 돌아가는 코드를 짜는 것에 급급하면 나중에 프로그램 유지/보수에 분명 큰 어려움을 만들게 된다. "지금은 일단 돌아가게 하고 나중에 고치자.." → 지금 짠 코드를 나중에 고칠 시간은 오지 않는다. 코드를 ..