2017-05-19 56 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. 實例化分類管道
  2. 外實例化(PMML-)管道,插入該分類進去。
  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

相關問題