以下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