私は、テキストの異なる行を持つデータフレームを持っている、と私はデータ内の基礎となるテーマを見つけるためにこれらの行をクラスタ化すると仮定します。テキスト解析における列車と試験行列の次元は同じですか?
import pandas as pd
df = pd.DataFrame({"id_num": np.random.randint(low = 0, high = 50, size = 10), "text": ["hello these are words i would like to cluster", "hello i would like to go home", "home i would like to go please thank you", "thank you please apple banana", "orange banana apple fruit corn", "orange orange orange banana banana banana banana", "can you take me home i have had enough of this place", "i am bored can we go home", "i would like to leave now to go home", "apple apple banana"])
私が最初にtrain
とtest
には、このデータフレームを分離します:
>>> from sklearn.cross_validation import train_test_split
>>> train, test = train_test_split(df, test_size = 0.40)
>>> train, test = train["text"], test["text"]
クラスタリング処理を開始します。もちろん
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> from sklearn.cluster import KMeans
>>> vectorizer = TfidfVectorizer()
>>> train_X = vectorizer.fit_transform(train)
>>> test_X = vectorizer.fit_transform(test)
>>> model = KMeans(n_clusters = 2)
>>> model.fit(train_X)
>>> model.predict(test_X)
ValueError: Incorrect number of features. Got 22 features, expected 18.
、あなたruの場合このコードを自分のマシンに置くと、異なる結果が生じる可能性があります。また、フィーチャの数は、一列に並んでいてもよい。しかし、ほとんどの場合、train_X
とtest_X
の寸法は一致しません。
他の誰かがこの問題に対処しましたか?次元を等しくする1つのアプローチは、train
とtest
の両方に存在するフィーチャ(読み込み:ワード)のみを取ることによって、ある種の次元削減を採用することです。より大きな行列を作るもう一つの解法は、与えられた文書が他のコーパスからの単語を持たない両方の行列でゼロを埋めることです。
私はこれに近づくべき別の方法がありますか?
それは重複しているので、答えを出す代わりに、質問を重複としてマークするだけです。 – lejlot