2022.05.02 - [python/파이썬 머신러닝 완벽가이드] - [python] NLP 피처백터화 / 희소행렬
** 본 포스팅은 앞선 글과 이어집니다!
sklearn의 pipeline 클래스를 활용하면 피처 백터화와 ML알고리즘 학습/예측을 위한 코드 작성을 한 번에 진행할 수 있다.
이는 수행시간을 절약해주어 더욱 효과적인 코드를 작성하도록 도와준다!!
Pipeline 객체선언
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
pipeline = Pipeline([ ('tfidf_vect', TfidfVectorizer(stop_words = 'english', ngram_range=(1,2), max_df=300)),
('lr_clf', LogisticRegression(C=10)) ])
pipeline.fit(X_train, y_train)
pred = pipeline.predict(X_test)
print('pipeline을 통한 LogisticRegression의 예측 정확도 : {0}'.format(accuracy_score(y_test, pred)))
sklearn에서 pipeline을 임포트한 후,
TfidfVectorizer 객체를 'tfidf_vect'라는 객체 변수명으로
LogisticRegression 객체를 'lr_clf'라는 객체 변수명으로 생성한 뒤,
두 객체를 Pipeline으로 연결하는 pipeline객체를 생성한다는 의미이다.
즉, 피처백터화를 fit(), transform()하고 ML알고리즘을 fit(), predict()를 따로 할 필요없이
한번에 fit(), predict()로 피처백터화와 학습/예측이 가능하다!!
Pipeline 하이퍼파라미터 최적화
여기서는 GridSearchCV를 이용한 하이퍼파라미터 최적화를 실습해볼거다.
원래는 피처백터화와 ML알고리즘의 하이퍼파라미터를 따로따로 튜닝해야했지만
pipeline을 통해서 하이퍼파라미터를 최적화하게 되면 모두 한번에 최적화할 수 있다!
( 하지만 두 객체의 모든 파라미터를 최적화할 시 너무 많은 경우의 수가 발생하게 되므로 시간이 그만큼 많이 소요된다는 점을 유의할 것 )
단, 기존의 param_grid의 입력값 설정이 기존과 다름을 유의해야 한다.
pipeline에서는 각 파라미터가 어떤 객체에 속하여 있는 것인지 선언해주어야 한다.
예를 들어, 위의 예시에서 제시한 객체 변수명 중 'tfidf_vect'의 여러 파라미터 중 ngram_range를 최적화하기를 원한다면
개별 객체명과 하이퍼파라미터명을 결합해 key 값으로 할당해야 한다.
즉, 본 예제에서는 언더바('_') 2개를 연속으로 사용하여 'tfidf_vect__ngram_range'로 key 값을 할당하는 것이 된다.
from sklearn.model_selection import GridSearchCV
params = {'tfidf_vect__ngram_range' : [(1,1),(1,2),(1,3)],
'tfidf_vect__max_df' : [100,300,700],
'lf_clf__C' : [1,5,10]}
grid_cv_pipe = GridSearchCV(pipeline, param_grid=params, cv=3, scoring='accuracy', verbose=1)
grid_cv_pipe.fit(X_train, y_train)
print(grid_cv_pipe.best_params_, grid_cv_pipe.best_score_)
pred = grid_cv_pipe.predict(X_test)
print('Pipeline을 통한 예측정확도 : {0}'.format(accuracy_score(y_test,pred)))
'python > 파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
[NLP] 피처백터화 / 희소행렬 (0) | 2022.05.02 |
---|---|
[NLP] NLP 기초, 텍스트 전처리의 모든 것 (0) | 2022.04.30 |
[python] SMOTE를 활용한 오버샘플링 (0) | 2022.03.26 |
[python] LGBMClassifier 단번에 성능 높이기 (0) | 2022.03.26 |
[python] 교차검증을 간단하게 cross_val_score() (0) | 2022.03.15 |