您的位置:首页 > 其它

经典机器学习算法系列1-决策树

2017-03-10 18:40 134 查看
    经典的决策树包括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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: