Załóżmy, że mam kilka zdań tekstowych, które chcę zgrupować za pomocą kmeans.Jak przekonwertować nowe dane na komponenty PCA moich danych treningowych?
sentences = [
"fix grammatical or spelling errors",
"clarify meaning without changing it",
"correct minor mistakes",
"add related resources or links",
"always respect the original author"
]
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.cluster import KMeans
vectorizer = CountVectorizer(min_df=1)
X = vectorizer.fit_transform(sentences)
num_clusters = 2
km = KMeans(n_clusters=num_clusters, init='random', n_init=1,verbose=1)
km.fit(X)
Teraz mogłem przewidzieć, które z klas nowy tekst będzie wpaść,
new_text = "hello world"
vec = vectorizer.transform([new_text])
print km.predict(vec)[0]
jednak powiedzieć, że stosuje się w celu zmniejszenia PCA 10.000 możliwości do 50.
from sklearn.decomposition import RandomizedPCA
pca = RandomizedPCA(n_components=50,whiten=True)
X2 = pca.fit_transform(X)
km.fit(X2)
I nie można już zrobić tego samego, aby przewidzieć klaster dla nowego tekstu, ponieważ wyniki wektoryzacji nie są już istotne
new_text = "hello world"
vec = vectorizer.transform([new_text]) ##
print km.predict(vec)[0]
ValueError: Incorrect number of features. Got 10000 features, expected 50
Jak zatem przekształcić mój nowy tekst w przestrzeń o mniejszych wymiarach?