sklearn.KBinsDiscretizer возвращает 0 для всех корзин - PullRequest
0 голосов
/ 13 октября 2019

У меня есть нарра в форме (1188). Пытается создать ячейки с помощью KBinsDiscretizer, но возвращает только аннотированные ячейки с нулями.

 # transform the dataset with KBinsDiscretizer
    enc = KBinsDiscretizer(n_bins=18, encode='ordinal' ,strategy='uniform')#strategy='uniorm'

    test =(np.asarray(list_event_MES).astype(np.float)).reshape(1, -1)
    print(test)
    print(test.shape)

    enc.fit(test)
    test2 = enc.transform(test)
    print(test2.tolist())

Возвращает ноль для всех корзин.

Ввод матрицы: [[0.13614053 0.14069501 0.08270327 0.260150960,15958708 0,16834299 0,14913976 0,11897561 0,23232807 0,0892398 0,1637264 0,17120459 0,19350733 0,18131615 0,21717186 0,1586006 0,19068352 0,24293008. .... 0,2112216 0,21829195 0,28169516 0,27585681 0,27317305 0,1849694 0,23402622 0,24994829 0,20994829 0,25534803 0,15556027 0,27226802 0 0,14180543 0,24001428]]

форма: (1, 188) * 100 * мин. * 100 * * 0/python3.7/site-packages/sklearn/preprocessing/_discretification.py:159: UserWarning: функция 0 постоянна и будет заменена на 0. "заменена на 0."% jj) /miniconda3/lib/python3.7/site-packages/sklearn/preprocessing/_discretification.py:159: UserWarning: функция 1 постоянна и будет заменена на 0. «заменяется на 0.»% jj) /miniconda3/lib/python3.7/site-packages/sklearn/preprocessing/_discretification.py:159: UserWarning: функция 2 постоянна и будет заменена на 0. «заменяется на 0.»% jj)

1 Ответ

1 голос
/ 13 октября 2019

По форме вашего массива (1,188) мы можем сделать вывод, что имеется только 1 семпл и 188 функций. Согласно документации из KBinsDiscretizer, она используется для объединения непрерывных данных в интервалы, и это происходит на уровне объекта, то есть для каждой функции (или, другими словами, для каждого столбца ваших данных) KBinsDiscretizer вычисляет интервалы бинов, а затем связывает ваши данные, пример которых показан ниже:

X = [[-2, 1, -4,   -1],
     [-1, 2, -3, -0.5],
     [ 0, 3, -2,  0.5],
     [ 1, 4, -1,    2]]
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit(X)  

Xt = est.transform(X)
Xt  

array([[ 0., 0., 0., 0.],
      ​[ 1., 1., 1., 0.],
      ​[ 2., 2., 2., 1.],
      ​[ 2., 2., 2., 2.] 

Здесь для каждого столбца дискретизатор вычисляет интервалы бинов и связывает их. В вашем случае у вас есть только одна точка данных для каждой функции, поэтому вычисления в бинах не имеют никакого смысла. Вместо этого, если ваши данные имеют форму (188,1), то есть с 188 примерами и 1, тогда они отлично работают, как показано ниже:

enc = KBinsDiscretizer(n_bins=18, encode='ordinal' ,strategy='uniform')
list_event_MES = np.random.normal(0,2,188).reshape(-1,1)
test =(np.asarray(list_event_MES))
print(test.shape)
(188,1)

enc.fit(test)
test2 = enc.transform(test)

print(test2[0:5])

array([[12.],
   [12.],
   [ 7.],
   [ 9.],
   [ 3.]])

Надеюсь, это поможет!

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