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!