经典机器学习算法系列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;
}


posted @ 2017-03-10 18:40  开往春天的拖拉机  阅读(118)  评论(0编辑  收藏  举报