第L5周:机器学习|决策树模型学习记录
- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
###将决策树模型用于分类或者回归
***实例:通过鸢尾花数据,训练一个决策树模型
#导入数据
import pandas as pd
import numpy as np
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']
dataset = pd.read_csv(url, names=names)
dataset
花萼-length | 花萼-width | 花瓣-length | 花瓣-width | class | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
... | ... | ... | ... | ... | ... |
145 | 6.7 | 3.0 | 5.2 | 2.3 | Iris-virginica |
146 | 6.3 | 2.5 | 5.0 | 1.9 | Iris-virginica |
147 | 6.5 | 3.0 | 5.2 | 2.0 | Iris-virginica |
148 | 6.2 | 3.4 | 5.4 | 2.3 | Iris-virginica |
149 | 5.9 | 3.0 | 5.1 | 1.8 | Iris-virginica |
150 rows × 5 columns
###应用该模型,可以根据鸢尾花的四个特征去预测它的类别(分类树)
#数据划分
X = dataset.iloc[ : ,[0,1,2,3]].values
Y = dataset.iloc[ : , 4].values
#模型训练
from sklearn import tree
from sklearn.datasets import load_iris
clf = tree.DecisionTreeClassifier() # sk-learn的决策树模型
#DecisionTreeClassifier实际上是基于 CART 算法实现的,默认使用基尼不纯度作为分裂准则。
clf = clf.fit(X, Y) # 用数据训练树模型构建()
r = tree.export_text(clf)
#模型预测结果
text_x = X[[0,1,50,51,100,101], :]
pred_target_prob = clf.predict_proba(text_x) # 预测类别概率
pred_target = clf.predict(text_x) # 预测类别
#打印结果
print("\n===模型======")
print(r)
print("\n===测试数据:=====")
print(text_x)
print("\n===预测所属类别概率:=====")
print(pred_target_prob)
print("\n===预测所属类别:======")
print(pred_target)
===模型======
|--- feature_3 <= 0.80
| |--- class: Iris-setosa
|--- feature_3 > 0.80
| |--- feature_3 <= 1.75
| | |--- feature_2 <= 4.95
| | | |--- feature_3 <= 1.65
| | | | |--- class: Iris-versicolor
| | | |--- feature_3 > 1.65
| | | | |--- class: Iris-virginica
| | |--- feature_2 > 4.95
| | | |--- feature_3 <= 1.55
| | | | |--- class: Iris-virginica
| | | |--- feature_3 > 1.55
| | | | |--- feature_2 <= 5.45
| | | | | |--- class: Iris-versicolor
| | | | |--- feature_2 > 5.45
| | | | | |--- class: Iris-virginica
| |--- feature_3 > 1.75
| | |--- feature_2 <= 4.85
| | | |--- feature_1 <= 3.10
| | | | |--- class: Iris-virginica
| | | |--- feature_1 > 3.10
| | | | |--- class: Iris-versicolor
| | |--- feature_2 > 4.85
| | | |--- class: Iris-virginica
===测试数据:=====
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[7. 3.2 4.7 1.4]
[6.4 3.2 4.5 1.5]
[6.3 3.3 6. 2.5]
[5.8 2.7 5.1 1.9]]
===预测所属类别概率:=====
[[1. 0. 0.]
[1. 0. 0.]
[0. 1. 0.]
[0. 1. 0.]
[0. 0. 1.]
[0. 0. 1.]]
===预测所属类别:======
['Iris-setosa' 'Iris-setosa' 'Iris-versicolor' 'Iris-versicolor'
'Iris-virginica' 'Iris-virginica']
###应用该模型,可以根据花萼长度、花萼宽度、花瓣长度 预测 花瓣宽度(回归树)
#数据划分
X = dataset.iloc[ : ,[0,1,2]].values
Y = dataset.iloc[ : , 3].values
#模型训练
from sklearn import tree
from sklearn.datasets import load_iris
clf = tree.DecisionTreeRegressor() # sk-learn的决策树模型
clf = clf.fit(X, Y) # 用数据训练树模型构建()
r = tree.export_text(clf)
#模型预测结果
test_x = X[[0,1,50,51,100,101], :]
test_y = Y[[0,1,50,51,100,101]]
pred_target = clf.predict(test_x) # 预测y
df = pd.DataFrame()
df["原y"] = test_y
df["预测y"] = pred_target
#打印结果
print("\n===模型======")
# print(r)
print("\n===预测结果======")
print(df)
===模型======
===预测结果======
原y 预测y
0 0.2 0.25
1 0.2 0.20
2 1.4 1.40
3 1.5 1.50
4 2.5 2.50
5 1.9 1.90
总结·
三种决策树算法:
ID3 决策树——最大信息增益
C4.4 决策树——最大信息增益
CART 决策树——最小基尼指数
分类树和回归树的输入输出都是数值形(枚举型我们会先作问题转化):
● 分类树——输出(叶子节点)的是类别。
● 回归树——输出(叶子节点)的是数值。