Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn

Вступ

Команда Випадковий ліс algorithm — це алгоритм керованого навчання на основі дерева, який використовує сукупність передбачень багатьох дерев рішень для класифікації точки даних або визначення її приблизного значення. Це означає, що його можна використовувати для класифікації або регресії.

При застосуванні для класифікації клас точки даних вибирається на основі класу, який отримав найбільше голосів дерев; а коли застосовується для регресії, значення точки даних є середнім усіх значень, виведених деревами.

Під час використання випадкових лісів важливо пам’ятати, що кількість дерев є гіперпараметром, і його буде визначено перед запуском моделі.

Під час роботи в галузі науки про дані одна з причин, чому модель випадкового лісу була обрана для конкретного проекту, могла бути пов’язана з можливістю дивитися на ансамбль дерев і розуміти чому була зроблена класифікація, або чому надано значення – це називається пояснюваність.

Враховуючи алгоритми на основі дерева, спробу пояснити модель можна зробити кількома способами, шляхом відображення та перегляду кожного дерева (може бути важко, якщо модель містить 200 дерев або більше), використовуючи Значення Шеплі (або SHAP)., дивлячись на функції, які найбільше враховувала модель, використовуючи LIME для дослідження зв’язків між входом і виходом моделі тощо. Зазвичай використовується комбінація всіх методів.

У цьому короткому посібнику ми зосередимося на створенні діаграми ознак, які вважалися важливими для моделі, щоб прийняти рішення під час класифікації пінгвінів. Це відомо як розслідування важливість функції, і може бути передано іншим членам команди (технічним і нетехнічним), щоб запропонувати уявлення про те, як приймаються рішення.

Для цього давайте імпортуємо необхідні бібліотеки, завантажимо набір даних Palmer Penguins, розділимо дані, створимо модель, отримаємо важливість функцій і використаємо Seaborn, щоб побудувати їх! Ми не будемо багато вникати в дані, EDA або саму модель – це тема спеціального посібника.

Примітка: Ви можете завантажити набір даних з GitHub або безпосередньо з коду.

Імпорт бібліотек

Давайте почнемо з імпорту кількох бібліотек, які ми будемо використовувати:


import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier


raw_data_url = "https://gist.githubusercontent.com/cassiasamp/197b4e070f5f4da890ca4d226d088d1f/raw/38c9d4906ed121481b4dc201fa2004f2b3d0065f/penguins.csv"
df = pd.read_csv(raw_data_url)

Поділ даних

Давайте розділимо дані для навчання та тестування:


df = df.dropna().drop("rowid", axis=1)


y = df["species"]
X = df[["bill_length_mm", "bill_depth_mm", "flipper_length_mm"]]


X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Отримання важливості функцій

Нарешті, ми можемо навчити модель і експортувати значення функцій за допомогою:


rf = RandomForestClassifier()


rf.fit(X_train, y_train)


rf.feature_importances_

Це виводить:

array([0.41267633, 0.30107056, 0.28625311])

Це значення функцій, щоб побачити назви функцій, виконайте:


rf.feature_names_in_

Це призводить до відповідної назви кожної функції:

array(['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm'],
      dtype=object)

Це означає, що найважливішою особливістю для визначення класів пегінів для цієї конкретної моделі була bill_length_mm!

Важливість залежить від міри того, наскільки добре дані розділяються в кожному розділі вузла – у цьому випадку міра визначається Індекс Джині – значення Джіні потім зважується на кількість розділених рядків під час використання bill_length_mm і в середньому по 100 дерев в ансамблі. Результат цих кроків враховується 0.41267633, або більше 40% у цьому випадку.

Візуалізація важливості функції

Поширеним способом представлення цінностей важливості є використання бар-чатів. Давайте спочатку створимо фрейм даних із назвами функцій та їх відповідними значеннями, а потім візуалізуємо їх за допомогою Seaborn barplot():


importances_df = pd.DataFrame({"feature_names" : rf.feature_names_in_, 
                               "importances" : rf.feature_importances_})
                             

g = sns.barplot(x=importances_df["feature_names"], 
                y=importances_df["importances"])
g.set_title("Feature importances", fontsize=14);                          

Поради: Хорошою практикою під час подання інформації є впорядкування значень у порядку зростання або спадання. У цьому випадку дані вже впорядковані, причому перше значення є першим, яке ми хочемо знати. Якщо це не так, ви можете замовити фрейм даних за допомогою sort_values. Це можна зробити в будь-якому стовпці в порядку зростання або спадання: importances_df.sort_values(by="importances", ascending=False).

Дивлячись на цей перший графік, важче інтерпретувати значення важливості кожної функції. Очевидно, що довжина банкноти більша, ніж у двох інших смуг, але не зовсім так bill_depth_mm еквівалентна 0.30107056, і що flipper_length_mm становить 0.28625311. Отже, цю першу діаграму можна покращити, відобразивши значення кожного стовпчика. Це можна зробити, увійшовши до Seaborn's containers об'єкт. Він зберігає інформацію про кожен стовпчик і передає значення як мітки стовпчика:

Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Тепер ми можемо чітко або майже чітко бачити кожне значення важливості, оскільки bill_length_mm значення обрізається вертикальною лінією, яка є частиною зовнішньої межі діаграми. Межі використовуються, щоб огородити область, щоб привернути до неї більше уваги, але в цьому випадку нам не потрібно огороджувати, оскільки є лише один графік. Давайте приберемо рамку та покращимо читабельність чисел:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
                

sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Діаграму здається легшою для читання, але галочки на осі X ніби плавають, і ми вже маємо значення разом із стовпчиками, тому ми можемо видалити xticks:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)


g.set(xticks=[])
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Зверніть увагу, що після видалення галочок мітки Y і X трохи важко читати. Y-мітка, feature_names, є вертикальним і на осі X є лише importances. Оскільки в назві вже зазначено, що діаграма складається з Важливість функцій, ми також можемо видалити мітки осей:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])


g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value)

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Ви можете побачити, наскільки ця діаграма чистіша, легша для читання та розуміння в порівнянні з першою. Є ще деякі речі, які ми можемо зробити. Зверніть увагу, що цифри розташовані дуже близько до смужок, їх було б легше прочитати, якби між ними було трохи більше місця.

Іншим елементом цього сюжету є кольори, коли використовуються контрастні кольори, це передає ідею розділеності, навпаки, коли використовуються подібні кольори, вони передають ідею єдності або частин цілого. Оскільки всі функції є частиною пінгвінів, ми можемо використовувати кольори, які роблять кожну смужку відмінною, зберігаючи єдність:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names",
                
                
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, 
                padding=2) 

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Якщо ви хочете зробити результати ще більш прямими, ви можете змінити назву та додати висновок. Відомо лише те, що довжина купюри вважалася найважливішою характеристикою відповідно до критеріїв, які ми обговорювали раніше. Це може бути перша інформація для тих, хто дивиться на сюжет, можна так сказати довжина дзьоба пінгвіна була найважливішою характеристикою для класифікації видів у базовій моделі випадкового лісу (РФ). :

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names", 
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("The penguin's bill length was the most important feature for species classification (RF base model)", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, padding=2)

Ось остаточний результат таблиці важливості функцій:

Отримайте важливість функцій для випадкових лісів за допомогою Python і Scikit-Learn PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Висновок

У цьому посібнику ми створили Класифікатор випадкових лісів і перевірили важливість функцій, які використовувалися для навчання моделі в спробі пояснювати чого навчилася модель і що впливає на її міркування.

Часова мітка:

Більше від Stackabuse