다음과 같은 코드를 사용하여 범주 형, 숫자 형, 문자열 형의 범주 형 기능을 혼합 한 다음 단호한 형식으로 코드화 한 다음 핫 코드 형 범주 형 기능을 모두 어셈블합니다 숫자 기능을 사용하여 무작위로 숲을 굴려 결과 트리를 인쇄합니다. 트리 노드가 원래 기능 이름 (예 : Frame_Size 등)을 갖기를 원합니다. 어떻게해야합니까? 일반적으로 어떻게 하나의 핫 인코딩 및 어셈블 된 기능을 디코딩 할 수 있습니까?pyspark unindex one-hot으로 인코딩 및 어셈블 된 열
# 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을 인코딩/디코딩 할 수 있습니까? "IndexToString()"을 사용해야한다는 막연한 생각이 있지만 숫자, 범주 형 기능이 혼합되어있어 하나의 핫 인코딩 및 어셈블 링이 이루어지기 때문에 확실하지 않습니다.
데이터를 내 보내야합니까, 아니면 일부 속성이나 기능을 사용하여 스키마 및 데이터 필드를 볼 수 있습니까? – pratiklodha