기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

최근 글

[ML] 다중 클래스의 분류: SGDClassifier와 RandomForest

다중 클래스의 분류: SGDClassifier와 RandomForest 다중 클래스를 가진 인공 데이터셋에 대한 분류모델은 SGDClassifier() 를 적용합니다. 다중 클래스에 대한 분류 모델을 생성하는 알고리즘은 세가지로 구분할 수 있습니다. 다중 클래스를 직접적으로 조정하는 것으로 Random Forest Classifier 또는 naive Bayesn Classifier 를 적용합니다. 다른 두 가지는 Support vector machine classifier 또는 l inear classifier 와 같이 이진 분류 알고리즘을 적용합니다. 이진분류를 적용하기 위한 전략으로 one-versus-all(OvA, one-versus-the-rest) 와 one-versus-one(OvO) 를 사용합니다. OvA: [0, 1, 2, ..., 9] 에서, 0 검출기, 1 검출기 등을 생성하고 각 샘플에서 생성되는 결정함수로부터 클래스를 결정합니다. OvO: 0-1 구분하는 검출기, 0-2구분하는 검출기 등을 생성하므로 N개의 클래스가 존재한다면 $\frac{N(N-1)}{2}$의 검출기를 생성합니다. 대부분의 이진 분류 알고리즘의 경우 OvA가 선호됩니다. sklearn에서는 다중 클래스의 데이터에 이진분류 알고리즘을 이용할 경우 자동적으로 OvA가 실행됩니다. 그러나 support vector machine은 OvO가 실행됩니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") make_classification()

[pandas] pandas.to_datetime

DatetimeIndex 시계열 자료는 인덱스가 날짜 또는 시간인 데이터를 의미합니다. Pandas에서 시계열을 조정하기 위한 4개 개념과 그에 따른 클래스를 사용합니다. Class 설명 type 주요 메서드 DateTimes timezone를 가진 특정한 시간 DateTimeIndex to_datetime, pd.date_range Time delta 절대시간 TimedeltaIndex to_timedelta, timedelta_range Time span 시점과 연관된 주기를 가진 시간 간격 PeriodIndex Period, Period_range Date offset 달력 산술을 위한 상대시간기간 none DateOffset pandas에서 시계열 자료를 생성하기 위해서는 인덱스를 DateTimeIndex 자료형으로 만들어야 합니다. DateTimeindex는 특정한 순간에 기록된 타임스탬프( Timestamp ) 형식의 시계열 자료를 다루기 위한 인덱스입니다. 타임스탬프의 간격이 일정할 필요는 없습니다. DateTimeIndex 인덱스는 다음 함수를 사용합니다. pd.to_datetime(x, dayfirst=False, yearFirst=False, unit=None, origin='unix', utc=False) 날짜/시간을 나타내는 문자열을 자동으로 datetime 자료형으로 바꾼후 DateTimeIndex 자료형 인덱스를 생성합니다. x: integer, float, string, datetime, list, tuple, 1-d array, Series (날짜 데이터) dayfirst=True: 10/11/12 → 2012-11-10 yearfirst=True: 10/11/12 → 2010-11-12 unit: 시계열의 표시 단위(D, s, ms, um, ns)

[ML]엔트로피와 정보획득(Entropy & Infomation Gain)

엔트로피와 정보획득(Entropy & Infomation Gain) 정보와 엔트로피(Infomation & Entropy) 정보의 기본개념은 이벤트, 확률변수, 분포와 같은 항목에서 정보의 양을 정량화하는 것으로 확률을 사용합니다. 직관적으로 정보를 정량화레 대한 기본 아이디어는 대상 이벤트에 대한 불확실성(uncertainty)을 측정한다는 것입니다. 드문 이벤트은 발생할 확률이 낮으므로 불확실성이 증가합니다. 불확실성을 감소시키기 위해 많은 정보가 필요합니다. 매우 다양한 정보량의 높은 정보를 가집니다. 예를 들어 여러 샘플이 포함된 박스에서 특정한 샘플을 선택하는 사건에서 낮은 확률은 샘플의 종류가 많은 경우일 것입니다. 이러한 상황은 데이터의 impurity가 높은 상황입니다. 이것을 엔트로피(entropy)로 나타냅니다. 반대의 상황, 높은 확률,은 낮은 엔트로피를 보입니다. 정리하면 다음과 같이 나타낼 수 있습니다. 낮은 확률 이벤트 : 높은 정보(놀라움) 높은 확률 이벤트 : 낮은 정보(놀랍지 않음) 사건(x)의 확률(p(x))로 부터 정보(info(x))를 정량화하기 위해 식 1과 같이 계산합니다. $$\tag{식 1}\text{Info}(x)=h(x) = -\log(p(x))$$ 결국 정보는 이벤트 설명에 필요한 메모리 수로 간주할 수 있습니다. 그러므로 식 1에서 2진법(bit 수)으로 나타내기 위해 log 2 를 사용할 수 있지만 정보의 절대량보다는 그 변화가 더 중요하므로 일반적으로 자연로그를 사용합니다. 식 1에서 p(x)가 낮을수록 정보(h)는 증가함을 알 수 있습니다. 사건의 확률 1 → h=0 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") 다음 코드는 동전 던지기에서 앞면이 나올 확률 p=0.5인

[math] 정적분의 특성

정적분의 특성 \begin{align}\int_{ a }^{ b } f(x)dx&=\lim_{ n\to \infty} \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac{ b-a }{ n } \\ \tag{식 1} &=-\lim_{ n\to \infty} \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac{ a-b }{ n } \\ &=-\int_{ b }^{ a } f(x)dx\end{align} \begin{align}\tag{식 2} \int_{ a }^{ a } f(x)dx&=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac { a-a }{ n }\\ &=0 \end{align} \begin{align}\int_{ a }^{ b } cf(x)dx&=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } cf(x^{ * }_{ i })\frac { b-a }{ n } \\\tag{식 3} &=c\lim_{ n\to \infty } \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac { b-a }{ n }\\& =c\int_{ a }^{ b } f(x)dx\end{align} \begin{align}\int_{ a }^{ b } f(x)\pm g(x)dx&=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } \left(f(x^{ * }_{ i })\pm g(x^{ * }_{ i })\right)\frac{b-a}{n}\\\tag{식 4} &=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac{b-a}{n}\pm \lim_{ n\to \infty } \sum_{ i=1 }^{ n } g(x^{ * }_{ i })\frac{b-a}{n}\\ &=\i