⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 activity.c

📁 使用具有增量学习的监控式学习方法。包括几个不同的分类算法。
💻 C
字号:
/** * @file * Activity scores for classes. * * This is not a real classifier. It is supposed to be used with a combiner. * It ignores the message content. * Folders which have not had any mails in a long time will be * considered less probable. * Keep average (or max) time between two messages for a class. * If the time since the last message is significantly higher than this, * call the class inactive. * Also frequency might be considered in the activity score. * * @author  Mikael Ylikoski * @date    2002 */#include <stdlib.h>#include <string.h>#include "activity.h"#include "doc_classifier.h"#include "utility.h"/** * Class activity. */typedef struct {    int nom;		/**< Number of messages */    //float average;	/**< Average delta */    int max;		/**< Maximum delta */    int last;		/**< Last time */} activity;/** * Activity database. */struct activity_db_ {    int time;		/**< Current time */    activity *act;	/**< Activities */    int noa;		/**< Number of activities */};/** * Create a new activity database. * * @param size  the initial number of classes * @return  The new activity database. */activity_db *activity_new_db (int size) {    activity_db *db;    db = my_malloc (sizeof(activity_db));    db->act = my_calloc (size, sizeof(activity));    db->time = 0;    db->noa = size;    return db;}/** * Register a new message. * * @param db     activity database to use * @param class  class of message * @return 0 if ok; != 0 otherwise. */intactivity_new_msg (activity_db *db, int class) {    activity *a;    if (class >= db->noa) {	a = my_realloc (db->act, (class + 1) * sizeof(activity));	db->act = a;	memset (&db->act[db->noa], 0,		(class + 1 - db->noa) * sizeof(activity));	db->noa = class + 1;    }    db->time++;    db->act[class].nom++;    if (db->time > 0 && db->act[class].last > 0)	if (db->time - db->act[class].last > db->act[class].max)	    db->act[class].max = db->time - db->act[class].last;    db->act[class].last = db->time;    return 0;}/** * Get activity score for a class. * * @param db     activity database to use * @param class  class to get score for * @return  The activity score. */doubleactivity_score (activity_db *db, int class) {    if (db->act[class].nom < 3)	return 1;    if (db->time - db->act[class].last > 5 * db->act[class].max)	return 0;    return 1;}/** * Get activity scores for all classes. * * @param db  activity database to use * @return  An array of activity scores. */double *activity_score_list (activity_db *db) {    double *d;    int i;    d = my_malloc (db->noa * sizeof(double));    for (i = 0; i < db->noa; i++)	d[i] = activity_score (db, i);    return d;}void *activity_new_doc (const char *opts) {    return activity_new_db (0);}intactivity_learn_doc (void *db, void *data, int class) {    activity_db *adb;    adb = (activity_db *)db;    return activity_new_msg (adb, class);}double *activity_classify_doc_score (void *db, void *data) {    activity_db *adb;    adb = (activity_db *)db;    return activity_score_list (db);}/** * Keep cygwin happy. */intmain (void) {    return 0;}//const char *my_doc_classifier_name = "Activity";const doc_classifier_functions my_functions = {    .new = activity_new_doc,    .learn = activity_learn_doc,    .classify_score = activity_classify_doc_score};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -