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

분류 전체보기 495

[scikit-learn 라이브러리] BaggingClassifier (배깅분류기)

배깅 중복을 허용한 랜덤 샘플링으로 만든 훈련 세트(부트스트랩)를 사용하여 각 내부 모델을 다르게 학습시킴 분류기가 predict_proba() 메소드를 지원하는 경우 확률값을 평균하여 예측을 수행한다. (소프트보팅 차용) 없는 경우 가장 빈도가 높은 클래스 레이블이 예측 결과가 된다. (하드보팅 차용) 사용예제 from sklearn.model_selection import train_test_split from sklearn.datasets import load_breast_cancer # 데이터 로드 cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, ra..

[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..

[알고리즘 연습] 두 부분집합의 균형 맞추기

두 부분집합의 균형 맞추기 사용자로부터 집합 data를 입력받는다 입력받은 집합 data를 A, B 둘로 나눈다. A와 B의 개수는 맘대로 정할 수 있다. (5개의 집합을 3개, 2개로 나누든 1개, 4개로 나누든 상관없다는 뜻이다.) A와 B의 요소도 맘대로 정할 수 있다. ([1,2,3,4,5] 집합을 [1,3,5]와 [2,4]로 나누는 것도 가능하다.) 단 A와 B를 합쳤을 때는 반드시 data의 요소를 모두 가져야 한다. 이 때 'A요소들의 합 - B 요소들의 합' 절댓값의 최솟값을 찾아라. (A, B를 찾을 필요는 없다.) 풀이 def getPowerSet(n,k): if n == k: return [[k]] basic = k result = [[basic]] k += 1 while (n >= ..

로그 스케일로 분포 그리기

로그 스케일 데이터 작업을 하다보면 그 변화가 미세하거나, 다른 변화에 비해 수치가 작아 탐지하기 어려운 경우가 있다. 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)") # 가격 램 가격 동향 데이터가 대..

[알고리즘 연습] 멱집합

멱집합 구하기 숫자 n을 입력받고 1~n의 수를 원소로 가지는 집합의 멱집합을 구한다. 멱집합를 하나씩 출력한다. 단, 출력 순서는 [1], [1,2], [1,2,3], [1,3], [2], [2,3], [3] 과 같은 패턴을 가져야 한다. 풀이 def getPowerSet(n,k): if n == k: return [[k]] basic = k result = [[basic]] k += 1 while (n >= k): for i in getPowerSet(n,k): result.append([basic] + i) k += 1 return result def powerSet(n) : result = [] for i in range(1,n+1): result += getPowerSet(n,i) return ..

TensorFlow 레이어

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

반응형