<보완>
-모델종류(어떤 상황에 쓰면 좋을지,(gb, 리니어 ,로지스틱, svc, 캣부스트, lgb,)가 쓰이면 좋은 상황
-모델강화를 위한 .. (앙상블, 스태킹)
-전처리(필요없는 데이터 파악하는 방법)
<트러블슈팅>
-함수에 불이 안들어오는 상황; fit, predict
-이진분류
<추가할것들>
-로컬미니마 ? 글로벌미니마에 빠지진 않았는지 시각화해서 보고 싶다.
-그밖에 유익한 정보뽑아보기 (변제예상,
끝내고 느낀 점을 한줄로 요약하자면,
:데이터이해도가 전처리에 중요한 역할을 한다. (data scientist가 domain이 중요한 이유)
-> 적절한 전처리기법선택(범주형; 원핫인코딩/ 연속형;표준화, 정규화)
-> 이상치 및 결측치 처리....식별하고 결측치특성삭제
-> 특성 엔지니어링... 이해를 통해 새로운 특성을 만들거나 기존 특성을 변환
-> 모델해석에 용이
<적절한 모델링기법선택>
각 모델은 데이터의 특성과 목표에 따라 적합한 상황이 다르므로, 문제의 특성을 고려하여 모델을 선택해야 합니다. 어떤 모델을 선택하느냐에 따라 사용자의 의도대로 인사이트를 얻을 수 있으니 각 모델의 장단점과 특징을 파악해서 목적에 따라 사용하는 게 중요합니다. 또한 모델 선택 이후에는 하이퍼파라미터 튜닝과 모델 평가를 통해 최적의 모델을 찾아야 합니다. 원리는 각 모델별로 자세히 따로 정리해둘 예정입니다.
지금은 주로 사용되는 상황에 대해서만 간단히 살펴보겠습니다:
대규모 비선형데이터 모델링에 좋은, GB, catboost, LGB
1. Gradient Boosting (GB):
- 사용되는 상황: 고차원의 복잡한 데이터, 특히 트리 기반 모델이 적합한 경우. 예를 들어, 자연어 처리나 구조화된 데이터에서 많은 수의 피처를 처리하는 데 유용합니다.
- 약한 모델(의사 결정 트리 등)을 순차적으로 학습하여 잔차를 보정하고 예측 성능을 향상시킵니다.
- 부스팅 알고리즘 중 하나로, 과적합에 강한 모델입니다.
from sklearn.ensemble import GradientBoostingClassifier
# 모델 초기화
gb_model = GradientBoostingClassifier()
# 모델 학습
gb_model.fit(X_train, y_train)
# 예측
gb_pred = gb_model.predict(X_test)
2. CatBoost:
- 사용되는 상황: 범주형 변수가 많은 데이터나 텍스트 데이터를 다룰 때 유용합니다. 자체적으로 범주형 변수를 처리하는 기능이 있어 전처리 과정이 단순화됩니다.
from catboost import CatBoostClassifier
# 모델 초기화
catboost_model = CatBoostClassifier()
# 모델 학습
catboost_model.fit(X_train, y_train)
# 모델 예측
catboost_pred = catboost_model.predict(X_test)
3. LightGBM (LGB):
- 사용되는 상황: 대용량 데이터와 고차원 피처를 처리하는 데 효율적입니다. 트리 기반 모델 중에서도 속도가 빠르고 메모리 사용량이 적은 편이어서 대규모 데이터셋에 적합합니다.
import lightgbm as lgb
# 모델 초기화
lgb_model = lgb.LGBMClassifier()
# 모델 학습
lgb_model.fit(X_train, y_train)
# 모델 예측
lgb_pred = lgb_model.predict(X_test)
4. Linear Regression (선형 회귀):
- 사용되는 상황: 입력 변수와 출력 변수 간에 선형 관계가 있다고 가정할 수 있는 경우. 간단하면서도 해석하기 쉬운 모델이 필요한 경우에 적합합니다.
- 주어진 피처들 간의 선형 관계를 학습하고, 그에 따라 타겟 변수를 예측
from sklearn.linear_model import LinearRegression
# 모델 초기화
linear_model = LinearRegression()
# 모델 학습
linear_model.fit(X_train, y_train)
# 모델 예측
linear_pred = linear_model.predict(X_test)
5. Logistic Regression (로지스틱 회귀)
- 사용되는 상황: 이진 분류 문제에서 먼저 시도할 수 있는 간단한 모델. 각 피처의 영향을 해석하기 쉽고, 예측이 필요한 경우에 적합합니다.
- 이진 분류 문제에 사용되며, 선형 회귀의 확장으로 확률을 모델링합니다.
- *시그모이드 함수를 사용하여 입력 피처와 클래스 간의 확률을 모델링합니다.
from sklearn.linear_model import LogisticRegression
# 모델 초기화
logistic_model = LogisticRegression()
# 모델 학습
logistic_model.fit(X_train, y_train)
# 모델 예측
logistic_pred = logistic_model.predict(X_test)
*시그모이드 함수 사용법
먼저, 로지스틱 회귀모델연습 후
from sklearn.linear_model import LogisticRegression
import numpy as np
# 예제 데이터 생성
X = np.array([[1, 2], [2, 3], [3, 4]])
y = np.array([0, 1, 0])
# 로지스틱 회귀 모델 생성 및 학습
model = LogisticRegression()
model.fit(X, y)
# 학습된 모델을 사용하여 확률 예측
probabilities = model.predict_proba(X)
print("Predicted probabilities:", probabilities)
시그모이드 함수 직접 구현
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 입력 값 정의
z = np.array([0, 1, 2, 3])
# 시그모이드 함수 적용
probabilities = sigmoid(z)
print("Predicted probabilities:", probabilities)
6. **Support Vector Machine (SVM)**:
- **사용되는 상황**: 비선형 분리 가능한 문제에 적합한 모델. 특히 데이터가 고차원이고 분류가 어려운 경우에 유용합니다. 하이퍼파라미터 튜닝에 따라 성능이 크게 달라질 수 있습니다.
from sklearn.svm import SVC
# 모델 초기화
svm_model = SVC()
# 모델 학습
svm_model.fit(X_train, y_train)
# 모델 예측
svm_pred = svm_model.predict(X_test)
7. **랜덤 포레스트 (Random Forest)**:
- 의사 결정 트리를 앙상블한 모델로, 다수의 의사 결정 트리를 통해 예측합니다.
- 과적합을 줄이고 예측 성능을 향상시키는 데 사용됩니다.
<적절한 전처리기법선택>
1. 범주형(categorical) 데이터 처리
(1) 원-핫 인코딩(One-Hot Encoding)
\ 범주형 변수를 이진 형태로 변환
One_Hot_encoded_data = pd.get_dummies(data, columns=['categorical_feature'])
(2)라벨 인코딩 (Label Encoding):
\ 범주형 변수를 숫자로 변환
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
data['categorical_feature_encoded'] = label_encoder.fit_transform(data['categorical_feature'])
2. 연속형 데이터 전처리:
(1) 표준화(standardization):
\평균0 표준편차1 인 분포로 변환
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data[['numeric_feature']])
(2) 정규화(Normalization)
\특성 벡터 크기 조절해 단위길이로 변환
\데이터 스케일 조정 (효과: 속도향상, 거리기반알고리즘 성능향상e.g...k-최근접이웃, 규제적용, 정확도 높아짐)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data[['numeric_feature']])
예를 들어, 주택 가격 예측 모델에는 주택의 면적(제곱 피트)과 방의 수(개수)라는 두 가지 특성이 있습니다. 면적은 수백에서 수천 제곱 피트로 표현되지만, 방의 수는 보통 1부터 5까지의 작은 값입니다. 이러한 경우 면적과 방의 수를 동일한 스케일로 조정하면 모델이 더 나은 결과를 얻을 수 있습니다.
(3) 로그변환(Log Transformation)
\왜곡된 분포를 보정해 정규분포에 가깝게 만듦.
import numpy as np
data['numeric_feature_log'] = np.log(data['numeric_feature'])
(4) 바이닝(Binning)
\연속형 변수를 구간별로 나눠서 이산적인 값으로 변환.
\연속형데이터 이해력 높여서 모델에 적용하기 쉽게함 (효과: 비선형 관계 모델링, 이상치 처리, 모델의 복잡성 감소, 해석가능성 향상)
data['numeric_feature_binned'] = pd.cut(data['numeric_feature'], bins=3, labels=['Low', 'Medium', 'High'])
예를 들어, 주택 가격 예측 모델에서 주택의 면적과 가격 간의 관계가 선형이 아닌 경우, 면적을 구간별로 나눠서 각 구간에 대한 가격 범위를 예측하는 것이 유용할 수 있습니다. 더불어 이상치가 포함되어 있을 때 이를 처리하는 방법 중 하나로 구간별로 나눠 각 구간에 속한 값들을 그 구간의 평균 또는 중앙값으로 대체하여 이상치의 영향을 줄일 수 있습니다.
모델의 복잡성 감소는, 나이 변수를 구간별로 나눠서 각 연령 그룹에 대한 이산적인 값으로 변환하면 모델이 연령에 대한 세부적인 정보보다는 각 그룹의 특성에 더 집중할 수 있습니다. 구간별 특성은 클라이언트나, 도메인 전문가에게 더 의미있는 정보를 제공해줌으로써 전달력을 높일 수 있습니다.
<모델향상을 위한 앙상블 기법의 종류>
여러 개의 모델을 결합하여 하나의 모델보다 더 나은 예측 성능을 얻기 위한 방법으로, 앙상블 기법은 모델의 다양성을 확보하고 예측 성능을 향상시킬 수 있습니다. 따라서 적절한 앙상블 기법을 선택하여 모델의 성능을 향상시키는 것이 중요합니다.
1. 보팅(Voting): 일반적으로 성능이 좋은 여러 개의 모델을 결합해, 더 안정적이고 강력한 예측을 수행한다. 모델의 다양성을 증가시키고 일반화 성능을 향상시키는 데 도움이 된다.
- 하드 보팅(Hard Voting): 여러 모델의 예측을 다수결 투표하여 최종 예측을 결정합니다.
- 소프트 보팅(Soft Voting): 각 모델의 예측에 가중치를 부여하여 평균을 내어 최종 예측을 결정합니다.
2. 배깅(Bagging):
- 여러 개의 모델을 병렬적으로 학습시켜서 각 모델의 예측을 평균내거나 다수결투표로 결합합니다. 주로 **부트스트랩 샘플링을 사용하여 각 모델에 서로 다른 학습 데이터를 제공합니다. 대표적인 예로는 랜덤 포레스트(Random Forest)가 있습니다.
**부트스트랩 샘플링(Bootstrap Sampling)은 통계적인 기법 중 하나로, 주어진 데이터 집합으로부터 복원 추출을 통해 샘플을 만드는 과정을 말합니다. 데이터의 특성을 파악하거나 모델의 불확실성을 추정하는 데에 사용됩니다.각 모델에게 데이터의 서로 다른 부분 집합을 제공하여 모델 간의 다양성을 증가시키고 일반화 성능을 향상시키기 위함입니다. 따라서 각 모델은 서로 다른 샘플링된 데이터를 기반으로 학습하게 됩니다.
3. 부스팅(Boosting)
- 여러 개의 약한 모델(weak learner)를 순차적으로 학습시켜 각 모델의 예측 오차에 가중치를 부여하여 오차를 보정하는 방식으로 최종 예측을 수행합니다. 대표적으로는 에이다부스트(AdaBoost), 그래디언트 부스팅(Gradient Boosting), XGBoost, LightGBM 등이 있습니다.
4. 스태킹(Stacking):
- 여러 개의 기본 모델의 예측한 결과를 새로운 피처로 사용하여 ***최종 메타 모델을 학습합니다. 즉, 여러 모델의 예측값을 취합하여 이를 입력으로 새로운 모델을 학습시킵니다. (더욱 강력한 예측 성능 달성)
***최종 메타모델은 앙상블 학습에서 여러 개의 기본 모델로부터 나온 예측 결과를 활용하여 최종적인 예측을 수행하는 모델을 말합니다. 일반적으로 각 기본 모델의 예측 결과를 인풋값으로 설정하고, 이를 조합해 최종 예측을 생성합니다.
주요한 최종 메타모델:
1. Voting Classifier (보팅 분류기): 다수결 원칙으로 각 예측을 결합하여 최종 예측. 분류 문제에 사용
2. Voting Regressor (보팅 회귀기): 각 회귀 모델의 예측 결과를 평균내 최종적인 회귀 예측을 생성
3. Stacking (스태킹): 여러 예측 결과를 새로운 피처로 사용해 메타모델(보통 로지스틱 회귀, 랜덤 포레스트 등)을 학습시키는 방식.
4. Blending (블렌딩): 스태킹과 비슷하지만, 일부 학습 데이터로 여러 기본 모델을 학습시키고, 다른 일부 데이터를 사용해 메타모델을 학습시키는 방식.
5. 블렌딩(Blending):
- 스태킹과 유사하지만, 훈련 데이터를 두 개의 세트로 분할하고, 트레이닝/테스트셋...하나의 세트로 기본 모델을 학습하고 다른 세트로 예측합니다.그런 다음 예측값을 새로운 모델에 입력하여 최종 예측을 수행합니다.
6. 추정값 수정(Boosting):
- 기본 모델의 예측값을 기준으로 다음 모델을 학습하는데, 이때 이전 모델의 예측 오차에 가중치를 부여하여 학습합니다. 대표적으로 그래디언트 부스팅(Gradient Boosting)이 있습니다.
앙상블 기법은 모델의 다양성을 확보하고 예측 성능을 향상시킬 수 있습니다. 따라서 적절한 앙상블 기법을 선택하여 모델의 성능을 향상시키는 것이 중요합니다.