Как построить базовую модель для прогнозирования Y с несколькими значениями с помощью skLearn

#python #machine-learning #scikit-learn

Вопрос:

У меня есть образец фрейма данных, который выглядит следующим образом. Я хотел бы построить базовую модель для прогнозирования y_combined с использованием X=df.filter(regex='x_') :

 df = pd.DataFrame({
    'x_1':[0.1,0.2,0.1,0],
    'x_2':[0.5,0.1,0.3,0.4],
    'x_3':[0.2,0.1,0.6,0.1],
    'x_4':[0,0.5,0.2,0.3],
    'y_1': [0, 1, 1, 0],
    'y_2': [0, 0, 1, 0],
    'y_3': [0, 1, 0, 1],
    'y_combined': [np.array([0, 0, 0]), np.array([1, 0, 1]),
                   np.array([1, 1, 0]), np.array([0, 0, 1])]
})
 

введите описание изображения здесь

Я новичок в построении базовой модели. Чтобы получить y_predicted , как я должен указать модель DummyClassifer() с strategy="constant" помощью ? Или есть другая стратегия, которую я должен использовать?

Например, если y_predicted = [1,1,1] , то я посмотрю, насколько хорошо работает модель прогнозирования, получив среднюю центроиду между y_combined и y_predicted .

Ответ №1:

Я отвечу на ваш вопрос при условии, что вы хотите DummyClassifier использовать strategy='constant' параметр «Использование» для построения базовой модели для задачи классификации с несколькими метками, где выходные данные равны y_combined df . В этом случае будет работать следующий код:

 from sklearn.dummy import DummyClassifier
import numpy as np
import pandas as pd


X = pd.DataFrame({
    'x_1': [0.1,0.2,0.1,0],
    'x_2': [0.5,0.1,0.3,0.4],
    'x_3': [0.2,0.1,0.6,0.1],
    'x_4': [0,0.5,0.2,0.3]
})
y = np.array([[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 0, 1]])

clf = DummyClassifier(strategy='constant', constant=np.array([1, 1, 1]))
clf.fit(X, y)
 

Обратите внимание, что при использовании strategy='constant' вы также должны указать постоянное значение, которое должно быть предсказано с помощью constant=... параметра DummyClassifier . Вы увидите, что базовая модель теперь всегда будет предсказывать указанное постоянное значение, независимо от входных данных:

 y_pred = clf.predict(X)
print(y_pred)

# output
[[1 1 1]
 [1 1 1]
 [1 1 1]
 [1 1 1]]
 

Поскольку вы также спрашивали о других стратегиях, вы можете в принципе выбрать любую из стратегий, упомянутых в документации DummyClassifier . Все они имеют общее поведение, как указано в руководстве пользователя:

Обратите внимание, что при использовании всех этих стратегий метод прогнозирования полностью игнорирует входные данные!

Комментарии:

1. Большое спасибо! Поскольку мои фактические данные содержат 48 столбцов Y, я установил константу=np.full( форма=48, значение fill_value=1, dtype=np.int ) Однако это дало мне ошибку «Постоянное целевое значение должно иметь форму (1, 1)».»

2. Нет ничего плохого в том, как вы устанавливаете константу. Сообщение об ошибке , но указывает, что форма вашего массива с целевыми значениями ( y в примере) (1, 1) , в отличие от постоянного значения, которое, по-видимому, имеет (48,) . Вы должны выровнять форму массива с целевыми значениями и формой константы. Тогда это сработает.