Стратегия скоринга sklearn.model_selection.GridSearchCV для скрытого размещения ресурсов - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь применить GridSearchCV к распределению LatentDirichlet, используя библиотеку sklearn.

Текущий конвейер выглядит так:

vectorizer = CountVectorizer(analyzer='word',       
                         min_df=10,                      
                         stop_words='english',           
                         lowercase=True,                 
                         token_pattern='[a-zA-Z0-9]{3,}'
                        )

data_vectorized = vectorizer.fit_transform(doc_clean) #where doc_clean is processed text.

lda_model = LatentDirichletAllocation(n_components =number_of_topics,
                                    max_iter=10,            
                                    learning_method='online',   
                                    random_state=100,       
                                    batch_size=128,         
                                    evaluate_every = -1,    
                                    n_jobs = -1,            
                                    )

search_params = {'n_components': [10, 15, 20, 25, 30], 'learning_decay': [.5, .7, .9]}
model = GridSearchCV(lda_model, param_grid=search_params)
model.fit(data_vectorized)

Текущий GridSearchCV использует приблизительное логарифмическое правдоподобие в качестве балла, чтобы определить, какая модель является лучшей.Что я хотел бы сделать, так это изменить свой метод оценки, исходя из приблизительного недоумения модели.

Согласно документации Склеарна оGridSearchCV , есть аргумент оценки, который я могу использовать.Тем не менее, я не знаю, как применить растерянность в качестве метода оценки, и я не могу найти никаких примеров в Интернете людей, применяющих его.Это возможно?

Ответы [ 2 ]

0 голосов
/ 02 августа 2019

Параметры оценки и недоумения кажутся ошибочными и зависят от количества тем.Поэтому результаты в сетке дадут вам наименьшее количество тем

выпуск GitHub

0 голосов
/ 25 октября 2018

GridSearchCV по умолчанию будет использовать score() функцию окончательной оценки в конвейере.

make_scorer можно использовать здесь, но для расчета недоумения вам потребуются другие данные из подобранной моделиа также, что может быть немного сложно обеспечить через make_scorer.

. Здесь вы можете создать оболочку для вашего LDA, в которой вы можете повторно реализовать функцию score() для возврата perplexity.Нечто подобное:

class MyLDAWithPerplexityScorer(LatentDirichletAllocation):

    def score(self, X, y=None):

        # You can change the options passed to perplexity here
        score = super(MyLDAWithPerplexityScorer, self).perplexity(X, sub_sampling=False)

        # Since perplexity is lower for better, so we do negative
        return -1*score

И затем можно использовать это вместо LatentDirichletAllocation в вашем коде, например:

...
...
...
lda_model = MyLDAWithPerplexityScorer(n_components =number_of_topics,
                                ....
                                ....   
                                n_jobs = -1,            
                                )
...
...
...