2017-05-19 9 views
0

이제 python sklearn에서 'GB'라는 gbdt 모델을 교육했습니다. 그리고이 훈련 된 모델을 pmml 파일로 내보내려고합니다. 그러나 나는이 문제를 만난다 : 1. 훈련 된 'GB'모델을 PMMLpipeline에 넣고 sklearn2pmml을 사용하여 모델을 내보내려고하면.sklearn2pmml을 사용할 때 feature_importance를 얻는 방법

GB = GradientBoostingClassifier(n_estimators=100,learning_rate=0.05) 
GB.fit(train[list(x_features),Train['Target']]) 
GB_pipeline = PMMLPipeline([("classifier",GB)]) 
sklearn2pmml.sklearn2pmml(GB_pipeline,pmml='GB.pmml') 
importance=gb.feature_importances_ 

''active_fields '속성이 설정되지 않았습니다'라는 경고 메시지가 표시됩니다. 그리고 내 보낸 pmml 파일에서 모든 기능의 이름을 잃게됩니다.

  1. PMMLPipeline에서 모델을 직접 훈련 시키려고하면. GB_pipeline에는 feature_importances_ 속성이 없으므로이 모델의 features_importance를 관찰 할 수 없습니다. 아래처럼 :

    GB_pipeline = PMMLPipeline ([("분류", GradientBoostingClassifier (n_estimators = 100, learning_rate = 0.05))]) PMMLPipeline.fit (기차 [목록 (x_features), 기차 [ '대상']]) sklearn2pmml.sklearn2pmml (GB_pipeline, PMML = 'GB.pmml')

    내가 모델의 features_importance을 관찰하고 또한 내 보낸 PMML 파일의 기능의 이름을 유지할 수 있습니다 모두 그렇게해야 어떤

. 대단히 감사합니다!

답변

1

중요 포인트 :

  1. 에서, (PMML-) 파이프 라인을 인스턴스화
  2. 파이프 라인의 외부 분류를 인스턴스화 그것으로이 분류를 삽입합니다.
  3. 전체적으로이 파이프 라인을 맞추십시오.
  4. 이 분류 기준의 피쳐 가져 오기를 인쇄하고이 파이프 라인을 PMML 문서로 내 보냅니다. 첫 번째 코드 예제에서

, 당신은 분류를 피팅하고 있지만 전체 파이프 라인 피팅해야한다 - 파이프 라인의 내부 상태가 불완전 것을 따라서 경고. 두 번째 코드 예제에서는 분류 자에 대한 직접적인 참조가 없습니다 (그러나 해당 파이프 라인의 마지막 단계를 "파싱"하여 얻을 수 있습니다). 조리개 데이터 세트를 기반으로

완전한 예 :

import pandas 
iris_df = pandas.read_csv("Iris.csv") 

from sklearn.ensemble import GradientBoostingClassifier 
from sklearn2pmml import sklearn2pmml, PMMLPipeline 
gbt = GradientBoostingClassifier() 
pipeline = PMMLPipeline([ 
    ("classifier", gbt) 
]) 
pipeline.fit(iris_df[iris_df.columns.difference(["Species"])], iris_df["Species"]) 
print (gbt.feature_importances_) 
sklearn2pmml(pipeline, "GBTIris.pmml", with_repr = True) 
+0

이 작품은 !!!!!!!!!!!!!! 주셔서 감사합니다. 나는 파이프 라인이 무엇인지 이해하지 못하기 때문에 근본적인 이유가 있다고 생각한다. 고마워요! – Noah

+0

따라서이 질문을 마무리하기 위해 내 대답을 수락 된 것으로 표시하십시오. – user1808924