私は、カテゴリの数値フィーチャ、文字列インデックスのカテゴリのフィーチャの組み合わせを取り込み、次にカテゴリのフィーチャをホットエンコードし、次にホットエンコードされたカテゴリのフィーチャランダムなフォレストでそれらを実行し、結果のツリーを印刷します。ツリーノードに元の機能名(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)
スパークマシンの学習パイプラインを実行した後、ランダムフォレストをツリーとして印刷したいと考えています。現在、以下のようになっています。
実際に見たいのは、フィーチャ1、フィーチャ2などの代わりに元のカテゴリのフィーチャ名です。カテゴリのフィーチャがホットエンコードされ、ベクターがアセンブルされているため、フィーチャのインデックスを解除/デコードできません名前。どのように私はonehotエンコードされ、組立てられた特徴ベクトルをpysparkでunidex/decodeできますか?私は "IndexToString()"を使用しなければならないという曖昧な考え方がありますが、数値的、分類的な特徴が混在しており、それらがエンコードされ、組み立てられているため、正確にはわかりません。
データをエクスポートする必要がありますか、またはいくつかの属性や関数を使用してSchema&Datafieldを表示できますか? – pratiklodha