以下demo的大概意思:选择是否相亲是标签y,特征是年龄、身高、年收入、学历。
最后是测试,我输入年龄、身高、年收入、学历。模型判断我是否需要选择相亲。
1、sklearn中对应的函数DecisionTreeClassifier函数(分类),DecisionTreeRegressor(回归),分类代码如下:
- from sklearn import tree
- import numpy as np
-
- #年龄,身高,年收入,学历(大专:0,本科:1,硕士:2)
- X = np.array(
- [[25, 179, 15, 0],
- [33, 190, 19 ,0],
- [28, 180, 18, 2],
- [25, 178, 18, 2],
- [46, 100, 100, 2],
- [40, 170, 170, 1],
- [34, 174, 20, 2],
- [36, 181, 55, 1],
- [35, 170, 25, 2],
- [30, 180, 35, 1],
- [28, 174, 30, 1],
- [29, 176, 36, 1]])
-
- #0表示没有相亲,1表示相亲
- y= [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]
-
- clf = tree.DecisionTreeClassifier().fit(X, y)
- p=[[28, 180, 18, 2]]
- print(clf.predict(p)) #[1]
2、sklearn中对应的函数RadomForestClassifier函数(分类),RadomForestRegressor(回归)
- from sklearn.ensemble import RandomForestClassifier
- import numpy as np
-
- #年龄,身高,年收入,学历(大专:0,本科:1,硕士:2)
- X = np.array(
- [[25, 179, 15, 0],
- [33, 190, 19 ,0],
- [28, 180, 18, 2],
- [25, 178, 18, 2],
- [46, 100, 100, 2],
- [40, 170, 170, 1],
- [34, 174, 20, 2],
- [36, 181, 55, 1],
- [35, 170, 25, 2],
- [30, 180, 35, 1],
- [28, 174, 30, 1],
- [29, 176, 36, 1]])
-
- #0表示没有相亲,1表示相亲
- y= [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]
-
- clf =RandomForestClassifier().fit(X, y)
- p=[[28, 180, 18, 2]]
- print(clf.predict(p)) #[1]
决策树的架构比较:
ID3、C4.5、CART的区别
1984年提出的cart,1986年提出的ID3,1993年提出的c4.5
ID3 使用信息增益作为选择特征的准则;
C4.5 使用信息增益比作为选择特征的准则;
CART 使用 Gini 指数作为选择特征的准则
ID3:
ID3算法是由Ross Quinlan提出的决策树的一种算法实现,以信息论为基础,以
信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。只适用于分类问题处理。缺点只能处理离散的,并且选择倾向属性值较多的
C4.5:
C4.5是基于ID3优化后产出的算法,主要优化了关于节点分支的计算方式,支持连续,支持特征筛选
CART:(sklearn采用的方式)
CART 与 ID3,C4.5 不同之处在于 CART 生成的树
必须是二叉树。也就是说,无论是回归还是分类问题,无论特征是离散的还是连续的,无论属性取值有多个还是两个,内部节点只能根据属性值进行二分。
建议:
小样本建议考虑c4.5、大样本建议考虑cart