2017-01-13 4 views
2

データのコーパスからトピックモデルを作成しようとしています。コードはときコーパス長= 20しかし、それは壊れ、適切に解析されたデータから、話題の任務数を生成するために、NMFを使用することができ、IndexError:sklearnでNMFを使用している範囲外

20 
[u'bell', u'closed', u'day', u'drinks', u'enjoy', u'food', u'good', u'great', u'll', u'new', u'nice', u'original', u'people', u'phoenix', u'place', u'rd', u'reopened', u'terrific', u'try', u'weekly'] 
Traceback (most recent call last): 
    File "sklearnTfidf.py", line 238, in <module> 
    trainTest() 
    File "sklearnTfidf.py", line 185, in trainTest 
    posDic += buildDictionary(pos_reviews) 
    File "sklearnTfidf.py", line 143, in buildDictionary 
    sortedDict = buildTFIDF(review) 
    File "sklearnTfidf.py", line 110, in buildTFIDF 
    nmf = NMF(n_components=no_topics, random_state=1, init='nndsvd').fit(tfidf) 
    File "/opt/anaconda/lib/python2.7/site-packages/sklearn/decomposition/nmf.py", line 551, in fit 
    self.fit_transform(X, **params) 
    File "/opt/anaconda/lib/python2.7/site-packages/sklearn/decomposition/nmf.py", line 485, in fit_transform 
    W, H = self._init(X) 
    File "/opt/anaconda/lib/python2.7/site-packages/sklearn/decomposition/nmf.py", line 395, in _init 
    W, H = _initialize_nmf(X, self.n_components_) 
    File "/opt/anaconda/lib/python2.7/site-packages/sklearn/decomposition/nmf.py", line 116, in _initialize_nmf 
    x, y = U[:, j], V[j, :] 
IndexError: index 1 is out of bounds for axis 1 with size 1 

の下に見られるように、私はまだ、sklearnツールセットに精通していますだから私は、コードの多くがさまざまな例から一緒に録音されているので、これは私の見解を簡単に見渡すことができると考えています。

# Create a dictionary of words from review 
def buildDictionary(review) : 
    buildTFIDF(review) 
    #[unrelated code] 


# Extract topic models from corpus 
def buildTFIDF(corpus) : 
    no_topics = 5 
    no_features = 100 
    no_top_words = 10 
    tfidf_vectorizer = TfidfVectorizer(min_df=1, max_df=1.0, max_features=no_features, stop_words='english') 
    tfidf = tfidf_vectorizer.fit_transform(corpus) 
    tfidf_feature_names = tfidf_vectorizer.get_feature_names() 

    print tfidf.getnnz()  # sanity checking 
    print tfidf_feature_names # sanity checking 
    nmf = NMF(n_components=no_topics, random_state=1, init='nndsvd').fit(tfidf) 

    display_topics(nmf, tfidf_feature_names, no_top_words) 
    print '' 


# Prints no_top_words for each feature 
def display_topics(model, feature_names, no_top_words): 
    for topic_idx, topic in enumerate(model.components_): 
     print "Topic %d:" %(topic_idx) 
     print " ".join([feature_names[i] 
       for i in topic.argsort()[:-no_top_words - 1:-1]]) 

正確にこのインデックスエラーの原因は何ですか?どのように修正できますか?

答えて

0

この回答を見ることをお勧めします:https://stackoverflow.com/a/43336816/8187340 問題はdecomposition.NMF(n_components)パラメータの値です。このパラメータは、コーパスの数以下でなければなりません。
例:dtm.shapeが(6,6030)を返した場合、no_topics <= 6

関連する問題