Как нормализовать только определенные столбцы в 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)
Однако это нормализует все столбцы, включая категория первая.
Мои вопросы следующие:
- Как нормализовать только некоторые столбцы?
- желательно ли нормализовать данные категории, или мне следует избегать этого?
Спасибо!
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