Recent Posts
Recent Comments
Link
Today
Total
12-28 17:06
관리 메뉴

Hippo's data

머신러닝 주요 모델 모델링(Scikit-learn) 본문

ML(Machine Learning)

머신러닝 주요 모델 모델링(Scikit-learn)

Hippo's data 2024. 1. 8. 16:32
728x90

오늘은 머신러닝에 쓰이는 주요 모델들의 모델링 방법에 대해 알아보겠습니다!!!

 

특히 머신러닝에서 유용하게 사용되는 라이브러리인 사이킷런(Scikit-learn)을 이용해보겠습니다

모델을 처음부터 구현하는 것은 굉장히 어려운 일인데요 사이킷런 라이브러리를 활용하면 간단한 코드 몇줄만으로 모델링을 진행할 수 있습니다! 

 

모델링은 크게 4가지 단계로 구성되는데요 

1) 불러오기 

2) 모델 생성

3) 모델 학습

4) 예측

 

### 모델링 이전 X(학습데이터)와 y(정답데이터)를 생성하고 train(학습), test(검증) 데이터셋을 생성하는 작업이 필요합니다!! 

 

y = df['타겟변수']    # 타겟변수(종속변수)가 존재하는 데이터 생성

X = df.drop('타겟변수' , axis = 1)   # 타겟변수(종속변수)가 제외된 데이터 생성 

 

from sklearn.model_selection import train_test_split  # 사이킷런 validation set 생성 위한 라이브러리 불러오기 

 

X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.2,         # 훈련 : 검증 데이터 비율 8:2 
                                                    stratify=y,                  # 층화추출 -> 각 클래스 분포비율고려 분할
                                                    random_state=42)  

 

이제 각 모델에 대해 소개하겠습니다!

 

1. 선형 회귀(Linear Regression)

-> 데이터를 설명하는 최적의 직선을 기반으로 예측 진행

- coef_ : 학습된 모델 변수 가중치(W_1 ~ W_P)

- intercept_ : 학습된 모델 절편(W_0)

 

1) 불러오기 

from sklearn.linear_model import LinearRegression

2) 모델 생성

reg = LinearRegression( fit_intercept=True )

 

하이퍼파라미터 (fit_intercept)

 fit_intercept=True -> 절편계산O

 fit_intercept=False -> 절편계산X, 원점지날때 

 

3) 모델 학습

reg.fit(X_train,  y_train)

4) 예측

y_pred = reg.predict(X_test)

 

 

2. 로지스틱 회귀 (Logistic Regression)

-> 시그모이드(sigmoid)함수를 이용하여 예측 / 이름에 회귀가 있지만 분류문제!!!! 

 

1) 불러오기 

from sklearn.linear_model import LogisticRegression

2) 모델 생성

lg = LogisticRegression(C=1.0,max_iter=2000, penalty='l1')

 

 하이퍼파라미터 (C, max_iter, penalty)

C -> 규제(regularization) 강도 조절 / 큰값(규제약해짐, 과적합 위험), 작은값(규제강해짐, 과소적합 위험)

penalty -> 규제(regularization) 종류 선택('l1'(Lasso), 'l2'(Ridge), 'elasticnet', 'none')

max_iter -> 알고리즘 수렴위한 최대 반복계산 횟수 

 

3) 모델 학습

lg.fit(X_train, y_train)

4) 예측

y_pred = lg.predict(X_test)

 

 

3. 의사결정나무(DecisionTree)

-> 스무고개 하듯이 참, 거짓으로 질문하며 학습진행

-> 결과 설명용이함 / 예측과 분류 문제 모두 사용 가능 / 과적합 확률 높음

https://scikit-learn.org/stable/modules/tree.html

1) 불러오기 

from sklearn.tree import DecisionTreeClassifier

2) 모델 생성

dt = DecisionTreeClassifier(max_depth=10, max_features=10, min_samples_split=2,  random_state=42 )

 

 하이퍼파라미터 ( max_depth , max_features, min_samples_split )

max_depth  -> 최대 깊이 / 과적합 방지

max_features -> 최대로 사용할 변수 개수 / 과적합 방지  

min_samples_split -> 트리 노드 최소 샘플수 / 과적합 방지

 

3) 모델 학습

dt.fit(X_train, y_train)

4) 예측

y_pred  = dt.predict(X_test)

 

# matplotlib / graphviz 이용해서 트리구조 시각화 가능 

 

 

< 최종평가 > 

-> 최종적으로 모델링 후 모델의 성능 평가를 해야함

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score 

 # 사이킷런 다양한 평가지표이용가능

accuracy_score(y_test, y_pred)  # 정확도 지표 이용하여 최종 평가

728x90