Как нормализовать только определенные столбцы в 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-панды.