24/8/9算法笔记 决策树VS线性回归

复制代码
from sklearn.tree import DecisionTreeRegressor

from sklearn.linear_model import LinearRegression

from sklearn import datasets

from sklearn.model_selection import train_test_split
import numpy as np

X,y = datasets.load_diabetes(return_X_y=True)#糖尿病数据
X_train,X_test,y_train,y_test = train_test_split(X,y)

model = LinearRegression()
model.fit(X_train,y_train)
#上面得分更高,训练数据
#数据量足够大,一定是上面得分更加高
print('训练数据得分',model.score(X_train,y_train))
print('测试数据得分',model.score(X_test,y_test))
复制代码
import matplotlib.pyplot as plt
plt.rcParams['font.family'] ='Fangsong'
plt.figure(figsize = (12,6))
max_depth = np.arange(1,16)
score=[]
score2=[]
for d in max_depth:
    model = DecisionTreeRegressor(max_depth=d)
    model.fit(X_train,y_train)
    score2.append(model.score(X_train,y_train))
    s = model.score(X_test,y_test)
    score.append(s)
    
plt.plot(max_depth,score2,'g*-')#绿色的线是训练数据,随着树深度的增加得分变化
plt.plot(max_depth,score,'ro-')#'红色的是测试数据随深度的增加
plt.xlabel('树最大深度',fontsize = 18)
plt.ylabel('Score',fontsize = 18)
plt.title('决策树得分随着树深度变化',fontsize = 18)
plt.legend(['训练数据的得分','测试数据的得分'],fontsize=18)
print('最高分数',max(score))

决策树和线性回归是两种常用的机器学习算法,它们在很多方面有所不同:

  1. 模型类型

    • 决策树:是一种非参数的监督学习算法,用于分类和回归任务。它通过学习简单的决策规则从数据特征中推断出目标值。
    • 线性回归:是一种参数的监督学习算法,仅用于回归任务。它假设输入特征和输出变量之间存在线性关系。
  2. 处理数据的能力

    • 决策树可以处理数值和类别数据,而且不需要假设数据的分布。
    • 线性回归通常假设数据符合正态分布,并且主要处理数值数据。
  3. 模型解释性

    • 决策树模型易于理解和解释,可以可视化地展示决策过程。
    • 线性回归模型的解释性也很好,因为它基于权重系数来表示特征对预测结果的影响。
  4. 对非线性问题的处理

    • 决策树能够很好地处理非线性问题,因为它通过分割数据空间来捕捉复杂的模式。
    • 线性回归在处理非线性问题时表现不佳,因为它仅适用于线性关系。
  5. 过拟合风险

    • 决策树容易过拟合,尤其是当树变得非常深和复杂时。需要使用剪枝等技术来控制模型复杂度。
    • 线性回归通常不容易过拟合,除非特征数量接近或超过样本数量。
  6. 模型复杂度

    • 决策树的复杂度可以通过树的深度和叶子节点的数量来衡量。
    • 线性回归的复杂度通常较低,因为它只涉及特征的线性组合。
  7. 训练速度

    • 决策树通常训练速度较快,尤其是在使用像 CART 这样的算法时。
    • 线性回归的训练速度通常非常快,因为它只涉及解决一个优化问题。
  8. 预测速度

    • 决策树的预测速度通常较快,因为只需要进行一系列的比较操作。
    • 线性回归的预测速度也很快,因为它只涉及计算一个线性组合。
  9. 多输出问题

    • 决策树可以很容易地扩展到多输出问题,尽管需要对每个输出单独建模。
    • 线性回归也可以处理多输出问题,但每个输出需要一个独立的模型。
  10. 特征选择

    • 决策树在构建过程中可以进行特征选择,自动选择最有信息量的特征进行分裂。
    • 线性回归通常需要预先进行特征选择,以避免模型性能下降。
相关推荐
少爷晚安。19 分钟前
Java零基础学习完整笔记,基于Intellij IDEA开发工具,笔记持续更新中
java·笔记·学习
坚持编程的菜鸟20 分钟前
LeetCode每日一题——Pow(x, n)
c语言·算法·leetcode
csdn_aspnet26 分钟前
分享MATLAB在数据分析与科学计算中的高效算法案例
算法·matlab·数据分析
白云千载尽30 分钟前
moveit使用和机器人模型与状态--正向运动学和逆向运动学分析(四)
算法·机器人·逆运动学·moveit·正向运动学
我想吃余38 分钟前
【0基础学算法】前缀和刷题日志(三):连续数组、矩阵区域和
算法·矩阵·哈希算法
2501_938773991 小时前
文档搜索引擎搜索模块迭代:从基础检索到智能语义匹配升级
人工智能·算法·搜索引擎
CS创新实验室1 小时前
典型算法题解:长度最小的子数组
数据结构·c++·算法·考研408
我有一些感想……1 小时前
浅谈 BSGS(Baby-Step Giant-Step 大步小步)算法
c++·算法·数论·离散对数·bsgs
lkbhua莱克瓦241 小时前
Java基础——常用API2
java·笔记·github·学习方法
麦麦大数据1 小时前
F042 A星算法课程推荐(A*算法) | 课程知识图谱|课程推荐vue+flask+neo4j B/S架构前后端分离|课程知识图谱构造
vue.js·算法·知识图谱·neo4j·a星算法·路径推荐·课程推荐