Как L2 нормализовать список списков в Python, используя Sklearn - PullRequest
0 голосов
/ 27 марта 2020
s2 = [[0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194], [0.2, 0.4892574205256839, 0.2, 0.2, 0.383258146374831], [0.3193817886456925, 0.16666666666666666, 0.16666666666666666, 0.16666666666666666, 0.3193817886456925, 0.3193817886456925], [0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194]]

from sklearn.preprocessing import normalize
X = normalize(s2)

это ошибка сгенерирования:

ValueError: setting an array element with a sequence.

Как L2 Нормализовать список списков в Python, используя Sklearn.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Важно: я удалил один элемент из 3-го списка, чтобы все списки имели одинаковую длину.

Я сделал это, потому что я действительно считаю, что это ошибка копирования-вставки. Если нет, прокомментируйте ниже, и я изменю свой ответ.

import numpy as np

s2 = [[0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194], [0.2, 0.4892574205256839, 0.2, 0.2, 0.383258146374831], [0.3193817886456925, 0.16666666666666666, 0.16666666666666666, 0.3193817886456925, 0.3193817886456925], [0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194]]

X = normalize(np.array(s2))
0 голосов
/ 27 марта 2020

Так как у меня недостаточно репутации, чтобы комментировать; следовательно, отправив его как ответ.

Давайте быстро посмотрим на вашу точку данных.

Я преобразовал данную точку данных в массив NumPy. Поскольку он не имеет одинаковую длину, он будет выглядеть следующим образом.

>>> n2 = np.array([[0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194], [0.2, 0.4892574205256839, 0.2, 0.2, 0.383258146374831], [0.3193817886456925, 0.16666666666666666, 0.16666666666666666, 0.16666666666666666, 0.3193817886456925, 0.3193817886456925], [0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194]])
>>> n2
array([list([0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194]),
       list([0.2, 0.4892574205256839, 0.2, 0.2, 0.383258146374831]),
       list([0.3193817886456925, 0.16666666666666666, 0.16666666666666666, 0.16666666666666666, 0.3193817886456925, 0.3193817886456925]),
       list([0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194])],
      dtype=object)

И здесь вы можете видеть, что преобразованные значения не входят в последовательность значений, и для достижения этого вам необходимо сохранить одинаковую длину для внутреннего списка (похоже, что 0,16666666666666666 копируется в ваш массив несколько раз; если нет, то исправьте длину), он будет выглядеть так:

>>> n3 = np.array([[0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194], [0.2, 0.4892574205256839, 0.2, 0.2, 0.383258146374831], [0.3193817886456925, 0.16666666666666666, 0.16666666666666666, 0.16666666666666666, 0.319381788645692], [0.2, 0.2, 0.2, 0.3021651247531982, 0.24462871026284194]])
>>> n3
array([[0.2       , 0.2       , 0.2       , 0.30216512, 0.24462871],
       [0.2       , 0.48925742, 0.2       , 0.2       , 0.38325815],
       [0.31938179, 0.16666667, 0.16666667, 0.16666667, 0.31938179],
       [0.2       , 0.2       , 0.2       , 0.30216512, 0.24462871]])

Как вы можете видеть, теперь n3 стал последовательностью значений.

и если вы используете функцию нормализации, она просто работает

>>> X = normalize(n3)
>>> X
array([[0.38408524, 0.38408524, 0.38408524, 0.58028582, 0.46979139],
       [0.28108867, 0.6876236 , 0.28108867, 0.28108867, 0.53864762],
       [0.59581303, 0.31091996, 0.31091996, 0.31091996, 0.59581303],
       [0.38408524, 0.38408524, 0.38408524, 0.58028582, 0.46979139]])

Как использовать массив NumPy, чтобы избежать этой проблемы, пожалуйста, посмотрите на эту ссылку SO ValueError: установка элемента массива с последовательностью

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