cap6 决策树

本文探讨了CART决策树在分类和回归任务中的应用。通过鸢尾花数据集展示了决策树的训练和可视化过程。内容包括估算类别概率、CART训练算法、基尼不纯度与信息熵的比较,以及正则化超参数的作用。在回归问题中,CART通过最小化MSE来构建树。
摘要由CSDN通过智能技术生成

决策树可以实现分类或者回归,也是随机森林的基本预测器。

决策树训练和可视化

在鸢尾花数据集上训练一个决策树:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris=load_iris()
x=iris.data[:,2:] 
y=iris.target

tree_clf=DecisionTreeClassifier(max_depth=2)
tree_clf.fit(x,y)

特征值选择的是鸢尾花第2列及后面所有列(花瓣长度和宽度)。
可视化:使用export_graphviz库

#可视化决策树
from sklearn.tree import export_graphviz
export_graphviz(
    tree_clf,
    out_file=image_path('iris_tree.dot'),
    feature_names=iris.feature_names[2:],
    class_names=iris.target_names,
    rounded=True,
    filled=True
)

定义image_path方法:


from __future__ import division, print_function, unicode_literals

import numpy as np
import os

# to make this notebook's output stable across runs
np.random.seed(42)

# To plot pretty figures
# %matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rc('axes', labelsize=14)
mpl.rc('xtick', labelsize=12)
mpl.rc('ytick', labelsize=12)

# Where to save the figures
PROJECT_ROOT_DIR = "."

def image_path(fig_id):
    return os.path.join(PROJECT_ROOT_DIR, "images", fig_id)

def save_fig(fig_id, tight_layout=True):
    print("Saving figure", fig_id)
    if tight_layout:
        plt.tight_layout()
    plt.savefig(image_path(fig_id) + ".png", format='png', dpi=300)

运行以上代码,会在“…\images”文件夹下产生iris_tree.dot文件,打开命令行模式并且工作目录移动到此文件夹下,输入:

dot -Tpng iris_tree.dot -o iris_tree.png

将iris_tree.dot转换为:iris_tree.png
打开iris_tree.png文件:
鸢尾花决策树
注:决策树不需要特征缩放或集中(归一化)。
基尼不存度:如果所有实例都是同一个类型的,则是纯的,用来衡量当前数据集的混乱度,类似于信息熵。
G i = 1 − ∑ k = 1 n p i , k 2 G_i=1-\sum_{k=1}^{n}p_{i,k}^2 Gi=1k=1npi

好的,我们可以使用图像处理技术和机器学习算法来实现炉口火焰的识别,以下是一些步骤: 1. 读取视频帧并将其转换为灰度图像。 2. 对图像进行预处理,例如中值滤波和高斯滤波等去除噪声。 3. 提取图像中的火焰区域。可以尝试使用边缘检测算法(如Canny算法)和二值化算法(如OTSU阈值算法)来提取火焰区域。 4. 对火焰区域进行特征提取。可以尝试使用纹理特征、颜色特征和形状特征等。 5. 使用机器学习算法(如支持向量机、决策树、随机森林等)训练模型,对火焰区域进行分类,判断是否为炉口火焰。 下面是一个简单的代码框架,你可以根据需要进行修改和完善: ``` import cv2 import numpy as np # 读取视频 cap = cv2.VideoCapture('video.mp4') while cap.isOpened(): # 读取视频帧并转换为灰度图像 ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 预处理 blur = cv2.medianBlur(gray, 5) blur = cv2.GaussianBlur(blur, (5, 5), 0) # 提取火焰区域 edges = cv2.Canny(blur, 100, 200) ret, binary = cv2.threshold(edges, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 特征提取 features = [] for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) roi = gray[y:y+h, x:x+w] # 使用HOG特征提取进行分类 # 分类 result = model.predict(features) # 显示结果 for i in range(len(contours)): if result[i] == 1: cv2.drawContours(frame, contours, i, (0, 0, 255), 3) cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 需要注意的是,由于没有使用分类器,我们需要手动提取特征并进行分类。在上面的代码中,我使用了HOG特征提取算法进行分类,你也可以尝试其他特征提取算法,如LBP、SIFT等。另外,训练模型的代码我没有给出,你需要自己实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值