2017-05-23 5 views
0

私は、カテゴリの数値フィーチャ、文字列インデックスのカテゴリのフィーチャの組み合わせを取り込み、次にカテゴリのフィーチャをホットエンコードし、次にホットエンコードされたカテゴリのフィーチャランダムなフォレストでそれらを実行し、結果のツリーを印刷します。ツリーノードに元の機能名(Frame_Sizeなど)が必要です。どうやってやるの?一般的に、ホットエンコードされ組み立てられた機能をどのようにデコードできますか?pyspark unindexワンホットエンコードおよびアセンブルされた列

# categorical features : start singindexing and one hot encoding 
    column_vec_in = ['Commodity','Frame_Size' , 'Frame_Shape', 'Frame_Color','Frame_Color_Family','Lens_Color','Frame_Material','Frame_Material_Summary','Build', 'Gender_Global', 'Gender_LC'] # frame Article_Desc not slected because the cardinality is too high 
    column_vec_out = ['Commodity_catVec', 'Frame_Size_catVec', 'Frame_Shape_catVec', 'Frame_Color_catVec','Frame_Color_Family_catVec','Lens_Color_catVec','Frame_Material_catVec','Frame_Material_Summary_catVec','Build_catVec', 'Gender_Global_catVec', 'Gender_LC_catVec'] 

    indexers = [StringIndexer(inputCol=x, outputCol=x+'_tmp') for x in column_vec_in ] 

    encoders = [OneHotEncoder(dropLast=False, inputCol=x+"_tmp", outputCol=y) for x,y in zip(column_vec_in, column_vec_out)] 
    tmp = [[i,j] for i,j in zip(indexers, encoders)] 
    tmp = [i for sublist in tmp for i in sublist] 



    #categorical and numeric features 
    cols_now = ['SODC_Regular_Rate','Commodity_catVec', 'Frame_Size_catVec', 'Frame_Shape_catVec', 'Frame_Color_catVec','Frame_Color_Family_catVec','Lens_Color_catVec','Frame_Material_catVec','Frame_Material_Summary_catVec','Build_catVec', 'Gender_Global_catVec', 'Gender_LC_catVec'] 
    assembler_features = VectorAssembler(inputCols=cols_now, outputCol='features') 
    labelIndexer = StringIndexer(inputCol='Lens_Article_Description_reduced', outputCol="label") 
    tmp += [assembler_features, labelIndexer] 



    # converter = IndexToString(inputCol="featur", outputCol="originalCategory") 
    # converted = converter.transform(indexed) 


    pipeline = Pipeline(stages=tmp) 

    all_data = pipeline.fit(df_random_forest_P_limited).transform(df_random_forest_P_limited) 


    all_data.cache() 
    trainingData, testData = all_data.randomSplit([0.8,0.2], seed=0) 


    rf = RF(labelCol='label', featuresCol='features',numTrees=10,maxBins=800) 
    model = rf.fit(trainingData) 

    print(model.toDebugString) 

スパークマシンの学習パイプラインを実行した後、ランダムフォレストをツリーとして印刷したいと考えています。現在、以下のようになっています。 enter image description here

実際に見たいのは、フィーチャ1、フィーチャ2などの代わりに元のカテゴリのフィーチャ名です。カテゴリのフィーチャがホットエンコードされ、ベクターがアセンブルされているため、フィーチャのインデックスを解除/デコードできません名前。どのように私はonehotエンコードされ、組立てられた特徴ベクトルをpysparkでunidex/decodeできますか?私は "IndexToString()"を使用しなければならないという曖昧な考え方がありますが、数値的、分類的な特徴が混在しており、それらがエンコードされ、組み立てられているため、正確にはわかりません。

答えて

0

JPMML-SparkMLライブラリを使用して、Apache Spark MLパイプラインをPMMLドキュメントにエクスポートします。 PMML文書は、人間によって(例えばメモ帳を使用して)検査および解釈されるか、プログラム的に処理されます(たとえば、他のJava PMML APIライブラリを使用して)。

「モデルスキーマ」は/PMML/MiningModel/MiningSchema要素で表されます。各「アクティブフィーチャ」はMiningField要素で表されます。対応する/PMML/DataDictionary/DataField要素を参照することで、 "型定義"を取得できます。

編集:あなたはPySparkについて尋ねられたので、あなたが輸出用JPMML-SparkML-Packageパッケージを使用して検討するかもしれません。

+0

データをエクスポートする必要がありますか、またはいくつかの属性や関数を使用してSchema&Datafieldを表示できますか? – pratiklodha

関連する問題