[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI 99

[scikit-learn 라이브러리] RandomForestClassifier (랜덤 포레스트 분류)

랜덤 포레스트(Random Forest) 기본 결정트리는 해당 데이터에 대해 맞춰서 분류를 진행한 것이기 때문에 과적합 현상이 자주 나타났다. 그에 따라 이를 개선하기 위해 2001년 앙상블 기법으로 고안된 것이 랜덤 포레스트이다. 훈련 과정에서 구성한 다수의 결정 트리들을 랜덤하게 학습시켜 분류 또는 회귀의 결과도출에 사용된다. 즉, 특정 특성을 선택하는 트리를 여러개 생성하여 이들을 기반으로 작업을 수행하는 것이다. 각각의 트리가 독립적으로 학습하기 때문에 학습과정을 병렬화할 수 있다. 일반적인 의사결정트리는 Tree Correlation이라고 하는 특정 feature 하나가 정답에 많은 영향을 주게되면 대부분의 결과치가 유사하게 나타나는 문제점이 있었다. 하지만 랜덤 포레스트에서는 그러한 문제를 해..

[scikit-learn 라이브러리] VotingClassifier (보팅 분류기)

보팅의 유형 하드 보팅 : 최종 아웃풋 결과 중 각 모델들이 가장많이 선택한 아웃풋을 최종 아웃풋으로 설정한다. 소프트 보팅 : 최종 아웃풋 결과의 확률값을 기반으로 평균을 내어, 이중 가장 확률값이 높은 아웃풋을 최종 아웃풋으로 설정한다. 보팅 분류기 모듈 사용예제 import pandas as pd from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split cancer = load_breast_cancer() data_df = pd.DataFrame(cancer.data, columns = cancer.feature_names) # 데이터를 훈련셋과 테스트셋으로 나누기 X_trai..

앙상블 학습

앙상블 학습(Ensemble Learning) 앙상블은 여러 머신러닝 모델을 묶어 더 강력한 모델을 만드는 기법들을 총칭한다. 대표적으로 랜덤포레스트와 그래디언트 부스팅이 있다. 두 앙상블 모델은 모두 결정트리를 기본요소로 갖는다. (결정트리를 묶어 만든 모델이다.) 다양한 분류 및 회귀 문제에서 효과적임이 입증되었다. 앙상블의 유형 앙상블 학습의 유형은 책마다 분류의 기준이 2가지~4가지로 나뉜다. 내가 수강한 수업을 기준으로 4가지로 분류해보겠다. 보팅(Voting) : 서로 다른 알고리즘의 모델들을 결합하고, 각각의 아웃풋에 대한 투표를 기반으로 최종값을 결정한다. 따라서 앙상블에 속한 모든 모델이 하나의 데이터 샘플을 사용한다. 배깅(Bagging) : 모두 같은 유형의 모델을 기반으로 한다. 각..

Pandas 데이터프레임 apply, replace

apply df = pd.DataFrame(np.arange(5), columns=['Num'] def square(x): return x**2 df['Num'].apply(square) df['Square'] = df.Num.apply(lambda x : x ** 2) 데이터를 특정 함수에 적용한 뒤 그 결과값으로 대체해주는 메소드이다. apply로 각 데이터에 함수를 적용할 수 있다. 물론 람다 함수로 이용할 수 있다. replace df.Sex.replace({"Male": 0, "Female": 1}) 데이터를 특정값으로 대체하는 메소드이다. Sex 컬럼의 'Male'은 0으로 'Female'은 1로 대체된다. 특정 컬럼의 데이터를 이와 같이 간단한게 변경할 수 있다.

과적합방지 - Drop out, 배치정규화

Drop out 딥러닝 모델 학습 시 몇 개의 노드를 제외하고 학습하는 방법이다. 랜덤하게 사용하지 않을 노드를 결정한다. 계산이 줄어드는 만큼 variance가 줄어들어 overfitting을 줄일 수 있게 된다. 사실 랜덤하게 사용하지 않을 노드를 결정하는 수식이 필요해 실질적인 '계산량'이 줄어드는 것은 아니다. 다만 학습에 사용되는 노드가 제외되면서 그만큼 학습 자체에서의 계산량이 줄어든다는 것이다. 즉, 지속적으로 학습과정에 교란을 줌으로서 모델이 과하게 학습 데이터에 맞춰지는 것을 방지할 수 있는 것이다. tf.keras.layers.Dropout(rate = 0.3) 텐서플로우에서 Dropout 레이어를 만들어 관리할 수 있다. rate는 제외될 비율이다. 배치정규화(Batch Normali..

로그 스케일로 분포 그리기

로그 스케일 데이터 작업을 하다보면 그 변화가 미세하거나, 다른 변화에 비해 수치가 작아 탐지하기 어려운 경우가 있다. import numpy as np import pandas as pd import os import mglearn import matplotlib.pyplot as plt %matplotlib inline ram_prices = pd.read_csv(os.path.join(mglearn.datasets.DATA_PATH, "ram_price.csv")) # 그냥 그린 램 가격 동향 plt.plot(ram_prices.date, ram_prices.price) plt.xlabel("year") # 년 plt.ylabel("price ($/Mbyte)") # 가격 램 가격 동향 데이터가 대..

TensorFlow 레이어

레이어 레이어 : 유용한 연산자 집합 머신러닝 모델은 단순한 레이어를 쌓고 조합하여 표현할 수 있다. 텐서플로우는 여러 표준 레이어를 제공하기 때문에 처음부터 고유의 프로그램에 최적화된 레이어를 작성하거나 기존 레이어를 조합해 쉽게 모델을 만들 수 있다. 텐서플로우는 케라스의 모든 API를 tf.keras에 포함하고 있다. 여기서 얻어낸 케라스 레이어로 모델을 구축하면 된다. 대부분의 레이어는 처음 파라미터로 출력차원의 크기 혹은 채널을 가진다. 입력 차원의 수는 따로 설정하지 않아도 유추하지만 그래도 모델이 복잡할 경우 입력해주는 것이 좋다. layer = tf.keras.layers.Dense(10, input_shape=(None, 5)) 위는 레이어의 한 종류인 완전 연결 레이어이다. layer...

문자열 특수문자 제거

특수문자 제거 보통 특수문자는 문장의 의미에 큰 역할을 하지 않는다. 따라서 전처리 과정으로 특수문자를 제거할 수 있다. from string import punctuation for p in punctuation : print(p) data = data.replace(p, "") data에 내가 제거를 원하는 데이터(문자열)이 있다고 하자. punctuation에는 기본적인 특수문자 데이터 (!"#$%&'()*+,-./:;?@[\]^_`{|}~)가 들어있다. 따라서 하나씩 체크하면서 replace 하는 것으로 특수문자를 제거할 수 있다.

[scikit-learn 라이브러리] DecisionTreeClassifier (결정트리분류기)

결정트리 분할과 가지치기 과정을 반복하면서 모델을 생성한다. 결정트리에는 분류와 회귀 모두에 사용할 수 있다. 여러개의 모델을 함께 사용하는 앙상블 모델이 존재한다. (RandomForest, GradientBoosting, XGBoost) 각 특성이 개별 처리되기 때문에 데이터 스케일에 영향을 받지 않아 특성의 정규화나 표준화가 필요 없다. 시계열 데이터와 같이 범위 밖의 포인트는 예측 할 수 없다. 과대적합되는 경향이 있다. 이는 본문에 소개할 가지치기 기법을 사용해도 크게 개선되지 않는다. DecisionTreeClassifier() DecisionTreeClassifier(criterion, splitter, max_depth, min_samples_split, min_samples_leaf, m..