python - sklearn - Escala de datos en Scikit-learn SVM
svm kernel (1)
Mientras que libsvm proporciona herramientas para escalar datos, con Scikit-Learn (que debe basarse en libSVM para el clasificador SVC) no encuentro forma de escalar mis datos.
Básicamente quiero usar 4 funciones, de las cuales 3 van de 0 a 1 y la última es un número "grande" altamente variable.
Si incluyo la cuarta característica en libSVM (usando el script easy.py que escala mis datos automáticamente) obtengo algunos resultados muy buenos (96% de precisión). Si incluyo la cuarta variable en Scikit-Learn, la precisión cae a ~ 78%, pero si la excluyo, obtengo los mismos resultados que obtengo en libSVM al excluir esa característica. Por lo tanto, estoy bastante seguro de que es un problema de falta de escala.
¿Cómo puedo replicar programáticamente (es decir, sin llamar a svm-scale) el proceso de escalado de SVM?
Usted tiene esa funcionalidad en sklearn.preprocessing
:
>>> from sklearn import preprocessing
>>> X = [[ 1., -1., 2.],
... [ 2., 0., 0.],
... [ 0., 1., -1.]]
>>> X_scaled = preprocessing.scale(X)
>>> X_scaled
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
Los datos tendrán cero media y varianza unitaria.