用决策树(CART)解决iris分类问题

首先先看Iris数据集

Sepal.Length——花萼长度 Sepal.Width——花萼宽度

Petal.Length——花瓣长度 Petal.Width——花瓣宽度

通过上述4中属性可以预测花卉属于Setosa,Versicolour,Virginica 三个种类中的哪一类

决策树 by CART

决策树有挺多种,这里讲下CART

CART的执行过程是这样的:

  1. 用特征值k和下限tk二分子集
  2. 不断二分,直到到达最大深度或者划分不能再减少不纯度为止

这一下sklearn都会自动帮我们完成,我们调用就行了

如何避免过拟合问题

减小最大深度等等

一个tip:

​ min_* 的调大

​ max_*的调小

​ 就是DecisionTreeClassifier里面的参数,具体看文档_(:з」∠)_

损失函数的比较

sklearn提供了两种损失函数gini和entropy

gini是通过计算每个节点的不纯度,具体公式如下↓

\(J(k,t_k) = \frac{m_{left}}{m}G_{left} + \frac{m_{right}}{m}G_{right}\)

entropy在这里就不再赘述了

sklearn默认的是调用gini,因为gini的速度会快点,而且两者最后的效果是差不多的,真要比的话entropy产生的决策树会更平衡点

接下来我们来看代码
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
import numpy as np

iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target     #目标值

tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42) #定义最大深度和确定随机种子
tree_clf.fit(X, y)  #训练
print(tree_clf.predict_proba([[5, 1.5]]))   #预测返回的是可能性

#以上代码运行后将会产生如下输出 [[ 0.          0.90740741  0.09259259]]
#分别代表属于每一种类别可能的概率
#也可以用如下代码
print(tree_clf.predict[[5,1.5]])    #直接输出属于哪一类
看下上面生成的决策树的样子

1414681-20180610114757775-809669632.png

注:

​ valuse是它划分到各个类的数量

​ samples 指的是当前节点的数据个数

​ 从左表橙色的点可以看出,gini=0意味着划分到了相同的类别里面

ps.以上代码及图片来自《Hands-On Machine Learning with Scikit-Learn》一书

如需转载请注明出处

喜欢要不支持下(:з」∠)

转载于:https://www.cnblogs.com/MartinLwx/p/9162300.html

以下是使用Python实现分类回归决策树(CART)的代码示例: 首先,我们需要导入必要的库: ```python from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor from sklearn.datasets import load_iris, load_boston from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, mean_squared_error ``` 接下来,我们可以使用`load_iris`和`load_boston`函数分别加载鸢尾花数据集和波士顿房价数据集: ```python # 加载鸢尾花数据集 iris = load_iris() X, y = iris.data, iris.target # 加载波士顿房价数据集 boston = load_boston() X_reg, y_reg = boston.data, boston.target ``` 然后,我们可以将数据集划分为训练集和测试集: ```python # 分割鸢尾花数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 分割波士顿房价数据集为训练集和测试集 X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42) ``` 接下来,我们可以使用`DecisionTreeClassifier`和`DecisionTreeRegressor`类来构建分类回归决策树: ```python # 构建分类决策树模型并拟合训练集 clf = DecisionTreeClassifier(random_state=42) clf.fit(X_train, y_train) # 构建回归决策树模型并拟合训练集 reg = DecisionTreeRegressor(random_state=42) reg.fit(X_train_reg, y_train_reg) ``` 然后,我们可以使用测试集来评估模型的性能: ```python # 计算分类决策树模型在测试集上的准确率 y_pred = clf.predict(X_test) acc = accuracy_score(y_test, y_pred) print(f"Accuracy: {acc:.2f}") # 计算回归决策树模型在测试集上的均方误差 y_pred_reg = reg.predict(X_test_reg) mse = mean_squared_error(y_test_reg, y_pred_reg) print(f"MSE: {mse:.2f}") ``` 最后,我们可以绘制决策树的图形以可视化模型的决策过程: ```python from sklearn.tree import plot_tree import matplotlib.pyplot as plt # 绘制分类决策树模型的图形 plt.figure(figsize=(12, 6)) plot_tree(clf, filled=True) plt.show() # 绘制回归决策树模型的图形 plt.figure(figsize=(12, 6)) plot_tree(reg, filled=True) plt.show() ``` 以上就是使用Python实现分类回归决策树(CART)的代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值