亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? id3_proto.c

?? 商業智能用 決策樹 Id3算法 C語言
?? C
字號:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <string.h>
#include <conio.h>
#include <time.h>

#include "id3.h"
#include "proto.h"

MATRIX *build_matrix (UINT width, UINT height)
{
    MATRIX *_matrix;
    UINT i;

    _matrix = (MATRIX*) malloc (sizeof (MATRIX));
    if (!_matrix)
        err_exit (__FILE__, __LINE__);

    _matrix->width  = width;
    _matrix->height = height;

    _matrix->data = (REAL**) malloc (height * sizeof (REAL*));
    if (_matrix->data == NULL)
        err_exit(__FILE__, __LINE__);

    for (i=0; i<height; i++)
    {
        _matrix->data[i] = (REAL*) malloc (width * sizeof(REAL));
        if (_matrix->data[i] == NULL)
            err_exit(__FILE__, __LINE__);
    }
    return _matrix;
}



void err_exit (CHAR* file, UINT line)				/* Standard error handler function */
{
    printf("\n Fatal error in file %s, line %u", file, line);
    exit(0);
}

void file_size (CHAR *file_name, UINT *width, UINT *height)
{
    FILE *f;
    UINT buf_size = 0xFF, _width = 0;
    CHAR *buffer, *ptr;

    *width = *height = 0;

    buffer = (CHAR*) malloc (buf_size * sizeof (CHAR));
    if (buffer == NULL)
        err_exit (__FILE__, __LINE__);

    f = fopen(file_name, "r");					/* Open price file - abort if filename invalid */
    if (f == NULL)
    {
        printf("\n File not found : %s\n", file_name);
        err_exit (__FILE__, __LINE__);
    }

    if (fgets(buffer, buf_size, f) != NULL)			/* Get number of entries in first row */
    {
        ++*height;
        ptr = strtok (buffer, " ,");
        while (ptr != NULL)
        {
            ++*width;
            ptr = strtok (NULL, " ,");
        }
    }

    while (!feof(f))						/* Count numbers of subsequent rows */
    {
        if (fgets(buffer, buf_size, f) != NULL)
        {
            if (strlen(buffer) > strlen("\n"))  		/* if line is more than a NL char */
            {
                ++*height;
                _width = 0;
                ptr = strtok (buffer, " ,");
                while (ptr != NULL)
                {
                    ++_width;
                    ptr = strtok (NULL, " ,");
                }

                if (*width != _width)
                {
                    printf("\n Number of entries in file %s did not agree", file_name);
                    err_exit (__FILE__, __LINE__);
                }
            }
        }
    }
    free (buffer);
}

void free_matrix (MATRIX *_matrix)
{
    UINT i;
    for (i=0; i<_matrix->height; i++)
        free (_matrix->data[i]);

    free (_matrix->data);
    free (_matrix);
}

void free_tags ( CHAR** varname, UINT width)
{
    UINT i;
    for (i=0; i<width; i++)
        free(varname[i]);
    free (varname);
}

void free_tree ( NODE  *node )
{
    if (node == NULL)						/* Frees the memory allocated to a tree structure */
        return;
    else
    {
        free_tree (node->on);
        free_tree (node->off);
        free(node);
    }

}

NODE* ID3 ( MATRIX *matrix, NODE* parent, UINT target, UINT state)
{
    NEGENTROPY negentropy_struct;				/* Routine to build a decision tree, based on Quinlan's ID3 algorithm */
    NODE *node;
    UINT n_vars = matrix->width, n_samples = matrix->height, i, j, split;
    REAL **data = matrix->data;
    REAL best_threshold, min_negentropy, _negentropy;

    node = (NODE*) malloc (sizeof(NODE));			/* Allocate memory for this node */
    if (!node)
        err_exit (__FILE__, __LINE__);

    node->parent = parent;  					/* Set address of parent node */

    if (parent != NULL) 					/* parent to child; not relevant for root node */
    {
       
        if (state == ON)					/* Pass address of this node to the parent node */
            parent->on = node;
        else
            if (state == OFF)
                parent->off = node;
    }

    min_negentropy = 1.0;

    for (i=0; i<n_vars; i++)
    {

        for (j=0; j<n_samples; j++) 
        {

            if (i != target) 
            {
		node->idx = i;					/* Set trial values for this node */
                node->threshold = data[j][i];

                negentropy_struct = negentropy (data, n_samples, node, target); /* calculate the negentropy of this partition */

                _negentropy = negentropy_struct.ne;

                if (_negentropy <min_negentropy) 		/* If this negentropy is lower than any other, return index and threshold for future use */
                {
		    printf("%d\n",_negentropy);
                    min_negentropy = _negentropy;
                    split = i;
                    best_threshold = data[j][i];
                }

            } 							

        } 							

    } 								

    node->idx = split;						/* Save the combination of best attribute and threshold value */
    node->threshold = best_threshold;

    if  (negentropy_struct.status != INACTIVE) 
    {
        node->on = node->off = NULL;
        node->idx = negentropy_struct.status;
    }
    else
    {
        node->on  = ID3 (matrix, node, target, ON);
        node->off = ID3 (matrix, node, target, OFF);
    }

    return node;
}

void main (int argv, char *argc[])
{
    MATRIX	*matrix;
    NODE	*node;
    UINT	target, n_vars, n_samples;
    CHAR	data_file[13]="data.txt", tag_file[13]="vag.txt";
    CHAR	**tag_names;

    file_size (data_file, &n_vars, &n_samples);			/* Read dimensions of data file */

    tag_names = read_tags (tag_file, n_vars);     		/* Read labels for columns of data */ 

    matrix = build_matrix (n_vars, n_samples);			/* Allocate storage for data */

    read_matrix (data_file, matrix);				/* read it from disk */

    target = n_vars - 1;					/* Classification target is last column */

    node = ID3 ( matrix, NULL, target, 0 );			/* Return root of decision tree - ID3 continues to call itself recursively */

    print_tree(node, tag_names);

    printf("\n");

    free_tags (tag_names, n_vars);
    free_matrix(matrix);
    free_tree (node);
}

NEGENTROPY negentropy ( REAL **data,
    UINT   n_samples,
    NODE   *local,
    UINT   target)
{
    NEGENTROPY ret_val;
    NODE *_node, *_parent;
    UINT on_ctr, off_ctr, p1, p2, i, _match;
    REAL p_on, p_off, negentropy_on, negentropy_off;

    on_ctr = off_ctr = p1 = p2 = 0;

    for (i=0; i<n_samples; i++)					/* Scan through all supplied data samples */ 
    {
	 _match = 1;
        _node = local;
        while (_node->parent != NULL) 
        { 
            _parent = _node->parent;				/* If at the root node, all entries match*/
            if (_node == _parent->on) 
            { 
                if (data[i][_parent->idx] < _parent->threshold)	/* if parent node is ON */
                    _match = 0;
            }
            else
                if (_node == _parent->off) 
                { 
                    if (data[i][_parent->idx] >= _parent->threshold) /* if parent node is OFF */
                        _match = 0;
                }
            _node = _parent;
        }

        if (_match) 
        {
            if (data[i][local->idx] >= local->threshold) 
            {
                on_ctr++;
                if (data[i][target] >= 0.5)
                    p1++;
            }
            else 
            {
                off_ctr++;
                if (data[i][target] >= 0.5)
                    p2++;
            }
        }
    }   

   if (on_ctr > 0)						 /* Entropy of subtable with activation ON */
    {
        p_on  = (REAL) p1 / (REAL) on_ctr;
        p_off = 1 - p_on;
        negentropy_on = -entropy (p_on) - entropy (p_off);
    }
    else
        negentropy_on = 0.0;

    if (off_ctr > 0)						/* Entropy of subtable with activation OFF */
    {
        p_on  = (REAL) p2 / (REAL) off_ctr;
        p_off = 1 - p_on;
        negentropy_off = -entropy (p_on) - entropy (p_off);
    }
    else
        negentropy_off = 0.0;

    ret_val.ne = (negentropy_on * on_ctr + negentropy_off * off_ctr);
    ret_val.ne /= (on_ctr + off_ctr);

    if ((p1 == on_ctr) && (p2 == off_ctr))
        ret_val.status = ON;
    else if ((p1 == 0) && (p2 == 0))
        ret_val.status = OFF;
    else
        ret_val.status = INACTIVE;

    return ret_val;

}

void print_tree (NODE *node, CHAR** tag_names)
{
    if (node->on == NULL) 					/* Displays algebraic equivalent of the decision tree */
    {
        if (node->idx == ON)
            printf("ON");
        else if (node->idx == OFF)
            printf("OFF");
        return;
    }

    else
        printf("if { %s >= %1.2f then ", tag_names[node->idx], node->threshold);

    print_tree ( node->on, tag_names );
    printf(" else ");
    print_tree ( node->off, tag_names );
    printf( " } " );
}

void read_matrix (CHAR filename[], MATRIX *matrix)

{
    UINT i, j;
    UINT height = matrix->height;
    UINT width  = matrix->width;
    REAL **data = matrix->data;
    FILE *f;

    if ((f = fopen(filename, "r")) == NULL) 			/* Open price file */
    {
        printf("\n File not found : %s\n", filename);
        err_exit (__FILE__, __LINE__);
    }

    for (i=0; i<height; i++)
        for (j=0; j<width; j++)
        {
            fscanf(f, "%lf\n", &data[i][j] );
        }

    fclose(f);

}

CHAR **read_tags (CHAR *tag_file, UINT width)
{
    FILE *f;
    CHAR **_varname;
    UINT i;
    CHAR buffer[0xFF];

    f = fopen(tag_file, "r");
    if (f == NULL)
    {
        printf("\n File not found : %s\n", tag_file);
        err_exit (__FILE__, __LINE__);
    }

    _varname = (CHAR**) malloc (width * sizeof (CHAR*));
    for (i=0; i<width; i++)
        _varname[i] = (CHAR*) malloc (0xFF * sizeof (CHAR));

    i = 0;
    while (!feof(f))
    {
        if (fgets(buffer, 0xFF, f) != NULL)
        {
            if (strlen(buffer) > strlen("\n"))
            {
                if (i>width-1)
                {
                    printf("\nMore variable names were detected than data items.");
                    printf("\nPlease correct this problem before proceeding");
                    exit(0);
                }
                sscanf (buffer, "%[a-zA-Z0-9-_;:!@#$%^&*(){}[]]", _varname[i]);
                i++;
            }
        }
    }

    if (i<width) 
    {
        printf("\nFewer variable names than data items were detected.");
        printf("\nPlease correct this problem before proceeding");
        exit(0);
    }

    fclose (f);

    return _varname;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av不卡一区二区三区| 午夜精品久久久久久久蜜桃app| 麻豆91小视频| 制服丝袜av成人在线看| 午夜精品福利一区二区三区av| 在线视频国内一区二区| 亚洲精品欧美在线| 色噜噜夜夜夜综合网| 性做久久久久久免费观看| 欧美日本一区二区三区| 美女在线视频一区| 久久色.com| 大白屁股一区二区视频| 亚洲色图欧洲色图婷婷| 91成人在线精品| 日本免费在线视频不卡一不卡二| 日韩一级欧美一级| 国产毛片精品视频| 国产精品网站在线播放| 日本久久电影网| 青青草一区二区三区| 久久久久久久综合| 色偷偷88欧美精品久久久| 偷拍日韩校园综合在线| 久久一区二区三区四区| yourporn久久国产精品| 一区二区三区**美女毛片| 欧美一级黄色录像| 高清不卡一二三区| 亚洲一区二区三区中文字幕| 欧美精品 国产精品| 久国产精品韩国三级视频| 欧美激情资源网| 欧美日韩一级视频| 国产一区二区免费视频| 一区二区三区日韩在线观看| 日韩三级视频在线看| www.日韩精品| 精品一区二区三区欧美| 亚洲免费观看视频| 精品久久一区二区三区| 色婷婷精品久久二区二区蜜臀av| 日本欧洲一区二区| 日韩美女视频一区二区| 日韩午夜中文字幕| 色综合天天性综合| 国产一区二区在线影院| 亚洲成人精品影院| 国产精品色婷婷| 欧美xxxx老人做受| 欧美日韩一级片在线观看| 懂色一区二区三区免费观看 | 国产成人精品一区二区三区网站观看| 亚洲综合在线第一页| 精品福利一区二区三区| 欧美日本一区二区在线观看| 99精品视频中文字幕| 国产精品一二三四| 久久国产尿小便嘘嘘尿| 日韩精品国产精品| 亚洲综合色噜噜狠狠| 日韩码欧中文字| 国产精品久久久久久久久久久免费看 | 亚洲天堂2016| 国产欧美精品一区二区三区四区| 日韩亚洲国产中文字幕欧美| 欧美三级乱人伦电影| 色综合一个色综合亚洲| av电影天堂一区二区在线| 国产在线精品一区在线观看麻豆| 日本不卡一区二区三区| 亚洲妇女屁股眼交7| 亚洲视频你懂的| 国产精品你懂的在线| 国产精品毛片大码女人| 欧美激情自拍偷拍| 日本一区二区不卡视频| 中文字幕av一区二区三区| 国产欧美日本一区视频| 久久久91精品国产一区二区三区| 久久综合色综合88| 2020国产成人综合网| 2019国产精品| 国产欧美日韩精品在线| 国产精品久久久久一区二区三区| 国产精品区一区二区三| 日本一区二区三区dvd视频在线| 久久精品网站免费观看| 国产日韩欧美综合一区| 久久精品男人的天堂| 中文字幕一区二区三区色视频| 亚洲国产激情av| 自拍偷拍国产精品| 日韩精品亚洲专区| 无吗不卡中文字幕| 免费看欧美美女黄的网站| 久久精品国产在热久久| 国产精品资源网| av网站免费线看精品| 欧美综合天天夜夜久久| 欧美精品乱码久久久久久按摩| 欧美一区二区成人| 精品电影一区二区三区| 中文字幕乱码亚洲精品一区| 亚洲欧美日韩国产一区二区三区| 亚洲图片欧美视频| 国模套图日韩精品一区二区| 成人免费视频app| 欧美做爰猛烈大尺度电影无法无天| 欧美色男人天堂| 久久色视频免费观看| 亚洲另类春色校园小说| 捆绑变态av一区二区三区| 国产成人综合亚洲网站| 欧美午夜寂寞影院| 精品欧美一区二区在线观看| 国产精品人人做人人爽人人添| 亚洲最大的成人av| 精品在线你懂的| 91日韩精品一区| xf在线a精品一区二区视频网站| 中文字幕一区二区三中文字幕| 无码av中文一区二区三区桃花岛| 国产麻豆视频一区| 欧美视频一区二| 欧美国产1区2区| 婷婷中文字幕一区三区| 国产成人免费网站| 欧美精品18+| 亚洲人亚洲人成电影网站色| 日本亚洲最大的色成网站www| 成年人网站91| 日韩欧美电影一区| 亚洲在线一区二区三区| 国产一区二区在线影院| 欧美日本在线一区| 国产精品色噜噜| 经典一区二区三区| 色噜噜久久综合| 国产精品区一区二区三区| 奇米一区二区三区| 一本到高清视频免费精品| 久久人人超碰精品| 视频在线观看91| 欧美综合视频在线观看| 国产精品久久久久影视| 国产精品系列在线观看| 日韩精品一区二区三区四区| 亚洲一区视频在线| 成人美女在线视频| 精品欧美乱码久久久久久1区2区| 亚洲综合一区在线| www.日韩在线| 欧美极品另类videosde| 国产麻豆视频精品| 日韩免费一区二区| 日本不卡一区二区三区| 欧美三级电影在线看| 亚洲精品国产一区二区精华液| 丁香激情综合国产| 欧美精品一区二区蜜臀亚洲| 日本午夜一区二区| 欧美午夜寂寞影院| 亚洲一区免费视频| 91久久久免费一区二区| 国产精品久久久久久久久免费相片| 国产美女主播视频一区| 亚洲精品在线电影| 久久99精品久久久久久动态图 | 免费一级片91| 在线电影国产精品| 日产欧产美韩系列久久99| 2020国产成人综合网| 日韩中文字幕麻豆| 91麻豆精品国产自产在线| 日本特黄久久久高潮 | 欧美tk丨vk视频| 久久成人18免费观看| 日韩三级视频在线观看| 蜜芽一区二区三区| 日韩亚洲电影在线| 久久99精品视频| 国产日韩欧美精品一区| 国产成人精品亚洲777人妖| 国产日本欧美一区二区| 99精品视频在线观看免费| 亚洲另类在线视频| 9191久久久久久久久久久| 秋霞午夜鲁丝一区二区老狼| 日韩三级在线免费观看| 国内成人免费视频| 国产精品女人毛片| 日本精品视频一区二区| 亚洲成人综合网站| 日韩欧美久久一区| 成人动漫一区二区在线| 亚洲午夜一区二区| 精品盗摄一区二区三区| www.欧美.com| 三级不卡在线观看|