LDA моделінің дәлдігі әрқашан өзгеріп отырады және де жоғары

Ең алдымен, бүкіл мақсатты түсіндірейік, сосын мәселені шешіңіз.

Тақырыпты құжаттаудан шығару үшін LAtent Dirichlet Distribution және NMF сияқты тақырып модельдеуін қолданамын.

Менің деректер жиынтығым PubMed, мен осы топтаманың үш санатын пайдаланып, абстрактілі бөліктен өтті (әр санатта 10 реферат бар, осылайша менде барлығы 30 реферат бар)

Деректерімде LDA қолданғаннан кейін, бағалау процесі үшін, әр құжат үшін жасалатын тақырыптардың дәлдігін білу үшін, мен OneVsRestClassifier көмегімен sklearn деп бағалаймын.

OneVsRestClassifier - жіктеу әдісі болғандықтан, ол деректерді жапсыру үшін қажет, сондықтан мен LDA моделінің шығуы үшін жапсырманы қалай құрастырылғанымды түсіндіремін.

LDA-де мен құжат тақырыбының матрицасын қолдандым және бұл матрица әрбір құжат үшін кейбір тақырыптар бар. Тақырыптар үшін бұл тақырыптың осы құжатқа жататын ықтималдығын көрсететін ықтималдық бар.

Сондықтан әр жолға арналған затбелгі тақырыптардың ең үлкен ықтималдығы (тақырыпты көрсететін индекстер, мысалы, бірінші бағандағы ықтималдық тақырыбына ықтималдығын көрсетеді0).

Түсініктемелер түсінікті, егер жоқ болса, өтінемін, мысалдармен көбірек әңгімелесемін деп сұраймын.

бұл жоғарыда келтірілген тәсілді қолданатын код:

import os

from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer
from sklearn.cross_validation import train_test_split
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import LinearSVC
import numpy as np
from sklearn import metrics

tokenizer = RegexpTokenizer(r'\w+')

# Create p_stemmer of class PorterStemmer
lines=[]
p_stemmer = PorterStemmer()
lisOfFiles=[x[2] for x in os.walk("data")]

fullPath = [x[0] for x in os.walk("data")]

for j in lisOfFiles[2]:
    with open(os.path.join(fullPath[2],j)) as f:
                    a=f.read()
                    lines.append(a)


for j in lisOfFiles[3]:
    with open(os.path.join(fullPath[3],j)) as f:
                    a=f.read()
                    lines.append(a)

for j in lisOfFiles[4]:
    with open(os.path.join(fullPath[4],j)) as f:
                    a=f.read()
                    lines.append(a)

# compile sample documents into a list
doc_set = lines

tf_vectorizer = CountVectorizer(max_features=1000,
                                stop_words='english')

tf = tf_vectorizer.fit_transform(doc_set)

# Trains the LDA models.
lda = LatentDirichletAllocation(n_topics=10, max_iter=5,
                                learning_method='online',
                                learning_offset=50.,
                                random_state=0)

lda_x=lda.fit_transform(tf)

#creating the labels

new_y = np.argmax(lda_x, axis=1)

Xtrain, Xvalidate, ytrain, yvalidate = train_test_split(lda_x, new_y, test_size=.3)

predictclass=OneVsRestClassifier(LinearSVC(random_state=0)).fit(Xtrain, ytrain).predict(Xvalidate)
yacc=metrics.accuracy_score(yvalidate,predictclass)
print (yacc)

Қазір менің сұрағым:

Бұл кодты іске қосқан кезде, менің ойымша, көп уақыт 100 дәлдік береді: |

және оны бірнеше рет іске қосқан кезде, дәлме-дәл өзгереді, бірақ 66-дан төмен емес, бірақ ол 66-мен 100-ке ауысады, ал көпшілігі 100-ге тең.

Мен түсінемін, бұл өзгеріс LDA-ның кездейсоқ таңдауымен байланысты. Біріншіден, менің кодекспен бір нәрсе дұрыс емес екеніне сенімдімін, бұл дәл осындай жақсы дәлдік.

Екіншіден, егер дəлдік осы сияқты өзгеретін болса, оның қайсысы сенімді болса, оны бір шығарылымда түзетуге қандай да бір əдіс бар ма?

Сол үрдіс менің NMF моделім үшін де орын алады.

Менің күмәнім

Мен жұмыс істеп жатқан деректерімнің бірден-бір күмәні болды. Бірінші параграфта түсіндіргенімдей, ол 30 тізімге көшірілген дерексіз файлды қамтиды, сондықтан менде үтірмен бөлінген тізім бар, бірақ дерексіз файлда үтір бар болса, онда ол дұрыс құжатты қалай іске асырады ?! !!

бірақ мен оны тізім бойынша қайталап, тізімнің өлшемін алу арқылы тексердім, ол 30 болды **

2 жаңарту

Мен деректерді 300 рефераттан 3000 рефератқа ауыстырған кезде, Дәлдік әлі өзгереді, алайда 93-ден 97-ге дейін, айырмашылық бар

2

Жауап жоқ

0