经典机器学习算法系列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;
}
决策树算法包括三部分,特征选择、树的生成和树的剪枝。
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;
}
相关文章推荐
- 经典机器学习算法系列3-k近邻算法
- 机器学习算法原理总结系列---算法基础之(2)决策树(Decision Tree)
- 机器学习算法原理总结系列---算法基础之(2)决策树(Decision Tree)
- 经典机器学习算法系列8-PCA
- 经典机器学习算法系列7-svd
- 经典机器学习算法系列-目录
- 经典机器学习算法系列-svm
- 经典机器学习算法系列2-朴素贝叶斯法
- 机器学习算法系列(一)--决策树
- 推荐下权威的《IT十年经典书系列》1打
- CSS3 经典教程系列:CSS3 阴影(text-shadow)详解
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之十三 随机生成和为S的N个正整数——投影法
- 数据挖掘系列(6)决策树分类算法
- IT经典书籍——Head First系列【推荐】
- Spark2.0机器学习系列之3:决策树及Spark 2.0-MLlib、Scikit代码分析
- 经典LinuxCBT视频教程系列 Linux快速学习视频教程一帖通
- 程序员面试、算法研究、编程艺术、红黑树4大经典原创系列集锦与总结
- android开发经典实例系列-----ListView、GridView