데이터 불러오기 및 아주 간단한 EDA
df = pd.read_csv('22_final_data.HepG2.Histone.Enhancer.csv')
import missingno as msno
display(msno.matrix(df))
display(msno.bar(df))
df.describe()
Random Forest 학습
features와 target으로 데이터를 나눠준다.
X_features = df.values[:,2:-1].astype('float')
y_target = df.values[:, -1].astype('float')
RandomForestClassifier
하이퍼 파라미터
- !
n_estimators
: 랜덤 포레스트에서 결정 트리의 개수를 지정합니다.
int, default=100
- 많이 설정할수록 좋은 성능을 기대할 수도 있지만, 계속 증가시킨다고 성능이 무조건 향상되는 것은 아닙니다. 또한 늘릴수록 학습 수행 시간이 오래 걸리는 것도 감안해야 합니다. 1000~2000개 정도면 충분함.
- !
max_features
: 결정트리에 사용된 max_features
파라미터와 같습니다.
- 하지만
RandomForestClassifier
의 기본 max_features
는 'None'
이 아니라 'auto'
(즉, 'sqrt'
와 같습니다.)
- 예 : 총 features의 개수가 16개라면, 4개만 참조한다.
- !
max_depth
: The maximum depth of the tree.
min_samples_split
: The minimum number of samples required to split an internal node
- !
min_samples_leaf
: The minimum number of samples required to be at a leaf node.
bootstrap
: bootstrap을 쓸 것이냐 말 것이냐인데, 기본적으로는 쓴다.
mean_impurity_decrease
class_weight
: unbalanced data의 경우에 사용해주는 hyperparameter로, 가중치를 준다든가 하는 방식을 사용하기도 한다.
oob_score
: 부트스트래핑을 하다보면 트리마다 빠지게 되는 데이터가 있는데, 그런 데이터들을 테스트 데이터로 사용하여 평가를 하며 각 트리별로 계산을 할 것이냐 말 것이냐를 결정
Whether to use out-of-bag samples to estimate the generalization score.
RandomizedSearchCV
estimator
: estimator object
param_distributions
: Dictionary with parameters names (str
) as keys and distributions or lists of parameters to try.
n_iter
: Number of parameter settings that are sampled. n_iter trades off runtime vs quality of the solution.
cv
: Determines the cross-validation splitting strategy
verbose
: Controls the verbosity: the higher, the more messages.
random_state
n_jobs
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RandomizedSearchCV
n_estimators = [int(x) for x in np.linspace(start = 200, stop = 2000, num = 10)]
max_features = ['auto', 'sqrt', 'log2']
max_depth = list(range(1,30))
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
bootstrap = [True, False]
class_weight = ['balanced', 'balanced_subsample']
random_grid = {'n_estimators': n_estimators,
'max_features': max_features,
'max_depth': max_depth,
'min_samples_split': min_samples_split,
'min_samples_leaf': min_samples_leaf,
'bootstrap': bootstrap,
'class_weight': class_weight}
rf_random = RandomizedSearchCV(estimator = rf,
param_distributions = random_grid,
n_iter = 100,
cv = 3,
verbose=2,
random_state=42,
n_jobs = -1)