Как передать многомерные данные в модель xgboost - PullRequest
0 голосов
/ 26 апреля 2018

По сути, это то, что у меня есть для xgboost

model = XGBClassifier()

model.fit(X_train, y_train)

Где X_train и y_train - массивы numpy.Моя проблема в том, что X_train, кажется, должен принимать формат числовой матрицы, где каждая строка представляет собой набор чисел, таких как:

[1, 5, 3, 6]

Однако данные, которые у меня есть, находятся в форматенабор векторов.Каждый вектор состоит из числа от 1 до 3 и доверительного интервала от 0 до 1. Таким образом, строка моего X_train будет выглядеть так:

[[1, .84], [2, .5], [3, .44], [2, .76]]

Однако я не могу понять,как я передаю данные в этом формате в xgboostЯ довольно новичок в xgboost, поэтому я читаю документацию, но не могу найти то, что ищу.Спасибо за любую помощь.

1 Ответ

0 голосов
/ 27 апреля 2018

Подход 1 :

Я бы порекомендовал сделать 3 столбца для каждой системы, которая имеет вероятность всех 3 классов для этой системы.А затем объедините эти столбцы для всех систем.

Примерно так:

Index   Sys1_Cls1  Sys1_Cls2  Sys1_Cls3  Sys2_Cls1  Sys2_Cls2  Sys2_Cls3  \
    0   0.310903   0.521839   0.167258   0.034925   0.509087   0.455988   
    1   0.402701   0.315302   0.281997   0.044981   0.137326   0.817693   
    2   0.272443   0.409210   0.318347   0.591514   0.170707   0.237778   
    3   0.272599   0.304014   0.423388   0.175838   0.324275   0.499887   
    4   0.339352   0.341860   0.318788   0.574995   0.169180   0.255824   

       Sys3_Cls1  Sys3_Cls2  Sys3_Cls3  Sys4_Cls1  Sys4_Cls2  Sys4_Cls3  
       0.173293   0.279590   0.547117   0.441913   0.251394   0.306692  
       0.224656   0.425100   0.350244   0.430451   0.382072   0.187476  
       0.198573   0.603826   0.197600   0.412734   0.185472   0.401795  
       0.011399   0.598892   0.389709   0.057813   0.651510   0.290677  
       0.025087   0.478595   0.496317   0.539963   0.288596   0.171440  

Здесь 'Sys1_Cls1' означает вероятность System1 для class1 и т. Д.

Это может быть ваш X.Для y присвойте фактический класс, который у вас есть для этого образца.

Таким образом, форма вашего X будет (n_samples, 12), а y будет (n_samples).

Если у вас есть больше систем, они могут быть аналогичным образом добавлены как функции (столбцы).

Подход 2 : Другое состоит в том, что вы берете сумму, или среднее (или средневзвешенное) для всех систем.для определенного класса.В этом случае у вас будет только 3 столбца независимо от систем.

  Index       Cls1      Cls2      Cls3
    0       0.187362  0.151723  0.660914
    1       0.378118  0.293932  0.327950
    2       0.424903  0.278271  0.296825
    3       0.342273  0.274003  0.383723
    4       0.405926  0.104094  0.489981

Где конкретные значения в столбце могут быть:

cls1_val = Sys1_Cls1 + Sys2_Cls1 + Sys3_Cls1 + ...

OR

cls1_val = (Sys1_Cls1 + Sys2_Cls1 + Sys3_Cls1 + ...)/number_systems

OR

cls1_val = (weight1 x Sys1_Cls1 + weight2 x Sys2_Cls1 + weight3 x Sys3_Cls1 + ...)/number_systems

Здесь форма X будет (n_samples, 3)

Попробуйте использовать разные подходы и сохраните то, что работает лучше.

Примечание: Кстати, чего вы пытаетесь достичь, комбинируя вероятности разных систем итогда окончательное предсказание финального класса называется стекированием.Для получения дополнительной информации см. Эти ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...