Как ограничить количество объектов, нанесенных на график важности объектов в Дереве классификаторов решений? - PullRequest
0 голосов
/ 11 апреля 2020

Я оцениваю свой Классификатор дерева решений и пытаюсь нанести на график значения функций. График распечатывается правильно, но он печатает все (более 80) функций, что создает очень грязное изображение. Я пытаюсь понять, как я могу ограничить черчение только важными переменными в порядке важности.

Ссылка на набор данных для загрузки в рабочий каталог с именем ("Файл): https://github.com/Arsik36/Python

Минимальный воспроизводимый код:

   import pandas as pd
        import matplotlib.pyplot as plt
        import seaborn as sns
        from sklearn.model_selection import train_test_split  
        from sklearn.tree import DecisionTreeClassifier

        file = 'file.xlsx'
        my_df = pd.read_excel(file)

        # Determining response variable
        my_df_target = my_df.loc[ :, 'Outcome']

        # Determining explanatory variables
        my_df_data = my_df.drop('Outcome', axis = 1)

        # Declaring train_test_split with stratification
        X_train, X_test, y_train, y_test = train_test_split(my_df_data,
                                                            my_df_target,
                                                            test_size = 0.25,
                                                            random_state = 331,
                                                            stratify = my_df_target)

    # Declaring class weight
    weight = {0: 455, 1:1831}

    # Instantiating Decision Tree Classifier
    decision_tree = DecisionTreeClassifier(max_depth = 5,
                                           min_samples_leaf = 25,
                                           class_weight = weight,
                                           random_state = 331)

    # Fitting the training data
    decision_tree_fit = decision_tree.fit(X_train, y_train)

    # Predicting on the test data
    decision_tree_pred = decision_tree_fit.predict(X_test)

# Declaring the number of features in the X_train data
n_features = X_train.shape[1]

# Setting the plot window
figsize = plt.subplots(figsize = (12, 9))

# Specifying the contents of the plot
plt.barh(range(n_features), decision_tree_fit.feature_importances_, align = 'center')
plt.yticks(pd.np.arange(n_features), X_train.columns)
plt.xlabel("The degree of importance")
plt.ylabel("Feature")

Токовый выход, который я пытаюсь ограничить только важными функциями: enter image description here

1 Ответ

1 голос
/ 12 апреля 2020

Вам нужно изменить весь свой код для удаления объектов с низкой важностью, попробуйте это (не проверено):

# Setting the plot window
figsize = plt.subplots(figsize = (12, 9))

featues_mask = tree.feature_importances_> 0.005

# Specifying the contents of the plot
plt.barh(range(sum(featues_mask)), tree.feature_importances_[featues_mask], align = 'center')
plt.yticks(pd.np.arange(sum(featues_mask)), X_train.columns[featues_mask])
plt.xlabel("The degree of importance")
plt.ylabel("Feature")
...