代码参考出处https://blog.csdn.net/HackerTom/article/details/78597630
看了以上代码,对离散化部分作一小结。
需要的三个主要的特征空间:samspc(样本 空间),dsc(离散化的空间),ver(反离散化空间),以及过度的数据集buf
- buf:他是vector<vector<string>>,是真正输入时候的(n-m)数据集,输入什么就是什么。
- dsc:这个空间是vector<map<string,int>>,这是一个新手需要好好理解才能理解透的转化,dsc[d][buf[i][d]]=val, buf[i][d]表示第i条数据的第d个特征的string值S,但在dsc的空间里,dsc[d][S]表示第d个特征的对应S的离散数值,该离散数值val从1开始,第d个特征有n种类型就包括1,2,……n,没有重复。dsc[i].size()就表示第i个特征的取值的个数。dsc[n].size()即表示label的种类数。
- ver:这个空间是vector<map<int,string>>,他最为反离散起到与dsc相反的作用,即ver[d][val]=buf[i][d]。
- samspc:这个空间的定义类型是vector<vector<int>>,初始化全为0,已经是离散化的结果了,samspc[j][i]就表示第j条数据的第i个特征的值,即samspc[j][i]=dsc[i][buf[j][i]],这是一个巧妙的转换,看懂了就不难了。samspc[j].back返回的是lable的值。