经典机器学习算法系列1-决策树
经典的决策树包括ID3、C4.5、和CART,其中ID3和C4.5算法只有树的生成,容易造成过拟合。C4.5是ID3的改进版,用信息增益比选择特征。
决策树算法包括三部分,特征选择、树的生成和树的剪枝。
CART是应用广泛的决策树学习方法,中文名叫分类与回归树,英文名是classification and regression tree,既可以用于分类也可以用于回归。现在基于李航同学的《统计学习方法》CART的写了一段代码。代码的部分如下,以后还会修改
#include <vector> using namespace std; struct data{ int id; vector<int> feature; int classtype; }; class Dataset{ public: //得到类别数量 int getAllTypeNum(){ int max = all[0].classtype; for(int i=1;i<all.size();i++){ if(all[i].classtype>max){ max = all[i].classtype; } } max = max + 1; } //求各个类别样本数目 vector<int> getTypeNum(){ int num = getAllTypeNum(); vector<int> typeNum(num); int index = 0; for(int i=0;i<all.size();i++){ index = all[i].classtype; typeNum[index]++; } return typeNum; } //得到基尼指数 float get_gini(){ vector<int> typeNum = getTypeNum(); int num = getAllTypeNum(); float gini = 0; for(int i=0;i<num;i++){ gini = gini + (typeNum[i]/num)*(typeNum[i]/num); } gini = 1 - gini; return gini; } //样本集合D根据特征特征A是否取某个可能值划分为两部分 void partition_D(){ } //特征A条件下集合D的基尼指数 float Gini_D_A(int A,int value){ } //计算各特征的基尼指数 private: vector<data> all; float gini;//基尼指数 float allTypeNum;//分类的类别数量 vector<int> typeNum;//各个类别的数目 protected: } int main(){ return 0; }