Python 파이프라인의 특성

소개



나는 최근에 파이썬 파이프라인을 배웠다. 특히 기술 노트의 가독성과 전반적인 코딩에 매우 유용합니다. 그런데 파이프라인에 포함된 요소의 속성을 꺼내는 큰 문제가 발생했습니다.

강사의 도움과 인터넷 검색으로 어려움은 새로운 것을 배우는 소중한 경험으로 바뀌었습니다.

데이터



이 게시물에 어떤 데이터가 사용되었는지 간단히 살펴보겠습니다. 데이터는 National 2009 H1N1 Flu Survey에서 가져온 것입니다. 링크는 변수 이름을 볼 수 있는 페이지로 연결됩니다. 이번 조사의 목적은 신종플루 예방접종률과 응답자의 범주를 알아보는 것이다. 이는 이 게시물의 뒷부분에서 파이프라인의 출력을 이해하는 데 도움을 주기 위한 것입니다.

파이프라인의 요소



요소는 실제로 파이프라인에서 "단계"라고 합니다. 각 단계는 인코더, 샘플링 또는 기계 학습(분류, 회귀 등)이 될 수 있습니다. 단계에서는 인코더로 OneHotEncoder과 분류기로 RandomForestClassifier을 사용합니다.

속성



OneHotEncoder



아래는 인코더를 인스턴스화하는 파이썬 코드입니다. 결과는 더 나은 조직을 위해 게시물 끝에 모두 정리됩니다.

# import libraries for columns transformation
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

# instantiate encoders
ohe = OneHotEncoder(sparse=False, handle_unknown='ignore')

# apply encoding to just one column in the data
# to reduce complexity in the results
ct = ColumnTransformer([('age', ohe, ['age_group'])],
                       remainder='passthrough')


곧 돌아올 예정이니 ct를 기억해주세요.

RandomForestClassifier



분류자를 위한 또 다른 파이썬 코드.

from sklearn.ensemble import RandomForestClassifier


이 섹션은 여기까지입니다! 코딩의 추가 단계가 곧 올 것입니다.

결과



OneHotEncoder



인코더의 유용한 기능 또는 속성 중 하나는 get_feature_names()입니다. 그러면 인코딩과 관련된 모든 변수 이름이 표시됩니다. 코드와 출력을 살펴보겠습니다. 위의 CT가 돌아왔다는 것을 기억하세요.

ct.get_feature_names()




연령 열이 성공적으로 인코딩되었습니다. 파이프라인을 사용하면 어떻게 될까요? 먼저 파이프라인을 인스턴스화하겠습니다.

# import library
from imblearn.pipeline import Pipeline

# instantiate pipeline using column transformer and 
# model from classifier
pipe2 = Pipeline(steps=[('ct', ct),
                        ('rfc', RandomForestClassifier(random_state=1, 
                                                       max_depth = 9))
                       ]
                )
pipe2.fit(X_train_labeled, y_train)


파이프라인 모델인 pipe2는 이 포스트에서 여러 번 돌아올 예정이니 주목해주세요. 다음은 마법 코드입니다.

pipe2.steps[0][1].get_feature_names()



방금 무슨 일이 일어났나요? 파이프라인은 수행된 단계를 표시할 수 있으며 각 단계가 호출된 후 각 단계의 특성을 사용할 수 있습니다.

위 이미지에서 볼 수 있듯이 파이프라인 단계는 튜플 목록으로 저장됩니다. 아래 그림과 같이 각 단계를 호출할 수 있습니다.

그런 다음 사용 가능한 속성을 사용하여 필요한 정보를 얻을 수 있습니다.

RancomForestClassifier



분류기로 반복하겠습니다. 파이프라인 없이 시작해 봅시다.

rfc=RandomForestClassifier(random_state=1, max_depth = 9)
X_train_labeled_ct = ct.fit_transform(X_train_labeled)
rfc.fit(X_train_labeled_ct, y_train)
rfc.feature_importances_



여기 파이프라인이 있는 것이 있습니다.

일단 파이프라인이 선언되면 코딩이 단순화되는 것을 볼 수 있습니다.

신청



위의 결과를 사용하여 아래와 같이 할 수 있습니다!

# graph of the features sorted by the impact level on the analysis
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# extract feature importance scores and feature names
# then merge them
feat_impt = pd.concat([pd.DataFrame(pipe2.steps[1][1].feature_importances_, 
                                    columns = ['FI_score']),
                       pd.DataFrame(pipe2.steps[0][1].get_feature_names(), 
                                    columns = ['Features'])],
                      axis = 1
                     )

# sort descending by importance
feat_impt.sort_values(by = 'FI_score', inplace=True)

# print graph of the top 20 important features
plt.figure(figsize=(8,9))
plt.barh(range(20), feat_impt.FI_score[-20:], align='center') 
plt.yticks(np.arange(20), feat_impt.Features[-20:]) 
plt.xlabel('Feature importance')
plt.ylabel('Feature');


좋은 웹페이지 즐겨찾기