from sklearn.tree import DecisionTreeRegressor
from sklearn import tree
import numpy as np
import matplotlib.pyplot as plt
#创建数据
X_train = np.linspace(0,2*np.pi,40).reshape(-1,1)#训练数据就是符合要求的二维数据
#二维:[[样本一].[样本二],[样本三]....]多个样本,每个样本,包含多个属性
#将 X_train 的每个特征值通过正弦(np.sin)和余弦(np.cos)函数进行变换,并将结果沿着指定的轴(在这个例子中是轴1,即列方向)进行拼接。
y_train = np.concatenate([np.sin(X_train),np.cos(X_train)],axis = 1)
plt.figure(figsize=(4,4))
plt.scatter(y_train[:,0],y_train[:,1])
X_test = np.linspace(0,2*np.pi,256).reshape(-1,1)
#首先使用线性回归
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train,y_train)#建模
y_pred = model.predict(X_test)#预测
#如果效果好,绘制测试数据应该是圆
plt.scatter(y_pred[:,0],y_pred[:,1])
#决策树
#决策树深度为3
model =DecisionTreeRegressor(max_depth=3)
model.fit(X_train,y_train)#建模
y_pred = model.predict(X_test)#预测
display(y_pred.shape)
#如果效果好,绘制测试数据应该是圆
plt.scatter(y_pred[:,0],y_pred[:,1])
_ = plt.axis('equal')#横纵坐标相等
import graphviz
dot_data = tree.export_graphviz(model,filled=True,rounded = True)
graph = graphviz.Source(dot_data) #使用 graphviz 的 Source 对象来创建图形
graph
#决策树深度为4
model =DecisionTreeRegressor(max_depth=4)
model.fit(X_train,y_train)#建模
y_pred = model.predict(X_test)#预测
display(y_pred.shape)
#如果效果好,绘制测试数据应该是圆
plt.scatter(y_pred[:,0],y_pred[:,1])
_ = plt.axis('equal')#横纵坐标相等
#不进行剪枝,默认展开
model =DecisionTreeRegressor(max_depth=None)
model.fit(X_train,y_train)#建模
y_pred = model.predict(X_test)#预测
display(y_pred.shape)
#如果效果好,绘制测试数据应该是圆
plt.scatter(y_pred[:,0],y_pred[:,1])
_ = plt.axis('equal')#横纵坐标相等
dot_data = tree.export_graphviz(model,filled=True,rounded = True)
graph = graphviz.Source(dot_data)
graph
决策回归树(Decision Regression Tree)是一种用于解决回归问题的机器学习算法。它特别适用于以下类型的问题:
-
连续值预测:决策回归树预测的是一个连续的数值,如房价、温度、销售额等。
-
非线性关系:它可以捕捉数据中复杂的非线性关系,而不需要事先假设数据遵循特定的数学模型。
-
特征选择:通过构建树的过程中的特征分裂,决策回归树可以识别出对预测目标变量最重要的特征。
-
数据探索:决策树提供了一种直观的数据探索方式,帮助理解不同特征如何影响预测结果。
-
模型解释:决策树模型易于解释和可视化,可以展示特征与目标变量之间的关系。
-
多变量问题:它可以处理具有多个特征(自变量)的数据集。
-
多输出问题:虽然决策回归树通常用于单输出问题,但也可以扩展到多输出回归问题。
-
数据集大小:对于小到中等大小的数据集,决策回归树可以工作得很好,尤其是在数据量不足以训练复杂的模型时。
-
数据类型:决策树可以处理数值型和类别型数据,只要适当地预处理和编码。
-
先验知识:如果对数据集中的变量关系有先验知识,可以通过决策树的构建过程来验证这些知识。
-
基线模型:在许多情况下,决策树作为基线模型,提供了一个简单的性能比较标准。
-
集成学习:虽然决策树本身可能容易过拟合,但它们可以作为集成方法(如随机森林或梯度提升树)的一部分,以提高预测性能和鲁棒性。