<commit_before>"""
=========================================
Feature importances with forests of trees
=========================================

This examples shows the use of forests of trees to evaluate the importance of
features on an artifical classification task.

As expected, the knee in the plot suggests that 3 features are informative,
while the remaining are not.
"""
print __doc__

import numpy as np

from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier

# Build a classification task using 3 informative features
X, y = make_classification(n_samples=1000,
                           n_features=10,
                           n_informative=3,
                           n_redundant=0,
                           n_repeated=0,
                           n_classes=2,
                           random_state=0,
                           shuffle=False)

# Build a forest and compute the feature importances
forest = RandomForestClassifier(n_estimators=50, random_state=0)
forest.fit(X, y)
importances = forest.feature_importances()
indices = np.argsort(importances)[::-1]

# Print the feature ranking
print "Feature ranking:"

for f in xrange(10):
    print "%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]])

# Plot the feature importances
import pylab as pl
pl.figure()
pl.title("Sorted feature importances")
pl.plot(xrange(10), importances[indices])
pl.show()<commit_msg>EXAMPLE: Improved plot_forest_importances.py plot<commit_after>"""
=========================================
Feature importances with forests of trees
=========================================

This examples shows the use of forests of trees to evaluate the importance of
features on an artifical classification task. The red plots are the feature
importances of each individual tree, and the blue plot is the feature importance
of the whole forest.

As expected, the knee in the blue plot suggests that 3 features are informative,
while the remaining are not.
"""
print __doc__

import numpy as np

from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier

# Build a classification task using 3 informative features
X, y = make_classification(n_samples=1000,
                           n_features=10,
                           n_informative=3,
                           n_redundant=0,
                           n_repeated=0,
                           n_classes=2,
                           random_state=0,
                           shuffle=False)

# Build a forest and compute the feature importances
forest = RandomForestClassifier(n_estimators=50, random_state=0)
forest.fit(X, y)
importances = forest.feature_importances()
indices = np.argsort(importances)[::-1]

# Print the feature ranking
print "Feature ranking:"

for f in xrange(10):
    print "%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]])

# Plot the feature importances of the trees and of the forest
import pylab as pl
pl.figure()
pl.title("Feature importances")

for tree in forest.estimators_:
    pl.plot(xrange(10), tree.feature_importances()[indices], "r")

pl.plot(xrange(10), importances[indices], "b")

pl.show()
{'fraction_non_alphanumeric': 0.1244153414405987, 'fraction_numerical': 0.014343623323978797, 'mean_word_length': 3.1879895561357703, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2880066', 'n_tokens_mistral': 888, 'n_tokens_neox': 840, 'n_words': 298}