Оптимизация производительности случайного леса: изучение взаимосвязи между оценкой F1 и параметрами случайного леса

Чтобы построить график между оценкой F1 и параметрами случайного леса, вам необходимо провести несколько экспериментов, варьируя параметры случайного леса и записывая соответствующие оценки F1. Вот несколько способов добиться этого, а также примеры кода:

Метод 1: изменение одного параметра
В этом методе вы можете исправить все параметры случайного леса, кроме одного, а затем изменять этот параметр в диапазоне значений. Для каждого значения обучите модель случайного леса, рассчитайте оценку F1 и запишите ее. Наконец, постройте график показателей F1 в зависимости от значений параметров.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score
# Define the range of values for the parameter
param_values = np.arange(start_value, end_value, step_size)
# Initialize an empty list to store F1 scores
f1_scores = []
# Train and evaluate the Random Forest model for each parameter value
for param in param_values:
    # Set the parameter value in the Random Forest model
    model = RandomForestClassifier(n_estimators=100, max_depth=10, param=param)

    # Train the model
    model.fit(X_train, y_train)

    # Make predictions on the test set
    y_pred = model.predict(X_test)

    # Calculate the F1 score and append it to the list
    f1 = f1_score(y_test, y_pred)
    f1_scores.append(f1)
# Plot the graph
plt.plot(param_values, f1_scores)
plt.xlabel('Parameter Value')
plt.ylabel('F1 Score')
plt.title('Graph of F1 Score vs. Random Forest Parameter')
plt.show()

Метод 2: изменение нескольких параметров
В этом методе вы можете одновременно изменять несколько параметров случайного леса, используя метод поиска по сетке. Поиск по сетке позволяет определить сетку комбинаций параметров и оценить производительность модели для каждой комбинации. Затем вы можете построить график показателей F1 по различным комбинациям параметров.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score
from sklearn.model_selection import GridSearchCV
# Define the parameter grid
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [5, 10, 15],
}
# Initialize the Random Forest model
model = RandomForestClassifier()
# Perform grid search with cross-validation
grid_search = GridSearchCV(model, param_grid, scoring='f1')
grid_search.fit(X_train, y_train)
# Get the F1 scores for each parameter combination
f1_scores = grid_search.cv_results_['mean_test_score']
# Get the parameter combinations
param_combinations = grid_search.cv_results_['params']
# Plot the graph
plt.figure(figsize=(10, 6))
for i, params in enumerate(param_combinations):
    plt.plot(i, f1_scores[i], 'ro')
    plt.text(i, f1_scores[i], str(params), rotation=45)
plt.xlabel('Parameter Combination')
plt.ylabel('F1 Score')
plt.title('Graph of F1 Score vs. Random Forest Parameters')
plt.xticks(range(len(param_combinations)))
plt.show()

Не забудьте заменить «start_value», «end_value», «step_size», «X_train», «y_train», «X_test» и «y_test» фактическими данными.