읽기전

  • 데이터를 많이 들여다 보려고 노력하고 있는데, 이거 참 기본이 있어야지...

  • 특히 데이터를 어떻게 들여다 볼 것인가? 에 대한 고민이 필요해서 구매 한 책.

  • 기존 딥러닝 책들은, 이미 잘 정제 되어 있거나, 필요한 값들을 이미 선별해 둔 책이 많다.

  • 하지만, 실제 데이터들은 잘 정제되어 있지도, 어떠한 값을 딥러닝에 넣어야 할지도 모르니....

  • 에라, 모르겠다. 걍 딥러닝에 다 때려 박으면 되지 싶다가도,

    • 그래도 기본은 알아야지.
    • 필요한 것만 때려 박으면 더 잘 되겠지.
  • 싶어서 구매한 책

  • 이 책에 있는 대부분의 예제는 전체 소스코드가 나와 있지 않고, 설명이 생략 된 것도 꽤나 된다.

  • 그러므로 초보자가 읽기에 적당하지 않은듯 하다.

책 읽기

서문

옮긴이의 말

  • 하지만 너무나 다양한 데이터의 종류가 특성에 따라 경험적으로 수행돼 왔을 뿐, 이를 범용적으로 적용하는 방법에 대한 책이나 논문이 거의 없었다.
  • 머신 러닝 입문자들에게는 피처 엔지니어링에 대한 원리를 배우고 실습을 통해 실력을 높일 수 있는 좋은 기회가 될 것이며, 데이터 과학에 종사하는 분들에게는 그동안 경험적으로 수행해 오던 피처 엔지니어링 기법들을 암묵지에서 형식지로 정리하는 계기가 될 것이다.

들어가며

  • 모델은 피처(feature)를 입력으로 사용한다. 피처는 원시 데이터의 숫자적인 표현이다..
  • 피처 엔지니어링은 원시 데이터로부터 피처를 추출하고 이를 머신 러닝 모델에 적합한 형식으로 변환하는 작업이다.
  • 데이터와 모델은 매우 다양하기 때문에 피처 엔지니어링 방법으로 일반화 하기 어렵다.

1장 머신 러닝 파이프라인

데이터

  • 데이터, 모델, 피처, 모델 평가
    • 실제 세계의 현상에 대한 관측 결과
    • 데이터의 각 조각은 현실의 제한된 한 측면에 대한 창을 제공
    • 원시 데이터는 숫자가 아닌 경우가 많다. ( 앨리스가 수요일에 책을 샀다. )
    • 피처는 원시 데이터의 숫자적인 표현이다.
    • 우리가 해결하고자 과제에 적합한 모델에, 잘 들어 맞는 피처를 만들어야 한다.
    • 피처가 적으면 제대로 과제를 수행하지 못하고, 피처가 많아도 필요 없는 피처로 인해 모델의 학습에 많은 비용과 어려움이 있을 수 있다.
  • 원본 소스가 통찰력까지 가기는...
    • 소스 ->(추출 및 통합)-> 원시 데이터 -> (정제 및 변환) -> 피처 -> 모델링 -> 통찰력
    • 여기서 "정제 및 변환" 부분이 피처 엔지니어링 부분이다.

2장 숫자를 위한 멋진 트릭

  • 이미 숫자는 수학적 모델로 처리하기 쉬운 형식.
  • 하지만 좋은 피처는 데이터를 가장 두드러진 특징을 표현할 뿐만 아니라, 모델의 가정에도 맞아야 한다. 그러므로 피처 엔지니어링이 필요.
  • 고려사항
    • 값의 크기 : 양수? 음수?, 구간을 나눠야하나? 숫자가 누적되나?
    • 스케일 : 가장 큰 값, 가장 작은 값, 둘의 차이가 몇자리 수. 출력 값이 커질 수 있나? 출력값이 바이너리면?
    • 숫자 피처의 분포
    • 여러 피처를 조합해 더 복잡한 피처를 만들 수도 있음

스칼라, 벡터, 공간

  • 스칼라(scalar) : 단일 숫자 피처
  • 벡터(vector) : 방향이 있는 스칼라의 리스트, 벡터는 벡터공간내에 위치.
  • 벡터는 공간상의 한 점( 종종 원점에서 그 점까지의 선이나 화살표로 그린다. )

카운트 처리

  • 노래나 영화를 플레이 한 횟수 등 이런 카운트
  • 누군가가 조작하기가 쉬우므로, 그래도 사용할지, 존재 여부만 처리 할지, 몇개의 구간으로 나눌지 등을 고민해야 한다.

바이너리 변환

  • '견고한 척도'(통계 용어에서 "견고함"은 해당 기업이 매우 다양한 조건하에서도 잘 작동함을 말한다. 라는 말이 있는데.. 이걸 이쪽 세상에서는 로버스터(robust)라는 용어를 훨씬 더 많이 사용한다.
  • 데이터의 값이 너무 많이 차이가 나면, 그냥 1 과 0 으로 나눠 주는것도 가능하다.

양자화 또는 비닝

  • 비닝(binning)은 구간화 정도로 생각하면 되겠다.
  • 양자화랑 비슷한 듯.
  • 쉽게 말하면, 값을 구간을 두고 정리 한다는것. ( 10대, 20대, 30대 등 )
  • 고정폭 비닝
    • 나이를 가지고 할 것이라면, 10대, 20대로 할 수도 있지만, 삶의 단계에 맞게, 초등학교, 중학교, 고등학교, 대학교의 나이로 나누는것이 더 좋을 수도 있다.
    • 여러 자리수라면, 0 ~ 9, 10 ~ 100, 100 ~ 1000 등으로 나눌 수도 있다.
  • 분위수(quantile) 비닝
    • 그냥 고정폭 비닝은, 중간에 빈 값이 많으면 데이터가 없는 구간이 너무 많다.
    • 걍 전체 값의 1/2이나 1.4 단위, 혹은 1/10 단위로 나눠서 배치한다.

로그 변환

  • 작은 숫자가 많고, 큰 숫자가 듬성 듬성 적게 데이터가 존재한다면, 작은 숫자들을 좀 더 잘게 쪼개야 하고, 큰 숫자를 좀 더 모아줘야 한다.
  • 이럴때는 로그 변환을 사용하면 된다.
  • log10(x) 는
    • 1 ~ 10 사이의 숫자를 0 ~ 1 사이로 배치
    • 10 ~ 100 사이의 숫자를 1 ~ 2 사이로 배치
    • 100 ~ 1000 사이의 숫자를 2 ~ 3 사이로 배치 할 수 있다.
  • 즉, 큰 수의 변화량을 작은 변화량으로 바꿀 수 있어, 상대적으로 작은 숫자의 변화량을 더 잘 표현할 수 있게 된다.
  • 뒤에 Box-Cox 라는것도 나오는데, 잘 모르겠지만, 결국 데이터를 잘 분산한다는것에 목적이 있는 듯 하다.

피처 스케일링 또는 정규화

  • 위도나 경도는 피처의 숫자 값에 한계가 있음. 하지만 카운트는 한계가 없음.
  • 모델이 입력 피처의 스케일링(값 범위)에 민감하다면, 피처를 적절히 스케일링 해 주어야 한다.
  • 이걸 피처 스케일링, 혹은 피처 정규화(normalizataion)이라고 부른다.

min-max 스케일링

  • 제일 작은 값을 0, 제일 큰 값을 1로 변환
  • min-max scailing

표준화(분산 스케일링)

  • 피처 표준화(standardization) : 모든 데이터 포인트에 대한 피처의 평균을 빼고 분산으로 나눈다.
  • 그래서 분산 스케일링이라고도 부름
  • 스케일링된 피처의 결과는 평균이 0, 분산이 1
  • 즉 0을 중심으로 좌우로 적절히 데이터를 배치한다.

l2 정규화

  • 원본 피처 값을 유클리드 노름(norm)으로 불리는 l2 노름으로 정규화한다.(나눈다)
  • 원본 값 / (모든 데이터에 제곱을 한 뒤, 이를 모두 더하고, 다시 제급근(루트)를 씌워 준다.)
  • 자세한건 나도 모르니깐 통과.
  • 이상과 같은 피처스케일링은, 피처의 분포의 모양을 바꾸지는 않는다. 다만 분포에 대한 스케일만 변경한다.
  • 예를들면 원본 데이터를 이용해서 만든 그래프와, min-max를 이용해서 만들어진 그래프의 모양은 동일하다. 다만, 피처의 스케일만 달라져 있는 것이다.
  • 입력 피처들의 기준이 다를때는 비슷하게 만들어 주는것이 좋다. 방문자 수가 100만명 단위인데, 구매자 수가 100명 단위라면, 균형을 맞춰줄 필요가 있다.
  • 그렇지 않으면 모델 학습 알고리즘에서 수치 안정성 문제를 일으킬 수 있다.

상호작용 피처

  • 한개의 피처만을 사용하는것이 아니라, 두개의 피처를 모두 사용하는 방법.
  • 예를들면, "서울"에서 "30대" 같은것.
  • 고객의 위치만으로 예측하는것, 혹은 고객의 나이만으로 예측하는것 보다는, 둘 다의 값으로 예측하는것이 더 정확
  • 하지만, 더 복잡한 계산이 필요. 어떤 피처들 선택할 것인가도 문제.

피처 선택

  • 필요 없는 피처는 제거하는것이 모델의 복잡성을 줄일 수 있음.
  • 그러면 정확도는 거의 저하시키지 않고, 빠르게 연산 할 수 있을 것임.
  • 어느 피처가 중요한지 알아 내기 위해서, 오히려 전체 학습 시간이 오래 걸릴 수도 있음.

필터링

  • 피처와 목표 변수 사이의 상관관계, 상호 정보량등을 계산해 크게 영향을 미치지 않는것을 걍 제거.
  • 쉽게 할 수 있지만, 내가 필터링 할 피처를 잘못 선택할 수도 있다.
  • 아예 해당 데이터를 사용하지 않을 것이므로, 유용한 필터를 제거 할 수 있으므로, 보수적으로 선택해야 한다.

레퍼메소드

  • 비용은 많이 들지만, 피처의 하위 집합을 시험해 볼 수 있도록 해 줌.
  • 정보량이 많지 않을 수도 있지만, 조합했을 경우 유용한 것일 수 있으므로 실수를 방지 해 줌.

내장 메소드

  • 모델 학습 과정의 일부로서 피처 선택을 수행
  • 의사결정트리는 각 학습 단계에서 트리를 분할하기 위한 피처를 선택하게 되어 있음.
  • 선형 모델 학습에 사용하는 l1 정규화도, 모델 학습 과정의 일부로 피처를 선택하게 되어 있음.
  • 레퍼메소드 방식보다 강력하지 않지만, 비용이 절감
  • 필터링과 비교 했을 때 보다는 모델에 적합한 피쳐를 선택,
  • 필터링과, 내장 메소드 사이의 적절한 균현을 이룸
  • 이 책의 설명 범위가 벗어난다면서, 여기에 대한 설명을 다른곳을 찾아 보라고 함.

요약

  • 일반적인 숫자 피처에 대한 피처 엔지니어링을 설명
  • 통계적인 머신러닝에서 모든 데이터는 결국 숫자 피처로 귀결
  • 결국 몇가지 숫자 피처 엔지니어링 기법이 필요

3장 텍스트 데이터: 플래트닝, 필터링, 청킹

  • 문장이 있다면, 어느 부분을 추출해야 하나?
  • 단어 카운트 총계를 기초로 하는 가장 단순한 표현인 BoW
  • 텍스트와 매우 깊은 연관이 있는 변환 tf-idf

bag-of-x: 자연어 텍스트를 평면 벡터로 변환

  • 결과가 단순하고 해석 가능할때가 가장 좋음, 단순해야 시도해 보기 좋고, 디버깅이 쉽다.
  • 우선 단순하게 시작하고, 필요한 경우 복잡성을 더하도록 하자.
  • 문서를 분류하는 작업은 종종 단어 카운트 통계만으로도 충분함.
  • 특정 단어의 존재 유무가 문서의 주제를 잘 나타내는 지표가 됨.

BoW

  • Bag of word
  • 단어별 단어가 노출되는 갯수를 테이블로 만든것.
  • 이러한 단어별 카운트의 분포에 따라서 문서가 어떠한 특징을 가지는지 알 수 있다.
  • 텍스트는 원래 플랫(flat)한 구조이나, BoW는 단어가 몇번 나오는지만 저장해 둔다.
  • 텍스트는 순서(Sequance)를 가지나, BoW는 순서도 없다. 단어별 계층 구조도 없다.
  • 오직 등장한 횟수만...
  • 이렇게 단어와 등장 횟수를 피처를 만들고, 어떠한 문장을 분석해 보도록 하자.
  • 각 단어가 1개의 차원이 된다. 등장 횟수가 해당 피처의 값이 된다.
    • 특정 문장에서 cute라는 단어와 puppy라는 단어가 각각 몇번 나왔는지를 x, y로 두면 그 문장이 2차원의 어느 위치에 있는지 알 수 있다.
    • 특정 문장에서 cute, puppy, extremely 이라는 단어가 각 몇 번 나왔는지를 x, y, z로 두면 그 문장이 3차원에서 어느 위치에 있는지 알 수 있다.
    • 각 단어와 등장한 횟수가 피처가 되고, 문장이 어느 위치에 있는지 알 수 있다.
  • 반대로 각 문장 자체를 피처로 두고, 단어들을 배치해 볼 수도 있을 것이다. 이러한 것은 bag-of-documents 라고 한다. ( 자세한건 4장에 설명 된다고... )
  • BoW는 문장을 단어로 분해 할 때 의미가 파괴 될 수 있다. not bad의 경우 '나쁘지 않다.'라는 뜻인데, 분해를 해 버리면 둘다 나쁘다라는 의미를 표현하게 된다.
  • 이러한 문제를 일부 해결 하기 위해 bag-of-n-grams를 사용한다.
  • BoW는 유용한 경험적 방법이지만, 텍스트의 정확한 의미를 파악하는것과는 거리가 멀다.

bag-of-n-grams

  • BoW는 단어 당 하는건데, 여기는 n개의 연속된 단어로 하는거다. 1개로 되어 있으면, 1-gram, unigram 이다.
  • 중첩된 시퀀스를 n-gram이라고...
  • "Emma knocked on the door'를 2-gram으로 나타내면
    • Emma knocked
    • knocked on
    • on the
    • the door
  • 로 나타낼 수 있다.
  • 하지만 당연히 BoW 보다 훨씬 더 많은 피처 갯수가 생긴다.

정제된 피처를 위한 필터링

  • 단어를 사용할 때는 필요한 정보(시그널)과 노이즈(필요 없는 정보)를 분리해야 함.

불용어

  • 분류와 검색은 텍스트이 대한 깊은 이해를 요구하지 않음(의미까지 명확하게 파악하지 않아도 된다는 뜻일까?)
  • 분류와 같은 섬세하지 않은 작업에서 대명사, 관사, 전치사의 가치는 그다지 크지 않다.
  • 하지만 섬세한 의미론적 이해를 요구하는 감성 분석에서는 매우 다를 수 있다.
  • 영어의 불용어 리스트는, 파이썬 NLP 패키지인 NLTK에 수 많은 언어에 대해 불용어 리스트를 가지고 있다.

빈도 기반 필터링

  • 얼마나 단어가 나오는지를 확인하면, 상용어를 필터링 하기 쉽다.
  • 빈출 단어
    • 또한 단어가 너무 많이 나와도 의미를 파악하기 어려울 수 있다.
    • 의사 회의록은 'House of Commons(하원)'이라는 단어가 많이 나와서 house라는 단어가 너무 많이 나옴.
    • 이를 어떻게 처리 할 것인가를 정하는게 어렵다. 또한 얼마나 많이 등장 할 때만 의미를 부여/제거 할 것인가? 를 정하는것도 쉽지는 않다.
  • 희귀 단어
    • 잘 알려있지 않은 단어거나, 철자가 틀린 것일 수도 있음.
    • 통계적인 모델에서는, 한 두번 나오는건 잡음(노이즈-noise)에 가깝다.
    • 아주 적은 횟수가 등장하는 단어 때문에, 분류를 잘못 할 수도 있다.
    • 또한, 이러한 단어들을 모두 포함해서 연산을 하게 되면 필요 없는 계산을 많이 해야 한다.
    • 책에서 설명하는 Yelp 데이터 160만개 리뷰는 35만개의 고유 단어가 포함되어 있고, 약 23만개의 단어가 1개 혹은 2개의 리뷰에서만 나온다. 즉, 60%의 단어가 크게 의미를 가지지 않을 수도 있다는 뜻이다.
    • 이러한 피처를 모두 모델을 만들때 추가하게 되면, 계산 비용과 저장 비용이 많이 들게 된다. 그러므로 이러한 단어들을 적절히 제거해 주어야 한다.
    • 텍스트의 문장이 매우 짧은 경우, 통계적 의미를 찾기 어려울 수 있기 때문에, 이러한 문장을 제외해야 할 수도 있다. 하지만 트위터는 짧은 문장만을 가질 수 있으므로, 다른 방식의 기법을 사용해야 한다.
  • 어간 추출
    • 어간(語幹) : 활용어의 활용에서 변하지 않는 부분. '읽는다, 읽느냐, 읽고…' 등에서의 '읽'. 어간에 어미 '-다'를 붙인 것을 기본형이라고 하여 사전의 표제어로 올림. 줄기.
    • 단어를 공백이나 구둣점으로 잘라서 세면, 같은 의미를 가진 단어를 모두 따로 카운트 하게 된다. 'swin', 'swinging'은 의미가 비슷하지만 서로 다르다고 카운트 된다.
    • 통계적인 데이터로 처리 할 때에는 어간(stem)을 추출해서 단어의 기본형으로 변환하여 저장하는것이 좋은 경우가 많다.
    • 하지만, news 와 new는 전혀 다른 의미를 가지지만, 같은 new로 어간 추출이 될 수도 있다. 그러므로 항상 어간 추출을 사용해야 한다는것은 아님을 명심하자.

의미의 단위: n-grams에서 구문까지

파싱과 토큰화

  • 문자열에 의미가 있는 텍스트가 아닌게 많다.
  • 또한, 의미를 구분해 주는것도 있을 것이다. 이메일의 from, to 등.
  • 단어를 쪼갤때, 공백, 구둣점 등으로 나누면 된다.
  • n-grams으로 n개를 쪼갤때는, 문서가 아니라 "문장" 단위로 되어야 한다.
  • 즉, 마침표가 있으면 n-grams를 늘리면 안된다.
  • 하지만, word2vec 과 같이 복잡한 것을 할 때는, 단락에 적용할 수도 있다.
  • 암튼, 그냥 상황에 따라서 잘 나눠서 하면 된다는것 같다.

구문 탐색을 위한 연어 추출

  • 연어. 연달아 적힌 단어가 의미를 가질 수 있다.
  • strong tea는 "진한 차" 인데, 두 단어를 쪼개면, "물리력이 강하다"와 "차"로 나눠진다. 그러므로 의미가 달라진다. 이러한것을 연어라고 한다.
  • 'cute puppy'는 'cute'와 'puppy'의 의미를 합쳤을때 동일한 의미를 가진다. 이런건 연어가 아님.
  • 연어가 꼭 연속되어 나오라는 법도 없고, 모든 연속된 단어가 연어라는 법도 없다.
  • 그래서 너무 어려움. 통계적인 기법을 사용한다.
빈도 기반 방법
  • 많이 나타나는 n-grams을 보는 법. bigrams등의 빈도수를 실제로 확인해 보고, 의미 있는것을 찾을 수 있다.
연어 추출을 위한 가설 검증
  • 책에 나오는 복잡한 내용은 생략...
청킹과 품사 태깅
  • 주제를 찾는 경우에는 명사에 가장 관심이 있을 수 있음.
  • 즉, 품사를 찾아야 함.
  • 걍 형태소 분석을 한다는것으로 보인다. 통과. ㅋㅋㅋ

요약

  • Bag of Word
    • BoW, 단어를 하나씩 Bag에 넣는것
    • 단순 검색에는 좋으나, 문맥이 유지 되지 않아 의미를 파악하기 어려움
  • Bag of n grams
    • n-gram을 Bag에 넣는것, 연속된 단어를 n개 조합해서 저장
    • 하지만 연속된 단어 n개의 조합이 너무 많아서 데이터 양이 너무 많음
    • 데이터 양이 많다면, 의미를 가지는 데이터를 더 찾기 어려울 수 있다.
  • 연어(구문, 상용구) 추출
    • 연속된 구문을 보고 의미가 있고, 없는 것들을 통계적으로 추출할 수 있다.
  • 이 장에서 설명한 문장을 처리하는 방법은, 문장을 쪼개 단어의 bag으로 만들게 된다. 그러므로 이러한 방식으로는 문장의 의미를 구체적으로 파악하기는 어렵다.

4장 피처 스케일링의 효과: BoW에서 tf-idf로

  • BoW 는 필요 없는 단어들이 강조 될 수 있다. "is", "the", "and" 는 문장에서 너무 많이 나올 것이다.
  • 하지만, 문장에서 "happy", "gloomy" 등은 자주 등장하지는 않지만, 문장의 의미를 잘 표현한다. 이러한 것들을 잘 찾아 주는 방법을 찾아야 한다.

tf-idf: BoW 비틀기

  • tf-idf : term frequency-inverse document frequency
  • tf-idf : 용어 빈도 - 역 문서 빈도
    • 각 단어의 카운트를 해당 단어가 나타나는 문서의 수로 나눈 정규화 카운트
    • (하나의 문서에서 해당 단어 카운트)*log((전체 문서 수)/(해당 단어가 나타나는 문서의 수))
    • 전체 문서가 5개 일때, 모든 문서에 'is'가 들어간다고 하면 위 공식의 뒷 부분이 log(5/5) = log(1) = 0이다. 그러므로 위의 공식의 결과는 0 이다.
    • 'is'는 tf-idf 를 이용해서 처리하면 0이 된다. 즉, 모든 문서에 나오는 단어의 의미를 제거할 수 있다.

tf-idf 테스트

  • 자세한 내용은 생략
  • 학습을 시킬때, 데이터 카테고리별 갯수가 차이가 많이 나면 당연히 결과가 좋지 않을 것이다. 그러므로 데이터 카테고리별 갯수를 세고, 작은 쪽에 맞춰 주어야 한다.
  • 테스트셋에 트레이닝셋에 존재하지 않는 정보가 있다면, 당연히 테스트셋의 결과를 제대로 확인 할 수 없을 것이다.
  • 충분히 많은 양의 데이터라면, 테스트셋에만 존재하는 데이터는 "희귀"한 데이터 일 수도 있다. 그러므로 이때는 "그냥 무시"하는 방법을 써도 되는지 검토해 볼 필요가 있다.
  • 이 장에는... 머신러닝 관련되는 이런저런 이야기가 나온다. 난 걍 통과.

심층 분석: 무슨 일이 일어나고 있는가?

  • 생략

요약

  • 피처 스케일링을 통해 정보가 많은 단어는 강조되고, 상용어는 가중치가 낮아진다.

5장 범주형 변수: 로봇닭 시대에 달걀 개수 세기

  • 범주형 변수(categorycal variable)
  • 카테고리나 레이블(label)을 나타내는 방법
  • 범주형인지 아닌지 알아 내는건 쉬움. 연속적인지 아닌지를 판단하면 됨.
    • 주가 10달러와 15달러는 연속적인 값.
    • "정치", "경제", "사회"는 연속적이지 않은 값.
  • 문서 코퍼스(corpus)의 어휘도 각 단어가 구분되므로 커다란 범주형이라고 볼 수 있음.
  • 하지만 같은 단어가 여러번 나타날 수도 있으니, 이를 카운팅 할 수 있음.

범주형 변수 인코딩

  • 범주는 일반적으로 숫자가 아님. 예를 들면 "빨간색","검은색","파란색" 등이다.
  • 제일 쉬운 방법은 숫자를 1씩 증가시키면서 매길 수 있을 거다. 하지만, 이렇게 하면 값의 크기가 의미가 생길 수 있다. 그러므로 다른 방법을 찾아 보자.

원-핫 인코딩

  • 00001000, 1000000, 00100000 와 같이 여러개 중에 한개만 켜지는거(아니깐 생략)

더미 코딩

  • 원-핫 인코딩은 1개는 무조건 1이어야 하나, 더미 코딩은 모두 0 인게 있음.
  • 모두 0 인게 기준 범주.(기준 범주와 다른 애들과의 차이를 쉽게 볼 수 있다.)

이펙트 코딩

  • 더미 코딩의 모두 0 인것이, 모두 -1로 되는 것
  • 뭔 말인지 모르겠으니깐 통과. ㅎ.

범주형 변수 인코딩의 장단점

  • 원-핫 인코딩, 더미 코딩, 이펙트 코딩의 처리 방법은, 범주의 수가 매우 커지면 성능이 급격히 떨어진다. 수가 매우 많은 범주형 변수를 처리하기 위해서는 또 다른 전략 필요.

대규모 범주형 변수 처리

  • 피처 해싱 : 문자열, 숫자등을 해싱해서 변환, 매핑. 단점 : 원본 피처에 대한 정보가 사라져 더 이상 해석하기 어려워짐.
  • 빈 카운팅 : 어려우니깐 생략

요약

  • 책에 잘 정리 되어 있으니, 책 참고.

6장 차원 축소: PCA로 데이터 패케이크 납잡하게 만들기

  • 주성분 분석(PCA, Principal Component Analysis), 피처 차원 축소
  • 어려운건 다 생략하고...

직관

  • 차원 축소 : 핵심 정보는 유지하면서, '쓸모없는 정보'를 제거하기 위한 것
  • 수학적으로 새로운 피처 공간에서 데이터포인트들의 분산이 최대로 되게 한다.

수식 유도

  • 생략

PCA의 활약

  • MNIST 데이터중 8x8 로되어 있는 저해상도 데이터는, 64차원의 데이터를 갖는다.
  • pca_tranformer = PCA(n_componets=0.8)로 하면, 전체 분산의 최소 80%를 설명하는 수준에서 자동 선택.
  • 화면에 출력 결과, 3차원의 데이터만으로 비슷한 숫자들을 가깝게 그룹지은것을 볼 수 있음.

화이트닝과 ZCA

  • 모르겠으니깐 생략.

PCA의 고려사항과 한계

  • 차원 축소를 위해 PCA를 사용할 때는 얼마나 많은 주성분(k)을 사용할 것인지를 확인해야 한다.
  • PCA는 변환이 매우 복잡함. 결과 또한 해석이 어려움. 계산 비용도 많이 듬. 데이터 포인트나 피처의 수가 매우 많다면 수행하지 않는것이 좋다.
  • 데이터가 스트리밍으로 들어오면 PCA를 수행하기 어려움 ( 지금까지의 값으로 분산이 크도록 해 두었는데, 새로 들어온 값이 그것을 깰 수도 있다. )
  • 카운트에 사용하지 않는것이 좋다. 이상치(아웃라이어)들이 있기 때문에, 상관 관계가 쉽게 깨질 수 있다. 사용하고 싶다면, log등을 사용해서 처리하는 방법을 찾거나 하면 된다.

사용 예

  • PCA 변환은 데이터에서 정보를 제거한다. 따라서 이 정보로 모델을 학습할 때는 계산 비용이 적게 들지만, 정확도는 떨어질 수 있다.
  • PCA를 사용한 멋진 애플리케이션 : 시계열 데이터의 이상 탐지, 재무 모델링, 주가의 상관관계 패턴...(모르겠음 ㅋ )

요약

  • PCA에 대해 기억해야 할 두가지 핵심
    • 메커니즘 : 선형 투영
    • 목표 : 투영된 데이터의 분산 최대화
  • PCA는 모델 중심 피처 엔지니어링의 한 예. 분산이 데이터가 가지고 있는 정보를 적절하게 표현한다는것.
  • PCA는 잘 알려진 차원 축소 기법. 하지만 큰 계산 비용이 들고 결과물을 해석할 수 없다는 제약.
  • PCA 특히 피처들 사이의 선형 상관관계가 있을 때 전처리 단계로써 유용.

7장 k-평균 모델 스태킹을 통한 비선형 피처 생성

  • PCA는 데이터가 평평한 팬케이크 모양의 선형 부분 공간에 있을때 유용
  • 데이터가 휘어진 곡면으로 이뤄진(스위스 롤 같은) 경우. 결국은 2D 평면이 둥글레 말려 3D로 된 것임.
  • 피처 엔지니어링의 목적은 피처의 차원을 낮게 만드는것이 목적이 아니라, 과제를 수행하기 적합한 피처를 얻는 것
  • 가까이 있는것들을 모으는 클러스터링 방법을 사용할 수 있다.
  • 클러스터의 수가 원래의 피처 수 보다 작으면, 차원이 축소 되었다고 볼 수 있다.

k-평균 클러스터링

  • 비슷한 공간상에 놓여진 데이터를 그룹화 하는것.
  • 비지도 학습
  • 유클리드 기하학으로 두 점 사이의 거리를 측정 하여 근접성을 측정한다.
  • k-평균은 각 데이터 포인트가 오직 하나의 클러스터에만 할당되는 하드 클러스터링
    from sklearn.cluster import KMeans
    # 10개의 클러스터로 나눈다.
    clusters = KMeans(n_clusters=10, ramdom_state=1).fit_predict(numpy_array);

곡면 분할로서의 클러스터링

  • 스위스 롤 형태의 데이터를 KMeans 클러스터링으로 할때 k가 너무 작으면 클러스터가 잘 나눠지지 않는다.

분류를 위한 k-평균 피처 생성

  • 목표 변수를 사용하면, 그 값을 기준으로 클러스터링을 할 수 있다.(?)
  • 생략

장단점과 몇 가지 사항들

  • 생략

8장 피처 생성 자동화: 이미지 피처 추출과 딥러닝

  • 예전 방식에 대한 설명과, 딥러닝에 대한 설명을 모두 진행

가장 단순한 이미지 피처(그리고 이것이 동작하지 않는 이유)

  • 이미지를 검색하려고 한다마녀, 이미지 데이터 베이스에서 비슷한 이미지를 찾아야 한다.
  • 단순히 이미지에 있는 개별 픽셀 색상 값을 가지고 처리 할 수 없음. 이미지 간의 차이를 어떻게 계산 할 것인지를 결정하는것이 핵심

수동 피처 추출: SIFT와 HOG

  • 이미지 그래디언트(인접픽셀과의 차이)를 활용해서 벡터를 구한다.
  • ... 생략 ...

심층 신경망으로 이미지 피처 학습

  • Fully Connected Network, Convolution, ReLU, Normalization, Max Pooling 설명
  • AlexNet 설명
  • 이 분야에서의 엄청난 발전에도 불구하고 이미지 피처 생성은 아직 과학보다는 예술에 가깝다.
  • 10년 전에 사람들은 이미지 그래디언트, 테두리 탐지, 방향 탐지, 공간 단서, 스무딩, 정규화 등을 사용해 피처 추출을 수작업으로 진행했다.
  • 요즘은 딥러닝 아키텍트가 동일한 아이디어를 캡슐화 하는 모델을 작성하기는 하지만, 파라미터들은 학습용 이미지를 통해 자동으로 학습된다. 마법은 여전히 존재하며, 단지 모델의 더 깊숙한 곳에 추상화돼 숨어있을 뿐이다.

9장 다시 피처로: 학술 논문 추천 시스템 구축

  • 실제 예제를 사용해서 데이터 피처링을 해 보자

항목 기반 협업 필터링

  • 생략

첫 번째 단계: 데이터 가져오기, 정제하기, 피처 파싱하기

  • 단순 두 개의 피처만 사용해서 항목 유사도(코사인유사도)를 구했는데. 시간이 엄청 오래 걸렸다.
  • 데이터 갯수가 너무 많으니 계산하는데 시간이 너무 오래 걸림.
  • 현재의 방식은 반복적인 엔지니어링을 위해서 너무 느리다.

두 번째 단계: 피처 엔지니어링과 더 똑똑한 모델

  • 출간년도를 비닝으로 처리. 10년 단위로 비닝을 해서 피처 공간을 156에서 19로 줄임.
  • 데이터 프레임을 희소 배열로 변환
  • 위와 같이 하면 누락된 데이터가 매우 많을 것이다. 더 많은 정보를 가진 피처를 선택할 수 있는지 살펴 봐야 한다.

세 번째 단계: 추가 피처 = 추가 정보

  • 기존의 피처에서 추가로 초록(abstract)과 저자(authors)를 추가 할 수 있음
  • 초록(abstract)이나 제목의 경우 명사구나 stem(어근)을 구해서 처리 할 수도 있다.
어제 워크샵으로 워터파크ㅡ오션월드에 갔다 왔었다.

몸이 뻐근하여 지금은 찜질방.
오기전에 회사에 들려 와서 읽을 책을 몇권 골라왔는데 그 중에 한권.

samsung | SHW-M250S

법정스님의 산문집 홀로 사는 즐거움.

책을 펼쳐서 한편을 읽고서는 이내 곧 책을 덮는다.

이 책 첫번째 글인 "산방에 비친 달빛에 잠이 깨어"에서는 법정스님이 자연에서 느낀점을 적어 두었는데, 이곳에서 읽는것은 정말로 맛이 나지 않는다. 에어컨 돌아가는 소리에 사람들 소리...

이제까지 읽을 기회를 잡지못하고 있었는데, 이렇게 허무하게 이 책을 이런곳에서 읽어 버릴순 없지.

내일 적당히 운치 있는곳에 앉어 느긋하니 읽어 보아야겠다.

꼬리.
폰에서 글쓰기 어렵구나.
  1. 닉쑤 2011.07.11 13:28 신고

    저 보내주심 되겠네요~
    딱 읽기 좋은 환경이에요ㅎ

백만년만에 글을 쓰게 되었는데, 글이 책리뷰라서 좀 안타깝긴하다.
네이버 카페 코드인(http://codein.co.kr)에서 책 리뷰를 해 줄 리뷰어를 모집했고, 그래서 얼른 냉큼 후딱 신청해서 당첨이 되었다.

리뷰하려고 하는 책은 "안드로이드 프로그래밍 정복 1권" 이다.

안드로이드프로그래밍정복.1(개정판)SDK2.3진저브레드를적용한안드?
카테고리 미분류
지은이 김상형 (한빛미디어, 2011년)
상세보기


회사에서 하는 일이 Office 프로그램개발인데, Java를 이용해서 만들어야 했으므로 Java swing을 기준으로 개발을 해 왔었다. 하지만 시대의 급변에 따라서 모바일 환경이 중요해졌고, 안드로이드쪽을 공부해야 했었다. 그 때 마침 리뷰어를 모집하는 글이 눈에 띈 것이다.


보통의 프로그래밍 개발 관련 자료들은 인터넷에 널려 있다. 이러한것들이 책으로 출간되는 이유는 무엇일까? 개인적으로 몇가지는 꼽자면 아래와 같다.

1.
첫번째 이유는 튜토리얼은 영어로 되어 있다는 것이다. 아무리 영어를 잘 한다고해도 한글로 되어 있는 문서보다 영어를 읽는데는 어려움이 따른다. 물론 영어 단어의 의미를 정확하게 파악하기도 힘들다.

2.
두번째 이유는 정제되어 있는 내용을 쉽게 읽을 수 있다는 것이다. 인터넷에 떠다니는 내용들은 정확한 내용이 아닐 수도 있고, 아예 잘못된 내용들이 맞는것처럼 돌아 다니는 경우도 있다. 물론 경험적인 측면에서 내려진 답들은 책에 나오지는 않을 수 있지만, "경험적"이라는 의미가 "정확한"이라는 의미가 되지 않는것은 확실히다.

3.
세번째 이유는 좀 더 읽기 쉽다는 것이다. 아무리 좋은 내용이라도 모니터로 보는것과 종이로 보는것이 눈의 피로도에서도 다를 것이다. 그리고 책을 한장 한장 넘겨가면서 읽는것, 그리고 몇번씩 줄을 그어가면서 읽는것, 중요한 내용을 표시하기 위해서 책의 한쪽 끝을 접어 두는것 등의 아날로그적 감성도 한 몫한다.

물론 다른 의견을 가지고 있는 사람도 있으리라.



이전에도 개인적인 궁금함으로 몇권을 안드로이드 관련 책을 따로 구매해서 읽었는데, 그리 만족스럽지는 않았다. 인터넷에 있는 튜토리얼 보다도 못한 책들도 읽었던 것으로 기억한다. 차라리 영어로 되어 있는 인터넷 사이트를 보는게 더 편했을법한 책들도 읽어 보았다.

그런 면에서는 지금 리뷰를 하는 책은 이제까지 읽었던 책 중에서는 제일 좋다고 생각한다. 원래 출간 될 때에는 한권으로 되어 있는 책이었는데, Android SDK 2.3이 나오고 책의 내용도 더 보강을 해서 1권과 2권으로 나누어서 총 2권으로 다시 출간 되었다.



1권은 개발환경 설정부터 Android 개발에 관련된 전반적인 내용이 나온다.

이클립스 설치부터 ADT, DDMS 사용법까지 개발환경을 스크린 샷과 함께 제공해 준다. 현재 Android SDK 3.0이 나오지 않은 상태에서는 책에 있는데로 하면 큰 무리는 없을 듯 하나, 환경 설치등은 인터넷에서 찾아서 최신환경에 맞추는것이 좋아 보인다.

그리고 안드로이드의 기본인 액티비티, 레이아웃, 뷰, 메뉴 관리, 리소스 관리 등이 나온다. 이는 안드로이드에서 기본이 되는 내용이므로 Android를 처음 접하시는 분들은 반드시 읽어보고 알아야 하는 내용이다. 원래 기본기가 중요한거다.


2권에서는 고급스러운 주제들이 나온다.

실무에서 사용하기 좋은 정보들은 2권에 있다. 1권에 있는 내용들은 기초를 다루고 있기 때문에 자바에 경력이 충분하고 본인이 프로그래밍적인 센스가 있다고 생각하는 사람이라면, 기본기는 인터넷으로 튜토리얼을 찾아서 읽고 2권을 구매하여 읽는것이 도움이 될 듯하다.

2권에서는 렌더링, 애니메이션, 네트워크, 미디어 처리에 대해서 나오며, Hello World 프로그램만 짜고 싶지 않다면 2권을 반드시 읽어 보는것이 좋을 듯 하다.



처음에는 이 책을 보고 인터넷에서 떠돌아 다니면서 보았던 안드로이드 관련 정보들을 머릿속에서 새롭게 정리하다는 생각으로 읽어 보았다. 1권에서는 안드로이드 기본에 대해서 잘 나와 있기 때문에 도움이 되었다. 그리고 "이제 실무에 쓸 수 있는 내용을 읽어 볼까~"했는데 정작 고급주제들은 2권에 있다고 한다.

처음 책을 받았을때는 "정복"시리즈답게 한권에 모두 있을 줄 알았는데, 알고보니 내가 리뷰를 하게 된 책은 1권이었던 것이다. -_- 책을 다 읽고 나서 책표지에 있는 "1" 이라는 숫자를 발견하다니 ;;;


실무에서 사용할 고급스러운 주제는 2권에 있으니 책을 구매하실 때는 이러한 점에 유의해야 한다. 처음부터 탄탄한 기초를 쌓고 싶다면 1권부터 사서 읽으시고, 이미 기본적인 내용을 알고 있으시다면 2권부터 시작해도 큰 무리는 없을 듯 하다.

다음 주말즈음에는 2권을 구매하여 읽어 볼 생각이다. 고급 주제중에 일부는 인터넷에서 자료를 찾기 힘든 내용도 있다. File이나 CP 같은 경우에는 인터넷에서 자료를 좀 찾을 수 있었지만, 서페이스뷰 같은 경우에는 쉽게 찾기 힘든 분야이기도하고, 잘 설명 된것도 못 보았다. ( 잘 설명된 "한글"페이지가 있다면 알려..굽신굽신..)


여하튼 1권만 읽었으니 1권만 평가를 한다면, 이제까지 읽어 보았던 안드로이드 관련 책 중에는 제일 잘 만든 책임은 확실하다.
  1. 닉쑤 2011.04.03 05:52 신고

    리뷰 솔직담백하게 잘 쓰시는데요? ㅋ

    별일 없으시죠? ^^

    아, 저 4월 20일날 한국가요. 움하하!

    • Chan 2011.04.03 21:17 신고

      오~ 한국에? 좋은 소식 가지고 오길 빌께. ㅎㅎ

  사라진 이틀  요코야마 히데오 지음
2003년 일본 미스터리 베스트 1위에 오른 작품으로 50만부 이상 판매되었으며, 2004년 1월에는 영화로 제작되어 큰 반향을 일으킨 바 있다. 원제는 '半落ち'으로 용의자가 용의 사실의 일부만 자백하는 상태를 말한다.

요즘에는 추리소설 위주로 계속 읽고 있는데, 뽐뿌에서 책이 몇권 올라 왔다.
그중에서 재미있다고 해서 구매해 본 책.

글의 흐름이 재미있는 구조로 되어 있다. 읽는것 자체가 재미있다.
혹시나 다음에 읽을 사람들이 온전하게 재미를 느끼게 해 주기 위해서
굳이 간단한 초반 도입부 소개는 하지 않고 싶다.

그래서 책의 내용을 좀 더 재미있고 쉽게 읽을 수 있도록 도와줄만한
역자가 쓴 말을 일부 옮기고 포스팅을 마치고자 한다.

이 소설의 작가 요코야마 히데오는 추리소설 작가로 널리 알려져 있다. 그러다 보니
이 소설 역시 추리소설로 알려져 있다. 하지만, 소재를 중심으로 놓고 장르를 생각한다면,
이 소설은 추리소설이라기보다는 추리소설의 형식을 빌린 사회소설에 가깝다.
작가의 관심은 문제의 해결보다는, 문제가 던진 파문에 의해 드러나는 사회의 부조리와
아픈 구석들을 보여주는것에 초첨을 맞추고 있다.

사회소설이라 하여 메시지 전달에만 급급할 것으로 생각하면 오산이다.

....
번역을 할 때마다 절감하는 것이지만, 번역에서 충돌하는 것은 우리말과
외국어라기보다는 오히려 우리의 사회문화와 외국의 사회문화라는 사실이다.
....

일본은 전쟁으로 점철된 기나긴 전국시대를 지나왔다. 전장에서 사람이 죽는 일은
아주 흔하다.... 죽음 자체보다는 어떤 모양의 죽음인가에 더 큰 관심을 기울였으며,
일본 특유의 죽음의 미학, 자살의 미학등도 거기서 비롯되었다......

책을 한권 선물 받았다.

  그건, 사랑이었네  한비야 지음
'바람의 딸' 한비야가 2009년 7월, 8년 6개월간 긴급구호 팀장으로 일해온 국제 NGO 월드비전을 그만두며 펴내는 책. 이번 책에서 한비야는 자신만의 공간인 집으로 독자들을 초대하여 따뜻한 차 한 잔을 나누면서 서로의 고민을 이야기하고 현장에서의 자신을 돌아본다. 한비야의 맨얼굴이 드러나는 책이다.

책 선물을 받는것은 정말 오랜만이다.

원래 에세이류를 즐겨 읽는 편이 아니다.
하지만, 적극적인 추천. 그리고 선물까지~!

책의 내용은 정말로 그냥 에세이다.
있었던 일, 자기의 생각을 주욱~ 적은 글이다.
( 구호현장에서 있었던 일, 자신이 추천하는 책 등 )

이 책을 쓰는 내내 행복했다. 참말이지 늦은 오후 여러분을 우리 집
에 초대해서 따끈한 차 한잔을 앞에 두고 도란도란 이야기를 나누는
기분이었다. 그래서 일까. 글을 쓰다보니 예상치 않았던 이야기까지
줄줄이 딸려 나왔다. 쑥스럽고 어색해서 여태껏 한 번도 말하지 못했던
속마음과 소소한 속사정과 내밀한 신앙 이야기 등 정말 이런 것까지
말해도 되나 할 정도로 너무나 편안하게 나를 털어 놓았다.
 - 책 앞표지 뒷편

위에 한비야씨가 말했듯이, 글의 한 챕터가 종교적인 글로 가득하고,
또 글의 중간중간에도 자주 등장한다. ( 한비야씨는 천주교 교인이시다. )
처음에는 그에 대한 거부감이 들었지만, 책 내용은 정말로 추천할 만 하다.

특히 구호현장에서 있었던 일들은 눈시울이 붉어질만큼 슬프고, 감동적이다.

오랜만에 다른 사람에게 강력 추천할만한 책.
추천해 주시고, 선물까지 해 주신 분에게 감사를...

  1. 버리 2010.01.21 10:30 신고

    저도 한비야님 책을 거의 다 읽을만큼 좋아하는데
    이번책은 아무래도 한비야님을 지탱하게 해주는 종교적인 내용이
    많이 들어있어서 그런지 다른 책들보다는 조금 감흥이 없었다는..

    그런거에 대해 부담없는 분들께는 적극 추천해줄수있는 책같아요.

    읽은 지 조금 오래되어 잘은 기억안나지만
    힘들고 쓰러져있을때 일어나라고만 외치기 보단
    잠시 쉬게 해주는것도 하나의 위로라고 했던 구문이 참 인상깊었던 것같아요.. 오죽 힘들었으면 누워있겠냐는...

  2. 토끼 2010.01.23 20:53 신고

    나도 이책 독후감 올렸는데 ㅋ 블로그에.. 책은 잼있지. 이책보고 바람시리즈도 샀는데 아직 봉지도 안뜯었어

    • Chan 2010.01.24 22:34 신고

      ㅎㅎ. 바람시리즈도 읽어봐~ ㅎㅎ

    • 토끼 2010.01.26 00:23 신고

      왠지 그 책읽으면 또 해외로 뛰쳐나갈거 같은 기분이 ㅋ

천년의 금서
김진명 저 | 새움 | 2009년 05월






여름휴가와 어제새벽까지 읽은 책은 천년의 금서이다.
( 사실 어제 밤에 거의 다 읽었다고 볼 정도다. )
천년의 금서는 "무궁화 꽃이 피었습니다"를 쓴 김진명씨 작품이다.

김진명씨의 작품이 그렇듯이,
사실에 근거하지만 거기에 허구를 덧붙여서 이야기를 이끌어 간다.

주요내용은 대한민국에서 "한(韓)"이라는 글자는 도대체 어디서 왔나? 를
추적하는 내용이다. 물론 누군가가 죽고, 그 죽음을 따라서 추적하는 스토리다.
( 이런 소설에서 한명쯤 죽어주는건 당연하지 않은가? )



무궁화.. 는 잊고 "천년의 금서"를 보는게 좋을것 같다.

천년의 금서는
책이 달랑 한권이기도 하고,
조판 역시 작은거고.
글자 또한 크다.

그러니 이야기가 술술 흘러간다.
주인공은 매우 똑똑한 사람이고,
그리고 참으로 매우 쉽게 모든 문제를 해결해 나간다.
( 우연도 이런 우연이 있을 수 있나!! )

물론, 역사적인 사실과 우리나라의 긍지를 살리는것은 좋다.
하지만 소설이. 너무 술술 읽히는것은 문제가 있다고 생각한다.
( 긴장감이 느껴지는 곳은 마지막 부분 뿐 이랄까? )


아무튼 좀.. 실망했다.
그러므로 "무궁화..."는 잊고 책을 보는게 좋을것이다.
그 책에서 느껴졌던 긴장감은 전혀 찾아 볼 수 없다.
그러므로 기대하고 보지말라.

각종 온라인 서점사이트에서 서평을 보면
한국의 긍지가 느껴진다고 하지만,
물론 사실에 근거한 내용에 허구를 붙인거지만..

소설책이라면 당연히 재미가 있어야 하는것 아닌가?
( 이건 교과서나 사서삼경이 아니란 말이다. )

평:
너무 술술 흘러가는 스토리.
주인공은 천재며(물론 극중에서 똑똑하게 나온다.)
운도 무진장 좋다. ( 무려 단 한번의 실패도 하지 않는다. 세상에!! )

  1. 옷장수 2009.08.27 09:54 신고

    무궁화 꽃이 피었습니다. 재미있게 읽었던 책이었죠. 10년은 더 된 듯 OTL

    • Chan 2009.08.27 13:57 신고

      넹. ㅎㅎ.
      하지만, 천년의 금서는 실망 ;; 쩝..

  2. 용훈 2009.09.02 21:50 신고

    찬님 블로그 rss --> http://job11.co.kr/rss/rss.php?part=2 에 추가했습니다. ^^
    괜찮죠?

    • Chan 2009.09.03 10:09 신고

      헉.
      제 블로그가 IT RSS 목록에 들어갈만큼 좋은글인지 의문이네요 ^^;
      RSS는 공개 되어 있으니, 출처가 있다면 어떻게 사용하셔도 상관없겠습니다~ ㅎ

  3. 나미 2009.09.04 22:43 신고

    난 무궁화는 잊어라 라고 하길래
    무궁화꽃이 피었습니다 를 넘어설만큼 재밌다는 뜻인줄 알았는데.. ㅋ

올만에 집에 내려 왔다.

그래도 집이 참 편하구나~ ㅎㅎ


1. 밥 걱정을 안해도 된다.

2. 빨래 걱정을 안해도 된다.


우하하.


근데 집에 내려와도 마땅히 할 일이 없다는게 문제다.

읽은 책은 싸 들고 왔는데..

도서관에 가지 않으면 집에서 절대로 읽지 않고,

그렇다고 도서관까지 가자니 -_-; 귀찮고. 에효.


버스타고 왔다 갔다 하면서 읽어야지 한 것도,

올림픽 경기 본다고 -_- 책을 안 봤다. ㅎㅎ.


아무래도 -_- 돈만 버리는 짓일까?

사실 아직 읽지 않은 책이 무진장 많은데 말이다.

( 회사에도 택배로 책이 도착해 있을텐데 ;; 그건 언제 읽냐.. 흠. )



휴가 기간에

그냥 탱자탱자 놀지 말고 무언가 하나 해 보자 라는 생각이었는데,

결국

아무것도 못하고,

탱자탱자도 아니고,

어영부영시간은 지나가는구나.


아직까지 즐길 시간은 아닌 것 같은데.

짧은 시간이라도, 흘러가는 시간을 잡자.

  1. 옷장수 2008.08.16 11:58 신고

    꼭 제목이 군대에서 휴가 나온듯 하오

  2. seoeun 2008.08.16 12:07 신고

    휴가 때는 아무 생각없이 그냥 탱자 탱자 노는거에요~ 그게 휴가랍니다.

  3. 버리 2008.08.17 12:10 신고

    운동하세요.. 그럼 몸도 건강 마음도 건강..ㅋㅋ

    • Chan 2008.08.17 20:07 신고

      가서 먹고 눕고 먹고 눕고를 반복했다지요. ㅎㅎ

  4. 2008.08.18 11:47 신고

    서영이랑 놀면 휴가가 넘 짧아요 ㅋ

    • Chan 2008.08.18 14:21 신고

      기간 자체가 짧은것은 아니구요? ㅎㅎ ^_^;

  5. 용훈 2008.08.25 12:56 신고

    들린김에 구글 한번 클릭해드렸습니다. ^^

    • Chan 2008.08.26 00:37 신고

      그렇게 하면.. 안돼요~
      불법 클릭임. ㅋ.


  소프트웨어 컨플릭트 2.0 - 시대를 뛰어넘는 즐거운 논쟁  로버트 L. 글래스 지음, 박재호 외 옮김
바쁘게 돌아가는 소프트웨어 개발 업계에서 '늘 그래왔다'는 변명이란 이름으로 반복되는 오류를 한 번쯤 제거하고 싶었던 적이 있었다면 이 책에 귀 기울여 보자. 50년 실무 개발 경력자가 소프트웨어 개발 업계에 던지는 날카로운 비평과 시대를 뛰어넘는 논쟁의 세계로 여러분을 초대한다.



회사에 책을 신청해 구매 뒤 읽은 책이다.
이전에 소프트웨어, ... 개떡 ... ( Why software SUCKS...) 역시 신청해서 읽은책.

역사는 반복된다. ... 15년전에서 몇 발자국 벗어나지 못한 현재 상황을 바라보면서 심지어 절망을 느낄지도 모른다.

이 책은 1990년에 출판 되었다가 2006년에 재판되었다. 예전의 내용이 그대로 들어 있어서, 지금과는 맞지 않는 내용이 있지만 최근과도 거의 맞아 떨어지는 내용들이다. 저자는 예전의 글들에서 최근과 달라진 점, 혹은 최근에 다시 느끼고 있는 점을 각 장의 마지막에 몇페이지 추가해 두었다.


여전히 그렇듯이 읽었던 부분에서 줄 친 부분을 옮겨 적어 보도록 한다.

은총알은 없다.

1. 가능하다면 소프트웨어를 제작하지 말고 구매하라.
2. 점진적으로 소프트웨어를 제작하라.
3. 뛰어난 소프트웨어 설계는 뛰어난 설계자로 부터 나온다는 사실을 기억하라. 창의적인 소프트웨어 인재를 고용하고 양성하라.
..... 상호소통을 통해 서로 자극이 되는 만남의 기회를 제공하기 등을 제시한다.




가장 뛰어나고 명석한 두뇌들이 내 놓은 보고서

향수 십년동안 소프트웨어 생산성, 안정성, 직시성을 10배 이상 향상시킬 기술적 발전은 눈 씻고 찾아봐도 없다.
업계 실무에서 최고 수준과 평균 수준이 이렇게 차이가 나는 분야는 거의 없다.
진짜 문제는 기술이 아니다. 오늘날 정말로 심각한 문제는 관리다.

... 그래서 명세를 반복해서 조정하지 않고서는, 소프트웨어 시스템의 동작 요구사항을 정확히 내 놓지 못한 다고 믿는다. 오늘날에 구축되는 시스템은 머리속으로만 분석해서 전체 정황을 예측하기에는 너무나 복잡하다.




인지적 견해: 소프트웨어 설계를 보는 다른 시각

.... 강사가 모두에게 요구사항을 설명하자 마자, 내 급우 중 한명인 보잉사에서 온 똑똑하고 젊은 친구가 설계안을 내 놓았다. 당시 나는 문제조차 이해하지 못해서 고심하는 중이었는데 그 친구는 즉석에서 설계안을 떠 올렸던것이다! 그 때 나는 깨달았다. 설계는 마음속에서 번개처럼 떠오르는 무언가임을. 그리고 어떤 사람의 번개는 다른사람의 번개보다 훨씬 빠르다는 사실을.

프로그래밍에서 첫번째 단계는 상상이다. 일어날 일을 마음속으로 명확히 구체화 한다. 이와 같은 초기 단계에서 나는 연필과 종이를 사용한다. 진짜 그림은 마음속에 있기 때문에... 그저 끄적일 뿐이다.

어느 순간에 (설계가) 폴발적으로 떠올라서 머리 속에 모두 들어있다... 머리속에 온갖 생각이 들어 있어서 종이에 옮기지 못한다. 마음속으로 계속 고치기 때문이다.

설계자들이 무(無)에서 시작하는 경우는 거의 없다. 앞서 유사한 문제에 사용했던 해결책에서 가져온다는 뜻이다. 돌아 보면 에이다 수업에서 보잉사에서 온 젊은 친구가 내 기를 죽였던 방법이 바로 그것이다. 그는 유사한 문제 유형을 이미 풀어 보았고, 그래서 머리속에 잠정적인 해결책이 들어있었던 것이다!




소프트웨어 오류에 대한 단상

2. 사람 목숨이나 돈이 걸린 시스템의 소프트웨어는 소프트웨어 오류에 대비해서 오류 제거를 넘어선 주의를 기울여야한다. 오류가 없도록 아무리 노력하고 바란다고 해도, 제품은 여전히 오류가 있다는 가정하에 취급해야 한다.
3. 소프트웨어 오류 제거에서 가장 중요한 요소는(사실상 모든소프트웨어 제작에서 가장 중요한 요소는) 업무에 투입할 인력 선택이다. 우수한 인력은 우수한 해결책을 내놓는다. "나쁜" 인력은 훨씬 나쁜 해결책을 내 놓는다.



프로토타이핑에 대한 단상

두 논문의 실험 방식은 기본적으로 동일하다. 개발 팀 여럿을 대상으로 몇 팀은 생명주기 접근방법을, 다른 몇개 팀은 프로토타이핑 접근 방법을 사용해서 소프트웨어를 개발했다. 개발 후에는 명확한 기준에 의거하여 점수를 매겼다.
그렇다면 결과는 어땠을까? 이 질문에 대답하기 위해, 사용자들과 소프트웨어 개발 자들에 대한 인터뷰를 진행했다. 사용자들은 일반적으로 프로토타이핑으로 만든 제품이 사용하기 더 편하고 좀 더 정확하고 쓸만한 인터페이스를 제공했지만 기능면에서는 부족하다고 판단했다.

프로토타이핑을 어떻게 관리할까?... '대충 급조한' 첫번째 제품이 형편없는 최종 제품이 되어 버리지 않도록 만드는 방법은? ... 프레드 브룩스가 'The Mythical Man-Month'에서 "버릴 수 있도록 만들어라" 라고 말한지 십여 년이 넘었지만, 우리는 아직도 방법을 제대로 파악하지 못한 상태이다. 단지 프로토타이핑이 장래성이 있는 기술이라는 사실만은 안다.



-_- 빌어 먹을 -_- IE7 -_-
또 한참 써 두었는데 -_- 뻗어 버렸다. -_-;;;;
지금보다 3배는 더 많이 적었지만 -_-  그것도 2번씩이나!!!
걍 요까지만 -_-;;;


  1. iolo 2008.08.15 21:29 신고

    ㅎㅎㅎ
    그러니까 노트를 쓰라니까~.~

    책이나 좀 빌려주셈~

    • Chan 2008.08.16 11:34 신고

      푸하하~ 이제 쓸껍니다. ㅋㅋ
      노트가 대세~ ㅎㅎ

  2. 버리 2008.08.17 12:16 신고

    Thinkfreenote 쓰고 계시죠? ^^;;

    • Chan 2008.08.17 20:10 신고

      최신 포스트는 Thinkfree note로 작성된거랍니다. ㅋㅋ

+ Recent posts