Как нормализовать только определенные столбцы в scikit-learn?



У меня есть данные, подобные следующим:



[
[0, 4, 15]
[0, 3, 7]
[1, 5, 9]
[2, 4, 15]
]


Я использовал oneHotEncoder http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder.fit_transform для предварительной обработки этих данных, так что это подходит для линейной регрессии, чтобы дать мне это:



[
[1, 0, 0, 4, 15]
[1, 0, 0, 3, 7]
[0, 1, 0, 5, 9]
[0, 0, 1, 4, 15]
]


Однако затем я хочу нормализовать эти данные.

Пока я просто нормализую данные следующим образом:



preprocessing.normalize(data)


Однако это нормализует все столбцы, включая категория первая.



Мои вопросы следующие:




  • Как нормализовать только некоторые столбцы?

  • желательно ли нормализовать данные категории, или мне следует избегать этого?


Спасибо!

623   2  

2 ответов:

Использование numpy чтобы передать фрагмент ваших данных в normalize. Что касается вашего вопроса о нормализации данных категорий, вы, вероятно, получите лучший ответ на этот вопрос на CrossValidated.

Пример для вашего первого вопроса:

In [1]: import numpy as np
        from sklearn.preprocessing import normalize

        # Values as floats or normalize raises a type error
        X1 = np.array([
                      [1., 0., 0., 4., 15.],
                      [1., 0., 0., 3., 7.],
                      [0., 1., 0., 5., 9.],
                      [0., 0., 1., 4., 15.],
                      ])

In [2]: X1[:, [3,4]] # last two columns
Out[2]: array([[  4.,  15.],
               [  3.,   7.],
               [  5.,   9.],
               [  4.,  15.]])

Нормализуем последние два столбца и присваиваем новому массиву numpy, X2.

In [3]: X2 = normalize(X1[:, [3,4]], axis=0) #axis=0 for column-wise
        X2
Out[3]: array([[ 0.49236596,  0.6228411 ],
               [ 0.36927447,  0.29065918],
               [ 0.61545745,  0.37370466],
               [ 0.49236596,  0.6228411 ]])

Теперь объедините X1 и X2 для желаемого результата.

In [4]: np.concatenate(( X1[:,[0,1,2]], X2), axis=1)
Out[4]: array([[ 1.        ,  0.        ,  0.        ,  0.49236596,  0.6228411 ],
               [ 1.        ,  0.        ,  0.        ,  0.36927447,  0.29065918],
               [ 0.        ,  1.        ,  0.        ,  0.61545745,  0.37370466],
               [ 0.        ,  0.        ,  1.        ,  0.49236596,  0.6228411 ]])

Если вы используете pandas.DataFrame, вы можете проверить sklearn-pandas.

Comments

    Ничего не найдено.