values sklearn onehotencoder one labelencoder hot guide example estimator data categorical_features categorical machine-learning classification scikit-learn random-forest text-classification

machine-learning - sklearn - onehotencoder



Scikit learn-fit_transform en el set de prueba (1)

No se supone que hagas fit_transform en tus datos de prueba, sino que solo transform . De lo contrario, obtendrá una vectorización diferente a la utilizada durante el entrenamiento.

Para el problema de memoria, recomiendo TfIdfVectorizer , que tiene numerosas opciones para reducir la dimensionalidad (eliminando unigrams raros, etc.).

ACTUALIZAR

Si el único problema es ajustar los datos de prueba , simplemente divídalo en trozos pequeños. En lugar de algo así como

x=vect.transform(test) eval(x)

tu puedes hacer

K=10 for i in range(K): size=len(test)/K x=vect.transform(test[ i*size : (i+1)*size ]) eval(x)

y registrar resultados / estadísticas y analizarlos luego.

en particular

predictions = [] K=10 for i in range(K): size=len(test)/K x=vect.transform(test[ i*size : (i+1)*size ]) predictions += rf.predict(x) # assuming it retuns a list of labels, otherwise - convert it to list print accuracy_score( predictions, true_labels )

Estoy luchando para usar Random Forest en Python con Scikit learn. Mi problema es que lo uso para la clasificación de texto (en 3 clases - positivo / negativo / neutral) y las características que extraigo son principalmente palabras / unigramas, así que tengo que convertirlas en características numéricas. Encontré una manera de hacerlo con DictVectorizer de fit_transform :

from sklearn.preprocessing import LabelEncoder from sklearn.metrics import classification_report from sklearn.feature_extraction import DictVectorizer vec = DictVectorizer(sparse=False) rf = RandomForestClassifier(n_estimators = 100) trainFeatures1 = vec.fit_transform(trainFeatures) # Fit the training data to the training output and create the decision trees rf = rf.fit(trainFeatures1.toarray(), LabelEncoder().fit_transform(trainLabels)) testFeatures1 = vec.fit_transform(testFeatures) # Take the same decision trees and run on the test data Output = rf.score(testFeatures1.toarray(), LabelEncoder().fit_transform(testLabels)) print "accuracy: " + str(Output)

Mi problema es que el método fit_transform está trabajando en el conjunto de datos del tren, que contiene alrededor de 8000 instancias, pero cuando trato de convertir mi conjunto de prueba a funciones numéricas también, que es alrededor de 80000 instancias, aparece un error de memoria que dice:

testFeatures1 = vec.fit_transform(testFeatures) File "C:/Python27/lib/site-packages/sklearn/feature_extraction/dict_vectorizer.py", line 143, in fit_transform return self.transform(X) File "C:/Python27/lib/site-packages/sklearn/feature_extraction/dict_vectorizer.py", line 251, in transform Xa = np.zeros((len(X), len(vocab)), dtype=dtype) MemoryError

¿Qué podría causar esto y hay alguna solución? ¡Muchas gracias!