✏️ 다수의 결정크리들을 학습하는 앙상블 방법이다.
✏️ 머신러닝에서 랜덤 포레스트는 분류, 회귀 분석 등에 사용되는 앙상블 학습 방법의 일종으로, 훈련 과정에서 구성한 다수의 결정트리로 부터 분류 또는 평균 예측치를 출력함으로써 동작한다.
1️⃣n_estimators: 트리의 개수
2️⃣ max_depth
3️⃣ max_features
RandomForestClassifier(
n_estimators=100,
criterion='gini',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features='sqrt',
max_leaf_nodes=None,
min_impurity_decrease=0.0,
bootstrap=True,
oob_score=False,
n_jobs=None,
random_state=None,
verbose=0,
warm_start=False,
class_weight=None,
ccp_alpha=0.0,
max_samples=None,
)
Best nodes are defined as relative reduction in impurity
#feature engineering
# 수치형 변수의 범주화
df["Pregnancies_high"] = df["Pregnancies"] > 6
#결측치처리
#결측치가 있는 데이터는 학습시킬 수 없다
df["Insulin_nan"] = df["Insulin"].replace(0, np.nan)
Insulin_mean = df.groupby("Outcome")["Insulin_nan"].mean()
df["Insulin_fill"] = df["Insulin_nan"]
df.loc[(df["Insulin_nan"].isnull())&(df["Outcome"]==1), "Insulin_fill"] = Insulin_mean[1]
df.loc[(df["Insulin_nan"].isnull())&(df["Outcome"]==0), "Insulin_fill"] = Insulin_mean[0]
#이상치
desc = df["Insulin_nan"].describe()
IQR = desc['75%'] - desc['25%']
max_out = desc['75%'] + (1.5*IQR)
df = df[df["Insulin_fill"] < max_out]
df.shape
>>> #(744, 12)
#모델링
split_count = int(df.shape[0] * 0.8)
train = df[:split_count]
test = df[split_count:]
train.shape, test.shape
>>> #(595, 11), (149, 11)
label_name = "Outcome"
feature_names = df.columns.tolist()
feature_names.remove("Outcome")
feature_names.remove("Insulin")
feature_names.remove("Insulin_nan")
X_train = train[feature_names]
y_train = train[label_name]
X_test = test[feature_names]
y_test = test[label_name]
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=1000,
max_depth=6,
n_jobs=-1,
random_state=42)
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
(y_test == y_predict).mean()
>>> #0.8926174496644296
sns.barplot(x = model.feature_importances_, y = model.feature_names_in_)
[머신러닝] Titanic 데이터를 사용한 분류: Feature Engineering(파생변수 생성, 원핫인코딩,결측치 대체), Cross Validation (1) | 2022.11.17 |
---|---|
[머신러닝] Titanic 데이터를 사용한 분류: Decision Tree, Binary Encoding, Entropy (0) | 2022.11.17 |
[머신러닝] pima 데이터를 사용한 분류: Decision Tree (0) | 2022.11.17 |
[머신러닝] INTRO. 머신러닝프로젝트 주요단계(전처리, EDA, Feature Engineering, 교차검증, 하이퍼파라미터튜닝) (0) | 2022.11.17 |
[머신러닝] INTRO. Definition, Tool, 알고리즘 유형 (0) | 2022.11.17 |