[혼공머신]5-2-2 -추가학습(하이퍼파라미터 튜닝)

하이퍼파라미터를 튜닝하는 방법 그리드 서치와 랜덤 서치 외에도 하이퍼파라미터를 튜닝하는 방법은 여러 가지가 있습니다. 대표적으로는 베이지안 최적화, 하이퍼밴드(Hyperband), 그리고 진화 알고리즘(Evolutionary Algorithms) 등이 있습니다. 각각의 방법을 예시 코드와 함께 구체적으로 설명하겠습니다. 1. 베이지안 최적화 (Bayesian Optimization) 베이지안 최적화는 함수의 최대값이나 최소값을 찾는 데 사용되는 방법으로, 하이퍼파라미터 튜닝에 자주 사용됩니다. 이를 위해 scikit-optimize 라이브러리의 BayesSearchCV를 사용할 수 있습니다. from skopt import BayesSearchCV from sklearn.datasets import load_iris from sklearn.svm import SVC # 데이터 준비 iris = load_iris() X, y = iris.data, iris.target # SVM 모델 정의 svc = SVC() # 하이퍼파라미터 범위 설정 param_space = { 'C': (1e-6, 1e+6, 'log-uniform'), 'gamma': (1e-6, 1e+1, 'log-uniform'), 'degree': (1, 8), 'kernel': ['linear', 'poly', 'rbf'] } # 베이지안 최적화 수행 opt = BayesSearchCV(estimator=svc, search_spaces=param_space, n_iter=32, cv=3, n_jobs=-1, random_state=42) opt.fit(X, y) # 최적의 하이퍼파라미터와 성능 출력 print("Best parameters:", opt.best_params_) print("Best cross-validation score:", opt.best_score_) 2. 하이퍼밴드 (Hyperband) 하이퍼밴드는 자원의 효율적인 할당을 통해 하이퍼파라미터 최적화를 수행하는 방법입니다. scikit-optimize 라이브러리의 SuccessiveHalvingSearchCV를 사용하여 구현할 수 있습니다. ...

2024-07-28 · 2 분 · ICE ICE BEAR

[혼공머신]5-3

XGBoost와 LightGBM XGBoost와 LightGBM은 그레이디언트 부스팅의 구현체로, 빠르고 효율적인 알고리즘을 제공합니다. 이들은 특히 대규모 데이터셋에 대해 뛰어난 성능을 발휘합니다. XGBoost XGBoost는 Extreme Gradient Boosting의 약자로, 효율적이고 확장 가능한 그레이디언트 부스팅 알고리즘입니다. 주요 특징은 다음과 같습니다: Regularization: 과적합을 방지하기 위한 정규화 기법을 포함합니다. Parallel Processing: 병렬 처리를 통해 학습 속도를 향상시킵니다. Tree Pruning: 최적의 트리 크기를 찾기 위해 사후 가지치기를 사용합니다. Sparsity Awareness: 희소 데이터(예: 결측값)에 대한 최적화를 포함합니다. Cross Validation: 내부적으로 교차 검증을 통해 모델의 성능을 평가할 수 있습니다. XGBoost 예제 코드 from xgboost import XGBClassifier from sklearn.model_selection import train_test_split, cross_validate import pandas as pd # 데이터 로드 및 전처리 wine = pd.read_csv('https://bit.ly/wine_csv_data') data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine['class'].to_numpy() train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42) # XGBoost 모델 학습 xgb = XGBClassifier(tree_method='hist', random_state=42) scores = cross_validate(xgb, train_input, train_target, return_train_score=True, n_jobs=-1) print(np.mean(scores['train_score']), np.mean(scores['test_score'])) xgb.fit(train_input, train_target) print(xgb.score(test_input, test_target)) LightGBM LightGBM은 Microsoft에서 개발한 그레이디언트 부스팅 프레임워크로, 다음과 같은 특징이 있습니다: ...

2024-07-28 · 2 분 · ICE ICE BEAR

[혼공머신]5-3-2 -추가학습(기타 앙상블학습)

기타 앙상블학습 앙상블 학습에는 다양한 방법들이 있으며, 여기서는 그 중 일부를 소개하겠습니다. 대표적인 앙상블 방법으로 배깅(Bagging), 부스팅(Boosting), 스태킹(Stacking), 그리고 배깅의 일종인 랜덤 서브스페이스(Random Subspace)를 설명하고, 예시 코드를 제공합니다. 배깅 (Bagging) 배깅은 같은 모델을 여러 개 학습시키고, 데이터의 부분 집합을 사용하여 각각의 모델을 학습시킨 후, 예측 시 이들의 평균 또는 투표 결과를 사용하는 방법입니다. 랜덤 포레스트가 대표적인 배깅 기법입니다. 배깅 예제 코드 from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split, cross_validate import pandas as pd # 데이터 로드 및 전처리 wine = pd.read_csv('https://bit.ly/wine_csv_data') data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine['class'].to_numpy() train_input, test_input, train_target, test_target = train_test_split(data, target, test_size=0.2, random_state=42) # 배깅 모델 학습 bagging = BaggingClassifier(DecisionTreeClassifier(), n_estimators=100, random_state=42) scores = cross_validate(bagging, train_input, train_target, return_train_score=True, n_jobs=-1) print(np.mean(scores['train_score']), np.mean(scores['test_score'])) bagging.fit(train_input, train_target) print(bagging.score(test_input, test_target)) 부스팅 (Boosting) 부스팅은 약한 학습기(Weak Learner)를 순차적으로 학습시키고, 이전 모델의 오류를 수정해 나가는 방식입니다. 그레이디언트 부스팅, XGBoost, LightGBM 등이 여기에 속합니다. ...

2024-07-28 · 2 분 · ICE ICE BEAR

혼공머신5-2-1

교차검증과 그리드 서치 1. 검증 세트 검증 세트는 하이퍼파라미터 튜닝을 위해 훈련 세트에서 분리한 데이터 세트입니다. 모델의 성능을 평가할 때, 테스트 세트를 사용하지 않도록 합니다. import pandas as pd # 데이터 불러오기 및 전처리 wine = pd.read_csv('https://bit.ly/wine_csv_data') data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine['class'].to_numpy() # 훈련 세트와 테스트 세트로 분리 from sklearn.model_selection import train_test_split train_input, test_input, train_target, test_target = train_test_split( data, target, test_size=0.2, random_state=42) # 훈련 세트에서 다시 검증 세트로 분리 sub_input, val_input, sub_target, val_target = train_test_split( train_input, train_target, test_size=0.2, random_state=42) print(sub_input.shape, val_input.shape) 위 코드에서 데이터를 불러와 훈련 세트와 테스트 세트로 나눈 후, 다시 훈련 세트를 서브 세트와 검증 세트로 분리합니다. ...

2024-07-28 · 4 분 · ICE ICE BEAR

[혼공머신]4-1

로지스틱 회귀 로지스틱 회귀는 선형 회귀와 달리 분류 문제에 사용되는 지도 학습 알고리즘입니다. 주요한 특징은 선형 방정식을 사용하여 데이터 포인트를 분류하는데, 이 과정에서 시그모이드 함수나 소프트맥스 함수를 사용해 클래스 확률을 출력합니다. 핵심 개념 로지스틱 회귀 (Logistic Regression) 선형 회귀와 달리, 로지스틱 회귀는 이진 분류 문제에 사용됩니다. 출력값은 시그모이드 함수에 의해 0과 1 사이의 확률 값으로 변환됩니다. 시그모이드 함수 (Sigmoid Function) $ \sigma(x) = \frac{1}{1 + e^{-x}} $ 선형 방정식의 출력을 0과 1 사이의 값으로 압축합니다. 주로 이진 분류에서 사용됩니다. 소프트맥스 함수 (Softmax Function) ...

2024-07-21 · 2 분 · ICE ICE BEAR

[혼공머신]4-1 -추가학습(정규화 기법)

정규화 기법 (Regularization Techniques) 정규화는 머신러닝 모델의 과적합(overfitting)을 방지하고 일반화 성능을 향상시키기 위해 사용되는 기법입니다. 특히 로지스틱 회귀와 같은 선형 모델에서 중요한 역할을 합니다. 정규화는 모델의 복잡도를 줄여, 학습 데이터에 너무 치우치지 않도록 하는 데 도움을 줍니다. 주로 사용되는 정규화 기법에는 L1 정규화와 L2 정규화가 있습니다. 1. L1 정규화 (Lasso Regularization) L1 정규화는 가중치 벡터의 절대값 합을 패널티로 추가하는 방식입니다. 수식: $$ \text{Loss function} = \text{original loss} + \lambda \sum_{j=1}^{p} |w_j| $$ 여기서 $ \lambda $는 정규화 강도를 제어하는 하이퍼파라미터이고,$ w_j $는 모델의 가중치입니다. ...

2024-07-21 · 2 분 · ICE ICE BEAR

[혼공머신]4-2

확률적 경사 하강법(SGD, Stochastic Gradient Descent) 확률적 경사 하강법(SGD)은 기계 학습에서 널리 사용되는 최적화 알고리즘입니다. 이 알고리즘은 대규모 데이터 셋에서도 빠르고 효율적으로 동작합니다. 아래는 확률적 경사 하강법에 대한 핵심 포인트와 상세한 설명입니다. 핵심 포인트 확률적 경사 하강법: 훈련 세트에서 샘플 하나씩 꺼내 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘. 미니배치 경사 하강법: 여러 개의 샘플을 동시에 사용하는 방법. 배치 경사 하강법: 전체 샘플을 한 번에 사용하는 방법. 손실 함수: SGD가 최적화할 대상. 이진 분류에는 로지스틱 회귀, 다중 분류에는 크로스엔트로피 손실 함수, 회귀 문제에는 평균 제곱 오차 손실 함수를 사용. 에포크: 전체 샘플을 모두 사용하는 한 번의 반복. 수십에서 수백 번의 에포크를 반복. 주요 패키지와 함수 scikit-learn ...

2024-07-21 · 3 분 · ICE ICE BEAR

[혼공머신]4-2 -추가학습(기타 손실함수)

기타 손실함수 1. Hinge Loss (힌지 손실 함수) 특징: 주로 서포트 벡터 머신(SVM)에서 사용됩니다. 분류 문제에 적합하며, 데이터 포인트가 결정 경계를 넘어갈 때 손실을 가중합니다. 이진 분류 문제에서 많이 사용됩니다. 예시: from sklearn.linear_model import SGDClassifier clf = SGDClassifier(loss='hinge', max_iter=1000, tol=0.001, random_state=42) clf.fit(train_scaled, train_target) print("훈련 세트 점수:", clf.score(train_scaled, train_target)) print("테스트 세트 점수:", clf.score(test_scaled, test_target)) 2. Squared Hinge Loss (제곱 힌지 손실 함수) 특징: 힌지 손실의 변형으로, 제곱된 값을 사용하여 오류가 클 때 더 큰 패널티를 줍니다. 더 큰 마진을 제공하여 분류기의 일반화 능력을 향상시킵니다. 예시: clf = SGDClassifier(loss='squared_hinge', max_iter=1000, tol=0.001, random_state=42) clf.fit(train_scaled, train_target) print("훈련 세트 점수:", clf.score(train_scaled, train_target)) print("테스트 세트 점수:", clf.score(test_scaled, test_target)) 3. Huber Loss (후버 손실 함수) 특징: 회귀 문제에서 사용됩니다. 작은 오류에 대해서는 제곱 오차로 처리하고, 큰 오류에 대해서는 절대 오차로 처리하여 이상치에 강건한 성능을 보입니다. 예시: from sklearn.linear_model import SGDRegressor reg = SGDRegressor(loss='huber', max_iter=1000, tol=0.001, random_state=42) reg.fit(train_scaled, train_target) print("훈련 세트 점수:", reg.score(train_scaled, train_target)) print("테스트 세트 점수:", reg.score(test_scaled, test_target)) 4. Log Loss (로그 손실 함수 또는 로지스틱 손실 함수) 특징: 로지스틱 회귀에서 사용됩니다. 이진 분류 문제에 적합하며, 예측 확률과 실제 클래스 간의 차이를 측정합니다. 예시: clf = SGDClassifier(loss='log', max_iter=1000, tol=0.001, random_state=42) clf.fit(train_scaled, train_target) print("훈련 세트 점수:", clf.score(train_scaled, train_target)) print("테스트 세트 점수:", clf.score(test_scaled, test_target)) 5. Epsilon-Insensitive Loss (엡실론 민감 손실 함수) 특징: 서포트 벡터 회귀(SVR)에서 사용됩니다. 예측 값과 실제 값이 일정 범위(엡실론) 내에 있을 때 손실을 무시합니다. 회귀 문제에서 특정 오차 범위 내의 값을 무시하고, 이상치에 민감하지 않은 모델을 만듭니다. 예시: reg = SGDRegressor(loss='epsilon_insensitive', max_iter=1000, tol=0.001, random_state=42) reg.fit(train_scaled, train_target) print("훈련 세트 점수:", reg.score(train_scaled, train_target)) print("테스트 세트 점수:", reg.score(test_scaled, test_target)) 6. Squared Loss (제곱 오차 손실 함수) 특징: 회귀 문제에서 가장 일반적으로 사용됩니다. 예측 값과 실제 값의 차이를 제곱하여 손실을 계산합니다. 이상치에 민감할 수 있습니다. 예시: reg = SGDRegressor(loss='squared_loss', max_iter=1000, tol=0.001, random_state=42) reg.fit(train_scaled, train_target) print("훈련 세트 점수:", reg.score(train_scaled, train_target)) print("테스트 세트 점수:", reg.score(test_scaled, test_target)) 7. Perceptron Loss (퍼셉트론 손실 함수) 특징: 퍼셉트론 학습에서 사용됩니다. 분류 문제에 적합하며, 예측이 틀렸을 때만 손실을 계산합니다. 예시: clf = SGDClassifier(loss='perceptron', max_iter=1000, tol=0.001, random_state=42) clf.fit(train_scaled, train_target) print("훈련 세트 점수:", clf.score(train_scaled, train_target)) print("테스트 세트 점수:", clf.score(test_scaled, test_target)) 결론 이와 같이 다양한 손실 함수는 각기 다른 문제와 목표에 맞춰 최적의 성능을 발휘할 수 있도록 설계되었습니다. 각 손실 함수의 특성을 이해하고 적절히 선택하는 것이 모델 성능 향상의 핵심입니다.

2024-07-21 · 2 분 · ICE ICE BEAR

[혼공머신]3-1

[혼공머신]3-1 1. 회귀 문제란? 회귀는 임의의 수치를 예측하는 문제로, 타깃값도 임의의 수치가 됩니다. 2. k-최근접 이웃 회귀 k-최근접 이웃 회귀는 k-최근접 이웃 알고리즘을 사용해 회귀 문제를 풉니다. 가장 가까운 이웃 샘플을 찾아 이 샘플들의 타깃값을 평균하여 예측으로 삼습니다. 3. 결정계수 (R²) 결정계수는 회귀 문제의 성능을 측정하는 대표적인 도구입니다. 1에 가까울수록 좋은 모델이며, 0에 가까울수록 성능이 나쁜 모델입니다. 4. 과대적합과 과소적합 과대적합: 모델의 훈련 세트 성능이 테스트 세트 성능보다 훨씬 높을 때 발생합니다. 모델이 훈련 세트에 너무 집착하여 데이터의 거시적인 패턴을 감지하지 못하는 경우입니다. 과소적합: 훈련 세트와 테스트 세트 성능이 모두 낮거나 테스트 세트 성능이 더 높을 때 발생합니다. 더 복잡한 모델을 사용해 훈련 세트에 잘 맞는 모델을 만들어야 합니다. 5. 핵심 패키지와 함수 scikit-learn KNeighborsRegressor: k-최근접 이웃 회귀 모델을 만드는 사이킷런 클래스입니다. n_neighbors 매개변수로 이웃의 개수를 지정합니다. mean_absolute_error(): 회귀 모델의 평균 절댓값 오차를 계산합니다. 첫 번째 매개변수는 타깃, 두 번째 매개변수는 예측값을 전달합니다. mean_squared_error(): 평균 제곱 오차를 계산합니다. numpy reshape(): 배열의 크기를 바꾸는 메서드입니다. 바꾸고자 하는 배열의 크기를 매개변수로 전달합니다. 6. 예제 코드 다음은 k-최근접 이웃 회귀를 사용한 간단한 예제입니다. ...

2024-07-13 · 3 분 · ICE ICE BEAR

[혼공머신]3-1 -추가학습(k-최근접 이웃 모델의 원리와 활용)

[혼공머신]3-1 -추가학습(k-최근접 이웃 모델의 원리와 활용) k-최근접 이웃 모델의 수학적 원리 k-최근접 이웃(K-Nearest Neighbors, KNN) 모델은 비모수적 방법으로, 데이터 포인트가 주어졌을 때 가장 가까운 ( k )개의 이웃을 기반으로 새로운 데이터를 예측하는 방법입니다. 이 알고리즘은 다음과 같은 단계를 따릅니다: 거리 측정: 새로운 데이터 포인트와 기존 데이터 포인트 간의 거리를 계산합니다. 일반적으로 유클리드 거리(Euclidean distance)를 사용합니다. 유클리드 거리 ( d )는 다음과 같이 계산됩니다: $$ d(\mathbf{x}i, \mathbf{x}j) = \sqrt{\sum{l=1}^{n} (x{il} - x_{jl})^2} $$ 여기서 $\mathbf{x}_i $와 $ \mathbf{x}_j $는 각각 ( n )차원의 벡터를 나타냅니다. ...

2024-07-13 · 3 분 · ICE ICE BEAR