Я пытаюсь нанести на график значения функций классификатора случайных лесов с именами столбцов Я использую Spark 2.3.2 и Pyspark.
Ввод X - это предложения, и я использую tfidf (HashingTF + IDF) + StringIndexer для генерации векторов объектов.
Я включил все этапы в конвейер.
regexTokenizer = RegexTokenizer(gaps=False, \
inputCol= raw_data_col, \
outputCol= "words", \
pattern="[a-zA-Z_]+", \
toLowercase=True, \
minTokenLength=minimum_token_size)
hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=number_of_feature)
idf = IDF(inputCol="rawFeatures", outputCol= feature_vec_col)
indexer = StringIndexer(inputCol= label_col_name, outputCol= label_vec_name)
converter = IndexToString(inputCol='prediction', outputCol="original_label", labels=indexer.fit(df).labels)
feature_pipeline = Pipeline(stages=[regexTokenizer, hashingTF, idf, indexer])
estimator = RandomForestClassifier(labelCol=label_col, featuresCol=features_col, numTrees=100)
pipeline = Pipeline(stages=[feature_pipeline, estimator, converter])
model = pipeline.fit(df)
Генерация значений функций как
rdc = model.stages[-2]
print (rdc.featureImportances)
Пока все хорошо, но когда я пытаюсь отобразить значения объектов в столбцы объектов, используя пример в this и this вопросов, как показано ниже
attrs = sorted((attr["idx"], attr["name"]) for attr in (chain(*df_pred.schema["featurescol"].metadata["ml_attr"]["attrs"].values())))
[(name, rdc.featureImportances[idx])
for idx, name in attrs
if dtModel_1.featureImportances[idx]]
Я получаю ошибку ключа на ml_attr
KeyError: 'ml_attr'
печатный словарь,
print (df_pred.schema["featurescol"].metadata)
и пусто {}
Есть мысли о том, что я делаю не так? Как я могу получить значения функций для имен столбцов.
Спасибо