GINI指数计算

GINI系数的计算

题目GINI指数计算_第1张图片

1、计算整个训练集的基尼指数
2、计算训练集按照“性别”进行两路分割后的基尼指数
3、计算训练集按照“车型”进行三路分割后的基尼指数
4、(5) 计算训练集按照“衬衣尺码”进行四路分割后的基尼指数

思路

利用结构体和函数求解

代码

// A code block
#include 
#include 
#include 

using namespace std;

struct people           //建立结构体存放每一元组的数据
{
    int id;
    char sex;
    string car_type;
    string shirt_size;
    int pclass;
};


int main()
{
    int n;
    people *p;
    cin>>n;
    people person[n];                            //
    p=person;
    void whole(int n,people *p);                //计算整个训练集的GINI指数
    void ssex(int n,people *p);                 //计算性别的GINI指数
    void car_typefunc(int n,people *p);         //计算车型的GINI指数
    void shirt_sizefunc(int n,people *p);       //计算衬衣尺码的GINI指数
    for(int i=0;i>person[i].sex>>person[i].car_type>>person[i].shirt_size>>person[i].pclass;
    }
    whole(n,p);
    ssex(n,p);
    car_typefunc(n,p);
    shirt_sizefunc(n,p);
    return 0;
}


void whole(int n,people *p)
{
    float a,b;
    a=b=0;
    for(int i=0;isex=='M'||(p+i)->sex=='m') a++;           //统计性别为男的个数
        else b++;                                           //统计性别为女的个数
    }
    a/=(float)n;b/=(float)n;a*=a;b*=b;                     //代入公式计算
    cout<<"整个训练集的基尼指数为:"<<1-a-b<pclass==0) c0++;
    }
    return c0;
}

void ssex(int n,people *p)
{
    float a1,a2,b1,b2,m,f,mg,fg,g;                          //a1、a2存放性别为男的在c0、c1中的个数,之后同理
    int c0_count(int n,people *p);
    int c0=c0_count(n,p);
    int c1=n-c0;
    a1=a2=b1=b2=0;
    for(int i=0;isex=='m'||(p+i)->sex=='M') a1++;
        else b1++;
    }
    for(int i=0;isex=='m'||(p+c0+i)->sex=='M') a2++;    //这边要注意c1在c0之后所以要记得加上一个c0的个数
        else b2++;
    }
    m=a1+a2;f=b1+b2;
    a1/=(float)m;b1/=(float)n;a2/=(float)m;b2/=(float)n;a1*=a1;a2*=a2;b1*=b1;b2*=b2;
    m/=(float)n;f/=(float)n;
    mg=1-a1-a2;
    fg=1-b1-b2;
    cout<<"Male GINI is "<car_type=="family") a1++;
        else if((p+i)->car_type=="sports") b1++;
        else d1++;
    }
    for(int i=0;icar_type=="family") a2++;
        else if((p+c0+i)->car_type=="sports") b2++;
        else d2++;
    }
    f=a1+a2;s=b1+b2;l=d1+d2;
    a1/=(float)f;b1/=(float)s;d1/=(float)l;a2/=(float)f;b2/=(float)s;d2/=(float)l;a1*=a1;b1*=b1;d1*=d1;a2*=a2;b2*=b2;d2*=d2;
    f/=(float)n;s/=(float)n;l/=(float)n;
    fg=1-a1-a2;
    sg=1-b1-b2;
    lg=1-d1-d2;
    cout<<"Family GINI is "<shirt_size=="small") a1++;
        else if((p+i)->shirt_size=="medium") b1++;
        else if((p+i)->shirt_size=="large") d1++;
        else e1++;
    }
    for(int i=0;ishirt_size=="small") a2++;
        else if((p+c0+i)->shirt_size=="medium") b2++;
        else if((p+c0+i)->shirt_size=="large") d2++;
        else e2++;
    }
    s=a1+a2;m=b1+b2;l=d1+d2;e=e1+e2;
    a1/=(float)s;b1/=(float)m;d1/=(float)l;e1/=(float)e;a2/=(float)s;b2/=(float)m;d2/=(float)l;e2/=(float)e;a1*=a1;b1*=b1;d1*=d1;e1*=e1;a2*=a2;b2*=b2;d2*=d2;e2*=e2;
    s/=(float)n;m/=(float)n;l/=(float)n;e/=(float)n;
    sg=1-a1-a2;
    mg=1-b1-b2;
    lg=1-d1-d2;
    eg=1-e1-e2;
    cout<<"Small GINI is "<

你可能感兴趣的:(c++)