机器学习02

机器学习02

线性回归

------属于监督学习 - 回归任务,用于学习特征与连续标签间的线性映射 关系,输出连续数值,可用于预测房价、销量、指标等。

------假设:特征与标签之间存在线性相关关系。

------分为一元线性回归(单个特征)、多元线性回归(多个特征)。

------线性模型试图学得一个通过属性(特征)的线性组合来进行预测的函数。

一元线性回归: y ^ = w 0 + w x \hat{y} = w_0 + w x y^=w0+wx

多元线性回归:

y ^ = w 0 + w 1 x 1 + w 2 x 2 + ⋯ + w n x n \hat{y} = w_0 + w_1 x_1 + w_2 x_2 + \dots + w_n x_n y^=w0+w1x1+w2x2+⋯+wnxn

一般用向量形式写成:

y ^ = w ⊤ x + w 0 \hat{y} = \boldsymbol{w}^\top \boldsymbol{x} + w_0 y^=w⊤x+w0

  • 优点:简单、可解释性强、训练快;
  • 缺点:只能拟合线性关系,无法捕捉非线性规律,复杂数据拟合效果差。

损失函数

目标:找到最优权重 w \boldsymbol{w} w,最小化真实值与预测值的平方误差之和(损失函数)。

  1. 平方误差和 SSE
    S S E = ∑ i = 1 m ( y i − y ^ i ) 2 = ∑ i = 1 m ( y i − w ⊤ x i ) 2 SSE = \sum_{i=1}^m \big(y_i - \hat{y}i\big)^2 = \sum{i=1}^m \big(y_i - \boldsymbol{w}^\top \boldsymbol{x}_i\big)^2 SSE=i=1∑m(yi−y^i)2=i=1∑m(yi−w⊤xi)2
  2. 均方误差 MSE(常用损失)

参数求解方法

正规方程

直接数学推导最优权重(拉格朗日乘子法-求偏导),无需迭代。

------样本总数为 m,以均方误差 MSE 作为目标损失函数:

  1. 一元线性回归:
    L ( w , b ) = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 = 1 m ∑ i = 1 m ( y i − w x i − w 0 ) 2 L(w,b) = \frac{1}{m}\sum_{i=1}^m \big(y_i - \hat{y}i\big)^2 = \frac{1}{m}\sum{i=1}^m \big(y_i - w x_i - w_0\big)^2 L(w,b)=m1i=1∑m(yi−y^i)2=m1i=1∑m(yi−wxi−w0)2
    对权重和偏置分别求偏导,并令其偏导为0,可得:
    ∂ L ∂ w = 0 , ∂ L ∂ w 0 = 0 \frac{\partial L}{\partial w}=0,\quad \frac{\partial L}{\partial w_0}=0 ∂w∂L=0,∂w0∂L=0
  2. 多元线性回归(参考西瓜书)
    将 w \boldsymbol{w} w 和 w 0 w_0 w0 写成向量形式 w ^ = ( w ; b ) \hat{w} = (w; b) w^=(w;b),数据集表示为一个 m*(d+1) 大小的矩阵 X \boldsymbol{X} X,每行对应一个样本,该行的前 d 个元素对应样本的 d 个属性(特征)值,最后一个元素恒为1,即:
    X = ( x 11 x 12 ... x 1 d 1 x 21 x 22 ... x 2 d 1 ⋮ ⋮ ⋱ ⋮ ⋮ x m 1 x m 2 ... x m d 1 ) = ( x 1 ⊤ 1 x 2 ⊤ 1 ⋮ ⋮ x m ⊤ 1 ) \mathbf{X} = \begin{pmatrix} x_{11} & x_{12} & \dots & x_{1d} & 1 \\ x_{21} & x_{22} & \dots & x_{2d} & 1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ x_{m1} & x_{m2} & \dots & x_{md} & 1 \end{pmatrix} = \begin{pmatrix} \boldsymbol{x}_1^\top & 1 \\ \boldsymbol{x}_2^\top & 1 \\ \vdots & \vdots \\ \boldsymbol{x}m^\top & 1 \end{pmatrix} X= x11x21⋮xm1x12x22⋮xm2......⋱...x1dx2d⋮xmd11⋮1 = x1⊤x2⊤⋮xm⊤11⋮1
    即最小化目标为:
    w ^ ∗ = arg ⁡ min ⁡ w ^ ( y − X w ^ ) T ( y − X w ^ ) . \hat{w}^* = \arg\min
    {\hat{w}} \left( \boldsymbol{y} - \boldsymbol{X}\hat{w} \right)^\mathrm{T} \left( \boldsymbol{y} - \boldsymbol{X}\hat{w} \right). w^∗=argw^min(y−Xw^)T(y−Xw^).
    对 w ^ \hat{w} w^ 求偏导,令其为零可得( X T X X^\mathrm{T} X XTX 为满秩矩阵或正定矩阵时):
    w ^ ∗ = ( X T X ) − 1 X T y \hat{w}^* = \left( X^\mathrm{T} X \right)^{-1} X^\mathrm{T} y w^∗=(XTX)−1XTy
    令 x ^ i = ( x i ; 1 ) \hat{x}_i = (x_i; 1) x^i=(xi;1),最终学得的多元线性回归模型为:
    f ( x ^ i ) = x ^ i T ( X T X ) − 1 X T y . f(\hat{x}_i) = \hat{x}_i^\mathrm{T} \left( X^\mathrm{T} X \right)^{-1} X^\mathrm{T} y. f(x^i)=x^iT(XTX)−1XTy.
  • 优点:一次计算直接得到全局最优解,结果可复现、数学可解释。
  • 缺点:特征维度大时计算成本爆炸(矩阵求逆), X T X X^\mathrm{T} X XTX 不可逆时无法求解,内存占用高。

梯度下降

是迭代优化算法,用于最小化损失函数,求解线性回归最优参数 w \boldsymbol{w} w 和 w 0 w_0 w0。

------损失对权重的梯度:

∇ L ( w ) = ∂ L ∂ w \nabla L(\boldsymbol{w}) = \frac{\partial L}{\partial \boldsymbol{w}} ∇L(w)=∂w∂L

------参数更新迭代公式( η \eta η 为学习率,>0):

w = w − η ⋅ ∇ L ( w ) \boldsymbol{w} = \boldsymbol{w} - \eta \cdot \nabla L(\boldsymbol{w}) w=w−η⋅∇L(w)

流程:

  1. 初始化参数:随机或全部置 0,初始化 w \boldsymbol{w} w 、 w 0 w_0 w0;
  2. 设定超参数:确定学习率 η \eta η、最大迭代次数、收敛阈值;
  3. 迭代循环:
    遍历全部样本,计算当前梯度;
    同步更新 w \boldsymbol{w} w 、 w 0 w_0 w0;
    计算更新后的损失函数;
  4. 停止条件(满足其一即可):
    达到预设最大迭代次数;
    相邻两轮损失差值小于收敛阈值,认为损失不再下降,已逼近最小值。

超参数(学习率 η \eta η):

  • η \eta η过大:步长太大,越过最小值,损失震荡、不收敛,甚至发散;
  • η \eta η过小:下降速度极慢,需要数万次迭代才能收敛,训练耗时爆炸;
  • 通常取 0.001~0.01。

该方法优缺点:

  • 优点:适配高维大数据,通用性强;
  • 缺点:需要手动调超参数,仅能得到近似最优解,对特征量纲敏感,存在收敛风险,学习率及初始化设置不当会出现震荡、发散。

梯度下降分类:

  1. 批量梯度下降 BGD(Batch Gradient Descent)
    每一轮迭代,使用全部 m 个样本计算完整梯度。
    ------梯度方向稳定、无噪声,稳定收敛到全局最小值;但超大样本时单次迭代计算量极大,大数据场景迭代速度很慢。
  2. 随机梯度下降 SGD(Stochastic Gradient Descent)
    每一轮仅随机选取 1 个样本近似代替全局梯度,放弃全部样本求和。
    ------迭代速度极快,每一步开销极小,不用一次性加载全部数据集;不稳定,容易陷入局部最优解。
  3. 小批量梯度下降 (Mini-Batch Gradient Descent)
    折中方案:每轮选取一小批 b 个样本(1<b<m,常见 b=32,64,128,256)计算梯度。
    ------兼顾 BGD 稳定、SGD 速度快两大优势;但新增超参数:批次大小 b,需要调试。

线性回归示例

python 复制代码
# 1. 导入库
from sklearn.datasets import load_diabetes                # 内置回归数据集,用于预测糖尿病病情程度
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression         # 多元线性回归模型,底层最小二乘法求解
from sklearn.metrics import mean_squared_error, r2_score  # 评估指标:均方误差、拟合优度

# 2. 加载糖尿病数据集(回归标准数据集)
data = load_diabetes()
X = data.data    # 10个特征
y = data.target  # 连续标签:疾病定量指数

# 3. 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 4. 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 5. 构建并训练线性回归模型
lr = LinearRegression()
lr.fit(X_train, y_train)

# 6. 查看模型参数
print("特征权重w:", lr.coef_)
print("截距w0:", lr.intercept_)

# 7. 预测
y_pred = lr.predict(X_test)

# 8. 回归模型评估
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("均方误差 MSE:", mse)
print("决定系数 R²:", r2)

欠拟合、过拟合成因及解决方法

欠拟合

------原因:模型过于简单,表达能力不足(仅简单一阶线性,数据本身非线性);特征数量太少,缺少有效信息;训练不充分(梯度下降迭代轮数不足、学习率过小没收敛)。

------解决方法:

  1. 增加新特征
    人工挖掘业务相关的新特征,补充数据有效信息;或对原始特征生成高次项,把线性模型拓展为多项式回归,捕捉非线性关系;
    例如:构造 x 1 ⋅ x 2 x_1⋅x_2 x1⋅x2 等交互特征;单特征 x x x 扩展为 x 1 , x 2 , x 3 , . . . x_1, x_2, x_3,... x1,x2,x3,...
  2. 优化梯度下降训练过程
    增大迭代次数,保证损失收敛;
    适度调大学习率,避免下降过慢卡在局部高位损失;
    检查是否未做特征缩放导致收敛缓慢。
  3. 更换更复杂模型(例:随机森林、XGBoost)

过拟合

------原因:模型复杂性过高,存在大量高次噪声项,泛化能力差。

------解决方法:

  1. 正则化
    (1)L1 正则化(Lasso 回归):在损失函数中添加 L1 正则化项;
    L Lasso = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 + α ∑ j = 1 d ∣ w j ∣ L_{\text{Lasso}} = \frac{1}{m}\sum_{i=1}^m (y_i - \hat y_i)^2 + \alpha \sum_{j=1}^d |w_j| LLasso=m1i=1∑m(yi−y^i)2+αj=1∑d∣wj∣
    ------ α \alpha α 为惩罚(正则,>0)系数,该值越大,权重调整的幅度就越大,表示对特征惩罚力度就越大;
    ------L1 正则化惩罚权重绝对值和,可将无用特征权重压缩至 0,实现特征自动筛选。
    (2)L2 正则化(岭回归 Ridge):在损失函数中添加 L2 正则化项;
    L Ridge = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 + α ∑ j = 1 d w j 2 L_{\text{Ridge}} = \frac{1}{m}\sum_{i=1}^m (y_i - \hat y_i)^2 + \alpha \sum_{j=1}^d w_j^2 LRidge=m1i=1∑m(yi−y^i)2+αj=1∑dwj2
    ------惩罚权重平方和,让所有权重趋近于 0 但不为 0,抑制参数震荡;
python 复制代码
from sklearn.linear_model import Ridge, Lasso
# L1 正则化模型
lasso = Lasso(alpha=1.0)
# L2 正则化模型
ridge = Ridge(alpha=1.0)
  1. 降低模型复杂度
  2. 扩充训练数据集,更多真实样本可以稀释噪声,让模型学习真实规律。
  3. 特征降维,消除多重共线性,减少冗余特征。
  4. 交叉验证,选择最优超参数。

逻辑回归

------有监督二分类算法;

------在线性回归的基础上套一个 Sigmoid 激活函数,把线性输出映射到 0,1 概率区间,输出样本的类别概率,再根据类别判定规则(概率阈值)进行分类。

Sigmoid 函数(激活函数)

σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e−z1

------输入 z,输出值域为 (0,1);函数单调递增;

------ z = 0 z=0 z=0时, σ ( z ) = 0.5 \sigma(z)=0.5 σ(z)=0.5,可设置为分类阈值,大于0.5判正类,小于判负类。

其导数为:

σ ′ ( z ) = σ ( z ) ( 1 − σ ( z ) ) \sigma'(z) = \sigma(z)\big(1-\sigma(z)\big) σ′(z)=σ(z)(1−σ(z))

逻辑回归模型

  1. 线性得分项
    多元特征线性回归:
    z = w ⊤ x = w 0 + w 1 x 1 + w 2 x 2 + ⋯ + w d x d z = \boldsymbol{w}^\top \boldsymbol{x} = w_0 + w_1 x_1 + w_2 x_2 + \dots + w_d x_d z=w⊤x=w0+w1x1+w2x2+⋯+wdxd
  2. 概率预测公式
    将上述的线性得分代入 sigmoid 函数,得到样本为的类别概率:
    y ^ = σ ( w ⊤ x ) = 1 1 + e − w ⊤ x \hat{y} = \sigma(\boldsymbol{w}^\top \boldsymbol{x}) = \frac{1}{1+e^{-\boldsymbol{w}^\top \boldsymbol{x}}} y^=σ(w⊤x)=1+e−w⊤x1
  3. 类别判定规则(阈值 0.5)
    y ^ c l a s s = { 1 , y ^ ≥ 0.5 0 , y ^ < 0.5 \hat{y}_{class}= \begin{cases} 1,\quad & \hat{y} \ge 0.5 \\ 0,\quad & \hat{y} < 0.5 \end{cases} y^class={1,0,y^≥0.5y^<0.5

损失函数

  1. 单样本交叉熵损失
    y ∈ 0 , 1 y ∈ {0,1} y∈0,1真实标签, y ^ \hat{y} y^预测概率:
    L ( y ^ , y ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) L(\hat{y},y) = -y\log(\hat{y}) - (1-y)\log(1-\hat{y}) L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
    真实 y = 1 y=1 y=1, y ^ \hat{y} y^越接近1,损失越小;
    真实 y = 0 y=0 y=0, y ^ \hat{y} y^越接近0,损失越小;
  2. 全部样本平均损失
    J ( w ) = 1 m ∑ i = 1 m − y i log ⁡ ( y \^ i ) − ( 1 − y i ) log ⁡ ( 1 − y \^ i ) J(\boldsymbol{w}) = \frac{1}{m}\sum_{i=1}^m \Big -y_i\\log(\\hat{y}_i) - (1-y_i)\\log(1-\\hat{y}_i) \\Big J(w)=m1i=1∑m−yilog(y\^i)−(1−yi)log(1−y\^i)
    优化目标:
    w ∗ = arg ⁡ min ⁡ w J ( w ) \boldsymbol{w}^* = \arg\min_{\boldsymbol{w}} J(\boldsymbol{w}) w∗=argwminJ(w)

示例

python 复制代码
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score

# 1. 生成二分类数据集
X, y = make_classification(n_samples=1000, n_features=10, n_informative=6, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 2. 初始化逻辑回归(默认L2正则,C=1/α,C越小正则越强)
# penalty: 'l2'/'l1';C 正则系数倒数
lr = LogisticRegression(penalty="l2", C=1.0, random_state=42, max_iter=1000)
lr.fit(X_train, y_train)

# 3. 预测
y_pred = lr.predict(X_test)
y_pred_proba = lr.predict_proba(X_test) # 输出 [负类概率, 正类概率]

# 4. 评估
print("截距 w0:", lr.intercept_[0])
print("各特征权重:", lr.coef_[0])
print("准确率:", accuracy_score(y_test, y_pred))
print("\n混淆矩阵:")
print(confusion_matrix(y_test, y_pred))
print("\n分类报告:")
print(classification_report(y_test, y_pred))

决策树

相关概念

------决策树是有监督的非线性机器学习模型,既可以做分类,也可以做回归。

------一棵决策树包含一个根结点、若干个内部结点和若干个叶结点。

------根结点包含样本全集;内部结点代表对某一个特征(属性)的条件划分,分支代表该条件的判定结果;叶结点对应决策结果,输出类别(分类)或预测值(回归)。

  • 核心思想:
    不断选择最优特征 对数据集进行划分,让划分后的子集 "纯度" 越来越高,直到子集全部属于同一类别(分类)或者误差足够小(回归),停止分裂。

划分准则

基础概念:信息熵

信息熵衡量数据集的混乱程度,熵越大,样本越混杂,纯度越低。

设样本集合 D D D,类别占比 p k p_k pk,表示数据集中第 k k k 类样本的占比:

E n t ( D ) = − ∑ k = 1 K p k log ⁡ 2 p k Ent(D) = -\sum_{k=1}^{K} p_k \log_2 p_k Ent(D)=−k=1∑Kpklog2pk

(1)ID3 算法:使用信息增益 选择最优划分特征

信息增益 G a i n ( D , a ) Gain(D,a) Gain(D,a) 表示用特征 a a a 划分数据集前后,熵的减少量,信息增益越大,代表这个特征划分后纯度提升越大。

G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a) = Ent(D) - \sum_{v=1}^{V}\frac{|D_v|}{|D|}Ent(D_v) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)

------离散特征 a a a 有 V V V 个可能取值 a 1 , a 2 , . . . , a V {a^1, a^2, ..., a^V} a1,a2,...,aV,使用特征 a a a 对样本集 D D D 进行划分,产生 V V V 个分支结点,其中第 v v v 个分支结点包含 D D D 中所有在特征 a a a 上取值为 a v a^v av 的样本,记为 D v D_v Dv。

------注意:对取值类别多的特征有所偏好,易造成过拟合。

(2)C4.5 算法:使用信息增益率 修正偏好

G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( D ) , I V ( D ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ Gain\ratio(D,a) = \frac{Gain(D,a)}{IV(D)},IV(D)= - \sum{v=1}^{V}\frac{|D_v|}{|D|}\log_2\frac{|D_v|}{|D|} Gain_ratio(D,a)=IV(D)Gain(D,a),IV(D)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣

其中 I V ( D ) IV(D) IV(D) 称为特征 a a a 的"属性值(特征自身的熵)",特征 a a a 的可能取值数目越多, I V ( D ) IV(D) IV(D) 越大,压制偏向性。

------注意:信息增益率对取值类别少的特征有所偏好。

------C4.5算法并不是直接选择增益率最大的候选划分属性(特征),而是先从候选划分属性中先找出信息增益高于平均水平的属性,在从中选择增益率最高的。

(3)CART算法(Classification And Regression Tree,分类回归树)

  1. 分类任务:使用基尼指数来选择划分属性
    数据集 D D D 的纯度可用基尼值来表示:
    G i n i ( D ) = ∑ k = 1 K ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 K p k 2 . \begin{aligned} \mathrm{Gini}(D) &= \sum_{k=1}^K \sum_{k' \neq k} p_k p_{k'} \\ &= 1 - \sum_{k=1}^K p_k^2 . \end{aligned} Gini(D)=k=1∑Kk′=k∑pkpk′=1−k=1∑Kpk2.
    ------基尼指数反映了从数据集 D D D 中随机抽取两个样本,其类别标记不一致的概率。基尼指数 G i n i ( D ) \mathrm{Gini}(D) Gini(D) 越小,数据集的纯度越高。
    属性 a a a 的基尼指数定义为:
    G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) . \mathrm{Gini\index}(D,a) = \sum{v=1}^{V} \frac{|D^v|}{|D|}\mathrm{Gini}(D^v). Gini_index(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv).
  2. 回归任务:均方误差MSE
    选择分割点,使左右两个子集的均方误差之和最小。
  3. 特点
    ------只能做二分划分(二叉树),无论特征多少,每次只分成左右两支;
    ------既支持分类,又支持回归;
    ------可连续特征自动寻找最优分割阈值,最常用。

完整决策树建立过程

  1. 初始状态:全部样本放在根结点;
  2. 遍历所有特征+所有分割点,按照基尼指数 / 信息增益 / MSE选出最优划分特征和阈值;
  3. 将当前结点拆分为左右两个子结点;
  4. 对子结点递归重复分裂;
  5. 停止分裂条件,满足任意一条就不再生长:
    ① 当前节点样本数量少于最小样本数;
    ② 节点纯度已经达到 100%(全部同类别);
    ③ 树深度达到设定的最大深度max_depth;
    ④ 分裂带来的纯度提升小于最小阈值。

过拟合与剪枝

------树无限生长,分支极多,把训练集噪声、异常点全部记住;训练集精度极高,测试集效果很差。

解决方法

  1. 预剪枝
    ------在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力的提升,则停止划分并将当前结点标记为叶结点。
    特点
    ------预剪枝使决策树的很多分支都没有展开,降低了过拟合的风险,显著减少了 决策树的训练时间开销 和测试时间开销。
    ------但需注意有些分支的当前划分虽不能提升泛化性能,甚至可能导致泛化能力暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高
    ------基于"贪心"本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险。
  2. 后剪枝
    ------先从训练集生成一个完整的决策树,然后从下往上地对非叶结点进行考察,若将该结点对应的子树替换成叶结点能带来决策树泛化能力的提升,则将该子树替换为叶结点。
    特点
    ------一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但其训练时间开销比未剪枝决策树和预剪枝决策树都大得多。

示例

python 复制代码
# 分类树
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

data = load_iris()
X_train,X_test,y_train,y_test = train_test_split(data.data,data.target,test_size=0.2,random_state=42)

# CART分类树,基尼系数
dt = DecisionTreeClassifier(
    criterion="gini",  # 默认gini基尼指数,CART算法,也可选entropy信息熵,代表信息增益
    max_depth=3,       # 决策树最大深度
    random_state=42
    # min_sample_split # 内部结点再划分所需最小样本数
    # min_sample_leaf  # 叶子结点最小样本数
)
dt.fit(X_train,y_train)

print("训练集准确率:",dt.score(X_train,y_train))
print("测试集准确率:",dt.score(X_test,y_test))

# 绘制决策树
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))
plot_tree(dt, filled=True, max_depth=3) # 参1:模型对象;参2:是否颜色填充;参3:最大深度
plt.show()

# 回归树
from sklearn.tree import DecisionTreeRegressor
dtr = DecisionTreeRegressor(criterion="squared_error",max_depth=2)
相关推荐
Bigfish_coding1 小时前
前端转agent-【python】-19 构建私有 RAG 知识库:让 AI 读懂你的所有文档
人工智能
程序员cxuan1 小时前
读懂 Claude Code 架构分析系列,第二篇:Claude Code 是怎样启动的?
人工智能·后端·程序员
多年小白1 小时前
全球 AI 行业近三年市场增长数据深度分析报告(2023-2026)
人工智能·信息可视化
Tbisnic1 小时前
22.AI大模型开发:深度学习中神经网络的神经元、激活函数与参数初始化
人工智能·深度学习·神经网络·激活函数·梯度下降·反向传播
ACP广源盛139246256731 小时前
GSV2221@ACP# DP1.4 MST 多流显示转换芯片国产工业多屏
大数据·人工智能·分布式·嵌入式硬件·spark
xiaoxiaoxiaolll1 小时前
FDTD与Python联合仿真的超表面智能设计
人工智能·机器学习
霸道流氓气质1 小时前
Harness Engineering 从理论到实战:基于 Spring AI Alibaba 的完整实现指南
数据库·人工智能·spring·harness
hangyuekejiGEO1 小时前
临沂GEO技术服务方案对比分析
大数据·人工智能·python
happyprince1 小时前
08-PEFT源码阅读-使用指南与实战案例
人工智能·peft