ElasticNetCV в Python: получить полную сетку гиперпараметров с соответствующим MSE?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 ElasticNetCV в Python: получить полную сетку гиперпараметров с соответствующим MSE?

Сообщение Anonymous »

Я установил ElasticNetCV в Python с тремя разбиениями:
import numpy as np
from sklearn.linear_model import LinearRegression

#Sample data:
num_samples = 100 # Number of samples
num_features = 1000 # Number of features
X = np.random.rand(num_samples, num_features)
Y = np.random.rand(num_samples)

#Model
l1_ratios = np.arange(0.1, 1.1, 0.1)
tscv=TimeSeriesSplit(max_train_size=None, n_splits=3)
regr = ElasticNetCV(cv=tscv.split(X), random_state=42,l1_ratio=l1_ratios)
regr.fit(X,Y)

Теперь я хочу получить всю сетку комбинаций гиперпараметров с соответствующим MSE в качестве фрейма данных. Я попробовал следующее. Однако проблема заключается в том, что результирующий кадр данных показывает MSE для комбинации гиперпараметров, которые не показаны как минимум в объекте ElasticNetCV, который можно получить с помощью regr.alpha_ и regr.l1_ratio_:
mse_path = regr.mse_path_
alpha_path = regr.alphas_

# Reshape mse_path to have l1_ratios, n_alphas, cross_validation_step as separate columns
mse_values = mse_path.flatten()
alpha_values = alpha_path.flatten()
l1_values=np.tile(l1_ratios ,int(alpha_values.shape[0]/l1_ratios.shape[0]))
repeated_l1_ratios = np.repeat(l1_ratios, 100)

# mse has dimensions (11, 100, 3)
array_3d = mse

# Flatten the 3D array into a 2D array
# Each sub-array of shape (100, 3) becomes a row in the new 2D array
array_2d = array_3d.reshape(-1, 3)

# Create a DataFrame from the 2D array
df = pd.DataFrame(array_2d, columns=['MSE Split1', 'MSE Split2', 'MSE Split3'])

df['alpha_values'] = alpha_values
df['l1_values'] = repeated_l1_ratios

Последующие действия приводят к тому, что комбинация гиперпараметров не является истинной. Итак, при объединении MSE и значений гиперпараметров что-то не так:
# Calculate the minimum MSE for each row across the three splits
df['Min MSE'] = df[['MSE Split1', 'MSE Split2', 'MSE Split3']].min(axis=1)

# Identify the row with the overall minimum MSE
min_mse_row_index = df['Min MSE'].idxmin()

# Retrieve the row with the minimum MSE
min_mse_row = df.loc[min_mse_row_index]

print("Row with the minimum MSE across all splits:")
print(min_mse_row)


Подробнее здесь: https://stackoverflow.com/questions/786 ... onding-mse
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»