페이지

2018년 2월 1일 목요일

1.1 학습의 종류

1.1 학습의 종류

1.1.1 지도 핫습
일반화 능력을 갖도록 하는 것

1.1.2 비지도학습


1.1.3 가화 학습
일반화 능력을 갖도록 하는 것

1.2 머신러닝 과업들

1.2.1 희귀(regression)
실숫값 함수를 표본점으로부터 근사하는 지도 학습 방식의 함수 근사 문제다.


1.2.2 분류
주어진 패턴을 식별하는 지도 학습 방식의 패턴 인식 문제다


1.2.3 이상 검출


1.2.4 클러스터링


1.2.5 자원축소

1.3 머신러닝의 접근법
머신러닝에는 다양한 계파가 있다. 이 절에서는 패턴 x의 유형  y를 예측하는 분류 문제를 예로 들어, 머신러닝의 주된 계파인 생성적 분류와 식별적 분류, 그리고 빈도주의 및 베이지안 접근법에서 기초가 되는 아이디어도 소개한다.

1.3.1 생성적 분류와 식별적 분류
패턴 x가 주어졌을  때 유형 y의 조건부 확률 p(y|x)가 최대가 되도록 하는 유형 y를 구할 수 있으면, 패턴 인식을 수행할 수 있다.



2018년 1월 24일 수요일

2. 지도 학습

2.1 분류와 희귀
지도 학습에는 분류(classification)와 희귀(regression)가 있습니다.

분류는 미리 정의된, 가능성 있는 여러 클래스 레이블(class label)중 하나를 얘측
이진 분류(binary classification): 두 개의 클래스로 분류
한 클래스를 양성(positive)클래스, 다른 하나를 음성(negative)클래스

다중 분류(multiclass classification): 셋 이상의 클래스로 분류

희귀는 연속적인 숫자, 또는 프로그래밍 용어로 말하면 부동소수점수(수학 용어로는 실수)를 예측하는 것
ex)어떤 사람의 교육 수준, 나이, 주거지를 바탕으로 연간 소득을 예측하는 것

출력값에 연속성이 있는지 여부로 휘귀와 분류를 구분할 수 있습니다.
연속성이 있으면 희귀
연속성이 없으면 분류

2.2 일반화, 과대적합, 과소적합

지도 학습에서는 훈련 데이터로 학습한 모델이 훈련 데이터와 특성이 같다면 처음 보는 새로운 데이터가 주어져도 정확히 예측할 거라 기대합니다. 모델이 처음 보는 데이터에 대해 정확하게 예측할 수 이/ㅅ으면 이를 훈련 세트에서 테스트 세트로 일반화(generalization)되었다고 합니다. 그래서 모델을 만들 때는 가능한 정확하게 일반화되도록 해야 합니다.

보통 훈련 세트에 대해 정확히 예측하도록 모델을 구축합니다. 훈련 세트와 테스트 세트가 매우 비슷하다면 그 모델이 테스트 세트에서도 정확히 예측하리라 기대할 수 있습니다. 그러나 항상 그런 것만은 아닙니다. 예를 들어 아주 복잡한 모델을 만든다면 훈련 세트에만 정확한 모델이 되어버릴수 있습니다.

가상의 예를 만들어 설명해보겠습니다. 초보 데이터 과학자가 요트를 구매한 고객과 구매의사가 없는 고객그의 데이터를이용해 누가 요트를 살지 예측하려 합니다. 그래서 관심없는 고객들을 성가시게 하지 않고 실제 구매할 것 같은 고객에게만 홍보 메일을 보내는 것이 목표입니다.

알고리즘이 새로운 데이터도 잘 측정하는 방법은 테스트 세트로 평가해보는 것밖에 없습니다. 그러나 직관적으로 보더라도(아마 수학적으로 볼때도) 간단한 모델이 새로운 데이터에 더 잘 일반화 될것이라고 예상할 수 있습니다. 만약 "50세 이상인 사람은 보트를 사려고 한다"라는 규칙을 만들었다면 이 규칙은 모든 고객데이터를 만족시킬 뿐 아니라, 나이 외에 자녀 수나 혼인 상태를 추가한 규칙보다 더 신뢰할 수 있습니다. 그렇기 때문에 우리는 언제나 가장 간단한 모델을 찾으려고 합니다. 초보 데이터 과학자가 했던것 처럼 가진 정보를 모두 사용해서 너무 복잡한 모덱을 만드는 것을 과대적합(overfitting)이라고 합니다. 과대 적합은 모델이 훈련 세트의 각 샘플에 너무 가깝게 맞춰져서 새로운 데이터에 일반화되기 어려울 때 일어납니다. 반대로 모델이 너무 간단하면, 즉"집이 있는 사람은 모두 요트를 사려고 한다"와 같은 경우에는 데이터의 면면과 다양성을 잡아내지 못할 것이고 훈련 세트에도 잘 맞지 않을 것입니다. 너무 가단한 모델이 선택되는 것을 과소적합(underfitting)이라고 합니다.

모델을 복잡하게 할 수록 훈련 데이터에 대해서는 더 정확히 예측할  수 있습니다. 그러나 너무 복잡해지면 훈련 세트의 가가 데이터 포인트에 너무 민감해져 새로운 데이터에 잘 일반화되지 못합니다.

2.2.1 모델 복잡도와 데이터셋 크기의관계

모델의 복잡도는 훈련 데이터셋에 담긴 입력 데이터의다양성과관련이깊습니다. 데이터셋에 다양한 데이터 포인트가 많을수록 과대적합 없이 더 복잡한 모델을 만들 수 있습니다. 보통 데이터 포인트를 더 많이 모으는 것이 다양성을 키워주므로 큰 데이터셋은 더 복잡한 모델을 만들 수 있게 해줍니다. 그러나 같은 데이터 포인트를 중복하거나 매우 비슷한 데이터를 모으는 것은 도움이 되지 않습니다.

2.3 지도 학습 알고리즘

2.3.1 예제에 사용할 데이터 셋

2.3.2 k-최근접 이웃
k-NN(k-Nearest Neighbors)알고리즘은 가장 간단한 머신러닝 알고리즘, 훈련 데이터셋에서 가장 가까운 데이터 포인트, 즉 '최근접 이웃'을 찾습니다.

2.3.3 선형 모델

희귀의 선형 모델
희귀를 위한 선형 모델은 특성이 하나일 땐 직선, 두 개일 땐 평면이 되며, 더 높은 차원(특성이 더 많음)에서는 초평면(hyperplane)이 되는 희귀 모델의 특징을 가지고 있습니다.

선형 희귀(최소제곱법)
선형 희귀(linear regression) 또는 최소제곱법(OLS, ordinary least squares)은 가장 간단하고 오래된 희귀용 선형 알고리즘입니다. 선형 희귀는 예측과 훈련 세트에 있는 타깃 y 사이의 평균제곱오차(mean squared error)를 최소하하는 파라미터 w와 b를 찾습니다. 평균제곱오차는 예측값과 타깃값의 차이를 제곱하여 더한 후에 샘플의 개수로 나눈 것입니다. 선형 희귀는 매개변수가 없는 것이 장점이지만, 그래서 모델의 복잡도를 제어할 방법도 없습니다.








2018년 1월 22일 월요일

1.7 첫 번째 애플리케이션: 불꽃의 품종 종류

붓꽃의 품종을 정확하게 분류한 데이터를 가지고 있으므로 지도 학습
몇 가지 선택사항(붓꽃의 품종) 중 하나를 선택
분류(Classfication), 출력될 수 있는 값(붓꽃의 종류)들을 클래스(class)
붓꽃 하나 에 대한 기대 출력은 꽃의 품종, 즉 품종을 레이블(Label)

1.7.1 데이터 적재


1.7.2 성과 측정: 훈련 데이터와 테스트 데이터
이 데이터로 머신러닝 모델을 만들고 새로운 데이터의 품종을 예측 하러 합니다. 하지만 만든 모델을 새 데이터에 적용하기 전에 이 모델이 진짜 잘 작동하는지 알아야 합니다. 다시 말해서 우리가 만든 모델의 예측을 신뢰할 수 있는 지 알아야 합니다.

불행이도 모델을 만들 때 쓴 데이터는 평가 목적으로 사용할 수 없습니다. 모델이 훈련 데이터를 그냥 전부 기억할 수 있으니 훈련 데이터에 속한 어떤 데이터라도 정확히 맞출 수 있기 때문입니다. 이렇게 데이터를 기억한다는 것은 모델을 잘 일반화 하지 않았다는 뜻입니다.(다른 말로는 새로운 데이터에 대해서는 잘 작동하지 않는다는 것입니다.)

모델의 성능을 측정하려면 레이블을 알고 있는 (이전에 본 적 없는) 새 데이터를 모델에 적용해 봐야 합니다. 이를 위해 우리가 가지고 있는 레이블된 데이터(150개의 붓꽃 데이터)를 두 그룹으로 나눈ㅂ니다. 그중 하나는 머신러닝 모델을 만들 때 사용하며, 훈련 데이터 혹은 훈련 세트(traning set)라고 합니다. 나머지는 모델이 얼마나 잘 작동하는지 측정하는 데 사용하며, 이를 테스트 데이터, 테스트 세트(test set)혹은 홀드아웃 세트(hold-out-set)라고 부릅니다.

scikit-learn은 데이터셋을 섞어서 나눠주는 train_test_split함수를 제공합니다. 이 함수는 전체 행 중 75%를 레이블 데이터와 함께 훈련 세트로 뽑습니다. 나머지 25%는 레이블 데이터와 함께 테스트 세트가 됩니다. 훈련 세트와 테스트 세트를 얼만큼씩 나눌지는 상활에 따라 다르지만 전체의 25%를 테스트 세트로 사용하는 것은 일반적으로 좋은 선택입니다.

1.7.3 가장 먼저 할 일: 데이터 살펴 보기
시각화는 데이터를 조사하는 아주 좋은 방법.산점도가 그중 하나입니다. 산점도는 데이터에서 한 특성을 x축에 놓고 다른 하나는 y축에 놓아 각 데이터 포인트를 하나의 점으로 나타내는 그래프. 아쉽게도 컴퓨터 화면은 2차원이라 한 번에 2개(혹은 3개)의 특성만 그릴 수 있습니다. 따라서 이 그래프는 3개 이상의 특성을 표현하기 어렵습니다. 대신 모든 특성을 짝지어 만드는 산점도 행렬을 사용할 수 있습니다.
이 그래프를 그리려면 먼저 NumPy 배열을 pandas의 DataFrame으로 변경해야 합니다. pandas는 산점도 행렬을 그려주는 scatter_matrix함수를 제공합니다.

1.7.4 첫 번째 머신러닝 모델: k-최근접 이웃 알고리즘
k-최근접 이웃 알고리즘에서 k 는 가장 가까운 이웃 '하나'가 아니라 훈련 데이터에서 새로운 데이터 포인트에 가장 가까운 'k개'의 이웃을 찾는다는 뜻

scikit-learn의 모든 머신러닝 모델은 Estimator라는 파이썬 클래스로 각각 구현되어 있습니다. k-최근접 이웃 분류 알고리즘은 neighbors 모듈 아래 KNeighborsClassifier 클래스에 구현되어있습니다. 모델을 사용하려면 클래스로부터 객체를 만들어야 합니다. 이때 모델에 필요한 매개변수를 넣습니다.
KNeighborsClassifier에서 가장 중요한 매개변수는 이숫의 개수입니다.

fit 메소드는 knn 객체 자체를 반환합니다.(그리고 knn객체 자체를 변경시킵니다.) 그래서 knn 객체가 문자열 형태로 출력됩니다. 이 출력에서 모델을 생성할 때 사용한 매개 변수를 볼 수 있습니다. 거의 모든 매개변수가 기본값이고 n_neighbors=1은 우리가 지정한 값입니다. scikit-learn 모델들이 많은 매개 변수를 가지고 있지만 대부분 성능을 최적화하거나 특별한 목적으로 사용합니다.

1.7.5 예측하기

1.7.6 모델 평가하기


2018년 1월 20일 토요일

1. 데이터 시각화 개념 잡기

데이터(Data)와 정보(Information), 지식(Knowledge)의 차이의 이해 와 데이터 시각화 연관성
- 데이터와 정보, 통찰의 차이
- 정보로 부터 지식으로서의 변환, 더 나아가 통찰까지
- 데이터의 수집, 처리, 조직화
- 데이터 시각화의 역사
- 시각화된 데이터가 어떻게 의사 결정에 도움이 되는가?
- 시각화의 구성

1) 데이터, 정보, 지식, 통찰

- 데이터
데이터는 디지털 형태를 가진, 별개으 ㅣ객관적 사실들, 여러 다른 방법으로 조직되고 배열될 수 있는 기본구성 요소로써, 비즈니스 과정에서 만나는 여러 문제 해결의 실마리가 될 수 있는 유용한 정보를 제공해 준다.

데이터는 매우 단순할 수도 크지 않을 수도 있고, 조직화되지 않을 수도 있다. 이런 개별적 데이터들은 그 자체로 의미를 가지지 못할 뿐만 아니라 더 중요한 데이터 간의 구조나 관계가 명시되지 않았기 때문에 의사 결정에 그대로 사용될 수 없다.

- 정보
정보는 비즈니스 문제를 해결하기 위한 목적으로 가공, 처리된 데이터이다. 데이터 간에 관계나 연관성을 부여함으로써 정보가될 수 있는데, 이런 연관성은 데이터에 문맥이나 배경을 부여함으로써 얻어질 수 있다. 데이터의 배경 정보는 데이터에 대한 질문에 답할 수 있게 하기 때문에 유용하다.

- 지식
지식은 인간이 정보를 이해하고조직화할 때 드러나게 되고, 의사 결정을 이끄는 데 사용된다. 지식은 데이터, 정보일 뿐만 아니라 경험을 통해 축적된 기술들도 포함하며 적절한 의사 결정을 내리는 능력, 그것을 실행하는 능력으로 이뤄진다.

지식의 필수적 구성요소인 '데이터의 연결'을 통해 각 정보 조각들 간의 상대적 중요성을 이해할 수 있게 된다. 과거의 결과와 비교함으로써, 패턴을 발견해 냄으로써 더 이상 문제를 처음부터 풀어낼 필요가 없게 된다.
지식은 점점 증가하는 방향으로 변하게 된다. 특히 정보가 재배열되거나 다시 조직화될 때, 혹은 연산 알고리즘이 변경되었을 때 변한다. 지식은 데이터로부터 추출된 과거 정보에의해 계산되는 알고리즘의 결과를 가림키는 화살곽 ㅏㅌ다. 지식 역시 그 결과들과 시각적으로 상화작용하며 얻어진다는 많은 예가 있다. 이렇게 지식은 과거에 기반한 반면에 통찰은 미래로 가는 길을 열어준다.

- 데이터 분석과 통찰
분석은 통찰을 이끌어 낼 수 있는 데이터들 간의관계를 결정짓는 수학적 알고리즘에 달려 있다. 통찰을 이해하기 위한 한 가지 간단한 방법은 유추를 고려하는 것이아. 데이터에 구조가 없거나 비즈니스와 잘 정렬되지 않았을 경우에, 유추는 데이터를 좀 더 구조적 형태로 바꿔주고 더욱 비즈니스 목ㄹ표와 가깝게 정렬되게 함으로써, 더 명확하고 깊이 이해할 수 있게 해준다. 통찰은 혁신적 결과를 가져주는 '유레카'의 순간이다. 한 가지 주의할 것은 분석과 비즈니스 인텔리전스를 혼동해선 안 된다. 분석은 예측 능력을 포함하는 데 반해 비즈니스 인텔리전스는 과거 데이터에 기반한 결과를 제공한다.

분석은 대개 데이터의 넓은 범위에 적용되며, 이런 이류로 내부적으로 혹은 외부적으로 데이터 협업이 매우 빈번하게 일어난다. 어떤 비즈니스 패러다임에서는 대규모의 데이터 셋 모음에서의 협업은 오로지 내부적으로 일어나다고 하지만 대부분의 경우 퍼즐을 갖추거나 각각의 점들을 연결하는 데에 있어 외부적 연결이 도움을 준다.ㅣ 가장 많이 사용되는 외부 데이터 소스 두 가지는 소셜 미ㅣㄷ어와 소비자 기반 데이터이다.

- 데이터의 변환
데이터는 다양한 카테고리가 있는데, 그 중에 과거 성능 데이터, 실험 데이터, 벤치마크 데이터가 있다. 과거 성능 데이터와 실험 데이터는 꽤 명백한 데이터인데 반해, 벤치마크 데이터는 두 개의 다른 항목이나 제품을 기준에 따라 측정, 비교해 얻은 데이터이다. 데이터가 정보로 변환돼 더 처리를 거치게 되면, 문제 해결에 사용된다.

- 데이터, 정보로의 변환
데이터에서 정보로의 변환은 수집, 처리, 조직화 과정을 포함하게 된다.
수집된 데이터는 어떤 처리와 조직화 과정을 필요로 하며, 그 결과 구조, 모델 혹은 패턴을 가지게 될 수도 있고, 그러지 않을 수도 있다. 그러나 최소한 이 과정을 통해 데이터에 관한 질문에 대한 답을 체계적으로 찾을 수 있다.

- 데이터 수집
데이터 수집은 시간이 걸리는 과정이다. 그래서 회사들은 데이터 수집을 자동화하기를 원한다. 그러나 사람이 직접 데이터를 수집하는 일이 아직까지는 일반적이다. 현대의 자동화 과정을 통한 데이터 수집은 센서와 같은 입력 장치들을 사용한다. 데이터 자동으로수집하는 또 다른 방법은 문서나 로그 파일을 스캔함으로써 가능하다. 웹 기반 방법을 통해 데이터베이스에 저장된 데이터를 수집하게 수종으로 처리하는 방식도 정보로 변환될 수 있다. 데이터베이스로 저장되는 웹 기반 방식을 통해 데이터가 수집되도록 처리하는 방식은 비로소 데이터가 정보로 변화하게 한다. 최근 웹 기반의 협업환경은 향상된 통신과 데이터 공유를 통해 혜택을 얻고 있다.

- 데이터 전처리
데이터 클리닝(data cleaning), 데이터 통합(data integration), 데이터 정리(data reduction), 데이터 변환(data transformation)과 같은 몇 가지 데이터 처리 기법이 있다.
데이터 클리닝은 데이터가 일관성을 가지도록 하고노이즈를 제거하기 위해 적용
데이터 통합은 다양한 출처로부터 얻어진 데이터들이 데이터 웨어하우스(data warehouse)와 같은 잘 알려진 일관적 서식을 갖도록 병합하고 결합나다. 데이터 정리는 병합, 종합 그리고 불필요한 특성들을 제거함으로써 데이터 크기를 줄일 수 있다. 데이터 변환은 적은 범위 안으로 데이터를 축소하기 위해 상둉될 수 있고, 이를 통해 데이터의 처리와 시각화에 있어 정확성과 효율성을 향상시킬 수 있다.
이상 검출(anomaly detection)은 수집된 데이터 중 예상되는 형태나 규칙 안에 속하지 않는 이상한 데이터들을 식별하는 것이다.
변칙은 아웃라이어(outliers)나 노이즈(noise)로 알려져 있다. 옐르 들어 신호 데이터에서 이상한 특정한 신호는 노이즈로 여겨지면, 거래 데이터에서는 사기성 거래가 아웃라이어가 된다. 정확한 데이터 수집은 데이터의 무결성(integrity)을 유지하기 위해 필수적이다. 변칙 데이터들의 부작용만큼, 이면적으로아웃라이어들은 매우 중요한데, 예를 덜어 특히 사기성 보험 청구의 경우에 매우 유용하다.



The Pandas Series

The Pandas Series data structure is a one-dimensional, heterogeneous array with labels, We can create a Pandas Series data structure as follows:

- Using a Python dict
- Using a NumPy array
- Using a single scalar value

When creating a Series, we can hand the constructor a list of axis labels, which is commonly referred to as the index. The index is an optional parameter. By default, if we use a NumPy array as the input data, Pandas will index values by auto incrementing the index commencing from 0. If the data handed to the constructor is a Python dict, the sorted dict keys will become the index. In the case of a scalar value as the input data, we are required to supply the index. For each new value in the index, the scalar input value will be reiterated. The Pandas Series and DataFrame interfaces have features and behaviors borrowed from NumPy arrays and Python dictionaries, such as slicing, a lookup function that uses a key, and vectorized operations. Performing a lookup on a DataFrame column returns a Series. We will demonstrate this and other features of Series by going back to the previous section and loading the CSV file again:


2018년 1월 19일 금요일

The Pandas DataFrames

A Pandas DataFrame is a labeled two-dimensional data structure and is similar in spirit to a worksheet in Google Sheets or Microsoft Excel, or a relational database table. The columns in Pandas DataFrame can be of different types. A similar concept, by the way, was invented originally in the R programming language.A DataFrame can be created in the following ways:

- Using another DataFrame.
- Using a NumPy array or a composite of arrays that has a tow-dimensional shape.
- Likewise, we can create a DataFrame out of another Pandas data structure called Series.
- A DataFrame can also be produced from a file, such as a file, such as a CSV file.
- From a dictionary of one-dimensional structures, such as one-dimensional NumPy arrays, list, dicts, or Pandas Series.


NumPy arrays

After going through the installation of NumPy, it's time to have a look at NumPy arrays. NumPy arrays are more efficient than Python lists when it comes to numerical operations. NumPy array are, in fact, specialized objects with extensive optimizations. NumPy code requires less explicit loops than equivalent Python code. This is based on vectorization.

If we go back to high school mathematics, then we should remember the concepts of scalars and vectors.  The number 2, for instance, is a scalar. When we add 2 to 2, we are performing scalar addition. We can form a vector out of a group of scalars. In Python programming terms, we will then have a one-operation on two arrays. This concept can, of course, be extended to higher dimensions Performing an operation on two