void LDA::gibbs(int K,double alpha,double beta) { this->K=K; this->alpha=alpha; this->beta=beta; if(SAMPLE_LAG >0) { thetasum = MatrixXd(documentsSize(),K); phisum= MatrixXd(K,V); numstats=0; } initialState(K); for(int i=0; i<ITERATIONS; i++) { for(int m=0; m<z.rows(); m++) { for(int n=0; n<z.cols(); n++) { z(m,n)=sampleFullConditional(m,n); } } if(i > BURN_IN && (i%THIN_INTERVAL==0)) { dispcol++; } if ((i > BURN_IN) && (SAMPLE_LAG > 0) && (i % SAMPLE_LAG == 0)) { updateParams(); if (i % THIN_INTERVAL != 0) dispcol++; } if (dispcol >= 100) { dispcol = 0; } } }
MatrixXd LDA::getTheta(void) { if(SAMPLE_LAG>0) { return thetasum*(1.0/numstats); } else { MatrixXd theta(documentsSize(),K); for(int m=0; m<documentsSize(); m++) { // theta.row(m)=((nd.row(m).cast<double>().array()+alpha)/(ndsum.cast<double>().array()+K*alpha)).matrix(); for(int k=0; k<K; k++) { theta(m,k)=(nd(m,k)+alpha)/(ndsum(m)+K*alpha); } } return theta; } }
void LDA::updateParams(void) { for(int m=0; m<documentsSize(); m++) { for(int k=0; k<K; k++) { thetasum(m,k)+=(nd(m,k)+alpha)/(ndsum(m)+K*alpha); } } for(int k=0; k<K; k++) { for(int w=0; w<V; w++) { phisum(k,w)+= (nw(w,k)+beta)/(nwsum(k)+V*beta); } } numstats++; }
void LDA::initialState(int K) { int M=documentsSize(),N=(*documents).cols(); nw = MatrixXi::Zero(V,K); nd = MatrixXi::Zero(M,K); nwsum = VectorXi::Zero(K); ndsum = VectorXi(M); z=(MatrixXd::Random(M,N).cwiseAbs()*K).cast<int>(); ndsum.fill(N); for(int i=0; i<M; i++) { for(int j=0; j<N; j++) { nw((*documents)(i,j),z(i,j))++; nd(i,z(i,j))++; nwsum(z(i,j))++; } } }
int FmDriveDetailsContent::getDataSizeByTraversePath( const QString &driveName, QList<FmDriveDetailsSize*> &detailsSizeList, volatile bool *isStopped ) { qint64 imageSize( 0 ); qint64 soundSize( 0 ); qint64 midpJavaSize( 0 ); qint64 nativeAppsSize( 0 ); qint64 videoSize( 0 ); qint64 documentsSize( 0 ); FmFileTypeRecognizer fileTypeRecognizer; QList<QDir> dirs; dirs.append( QDir( driveName ) ); // traverse the whole drive while (!dirs.isEmpty()) { QDir::Filters filter = QDir::NoDotAndDotDot | QDir::AllEntries; // do not summarize system and hidden files, these size will go into others category // if( isSysHiddenIncluded ) { // filter = filter | QDir::Hidden | QDir::System; // } QFileInfoList infoList = dirs.first().entryInfoList( filter ); for ( QFileInfoList::const_iterator it = infoList.begin(); it != infoList.end(); ++it ) { if ( *isStopped ){ return FmErrCancel; } if ( it->isFile() ) { FmFileTypeRecognizer::FileType fileType = fileTypeRecognizer.getType( it->absoluteFilePath() ); switch ( fileType ) { case FmFileTypeRecognizer::FileTypeImage: imageSize += it->size(); break; case FmFileTypeRecognizer::FileTypeTone: soundSize += it->size(); break; case FmFileTypeRecognizer::FileTypeJava: midpJavaSize += it->size(); break; case FmFileTypeRecognizer::FileTypeSisx: nativeAppsSize += it->size(); break; case FmFileTypeRecognizer::FileTypeVideo: videoSize += it->size(); break; case FmFileTypeRecognizer::FileTypeText: documentsSize += it->size(); break; default: // do not need handle other type break; } } else if ( it->isDir() ) { dirs.append( QDir( it->absoluteFilePath() ) ); } } dirs.removeFirst(); } // store result to detailsSizeList. detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeImages, imageSize ) ) ; detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeSoundFiles, soundSize ) ); detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeMidpJava, midpJavaSize ) ); detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeNativeApps, nativeAppsSize ) ); detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeVideos, videoSize ) ); detailsSizeList.append( new FmDriveDetailsSize( FmDriveDetailsSize::ETypeDocuments, documentsSize ) ); return FmErrNone; }