Важность функции классификатора случайных лесов pyspark с именами столбцов - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь нанести на график значения функций классификатора случайных лесов с именами столбцов Я использую 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)

и пусто {}

Есть мысли о том, что я делаю не так? Как я могу получить значения функций для имен столбцов.

Спасибо

1 Ответ

0 голосов
/ 15 февраля 2019

Мне не удалось решить проблему пустых метаданных, но я не сопоставил значения функций классификатора случайных лесов с именами столбцов - я получаю его с помощью приведенного ниже кода:

feature_importances = model.stages[-2].featureImportances
feature_imp_array = feature_importances.toArray()

feat_imp_list = []
for feature, importance in zip(tf_model.vocabulary, feature_imp_array):
    feat_imp_list.append((feature, importance))

feat_imp_list = sorted(feat_imp_list, key=(lambda x: x[1]), reverse=True)

top_features = feat_imp_list[0:50]
...