¿Es posible aplicar PCA en cualquier clasificación de texto?

Estoy intentando una clasificación con python. Estoy utilizando el clasificador Naive Bayes MultinomialNB para las páginas web (Recuperando datos de web a texto, luego clasifico este texto: clasificación web).

Ahora, estoy tratando de aplicar PCA en estos datos, pero Python está dando algunos errores.

Mi código para la clasificación con Naive Bayes:

from sklearn import PCA from sklearn import RandomizedPCA from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB vectorizer = CountVectorizer() classifer = MultinomialNB(alpha=.01) x_train = vectorizer.fit_transform(temizdata) classifer.fit(x_train, y_train) 

Esta ingenua clasificación de Bayes da esa salida:

 >>> x_train <43x4429 sparse matrix of type '' with 6302 stored elements in Compressed Sparse Row format> >>> print(x_train) (0, 2966) 1 (0, 1974) 1 (0, 3296) 1 .. .. (42, 1629) 1 (42, 2833) 1 (42, 876) 1 

Que trato de aplicar PCA en mis datos ( temizdata ):

 >>> v_temizdata = vectorizer.fit_transform(temizdata) >>> pca_t = PCA.fit_transform(v_temizdata) >>> pca_t = PCA().fit_transform(v_temizdata) 

Pero esta subida sigue erros:

raise TypeError (‘Se pasó una matriz dispersa, pero densa’ TypeError: Se pasó una matriz dispersa, pero se requieren datos densos. Use X.toarray () para convertir a una matriz numpy densa.

Yo convierto matriz a densematrix o matriz numpy. Luego intenté clasificar una nueva densemétrica, pero tengo un error.

Mi objective principal es que el efecto PCA de prueba en la Clasificación en el texto.

Convertir a matriz densa:

 v_temizdatatodense = v_temizdata.todense() pca_t = PCA().fit_transform(v_temizdatatodense) 

Finalmente intente con clase:

 classifer.fit(pca_t,y_train) 

error para la clase final:

boost ValueError (“La entrada X debe ser no negativa”) ValueError: La entrada X debe ser no negativa

Por un lado, mis datos ( temizdata ) se ponen solo en Naive Bayes, en el otro lado, temizdata primera vez se ponen en PCA (para reducir entradas) que clasifico. __

En lugar de convertir una matriz sparse en dense (lo que no es recomendable), usaría TruncatedSVD de scikits-learn, que es un algoritmo de reducción de la dimensibilidad similar a PCA (que utiliza por defecto la SVD aleatoria) que funciona con datos dispersos:

 svd = TruncatedSVD(n_components=5, random_state=42) data = svd.fit_transform(data) 

Y, citando de la documentación de TruncatedSVD :

En particular, el SVD truncado funciona en matrices de conteo de términos / tf-idf tal como lo devuelven los vectorizadores en sklearn.feature_extraction.text. En ese contexto, se le conoce como análisis semántico latente (LSA).

que es exactamente tu caso de uso

El clasificador de NaiveBayes necesita características de valor discreto, pero la PCA rompe esta propiedad de las características. Deberá usar un clasificador diferente si desea usar PCA.

Puede haber otros métodos de reducción de dimensionalidad que funcionen con NB, pero no sé sobre ellos. Tal vez una simple selección de características podría funcionar.

nota al margen: puede intentar discretizar las funciones después de aplicar el PCA, pero no creo que sea una buena idea.