第三章:linear models for regression

本文探讨了线性基础函数模型的基本概念及其应用,包括最大似然估计与最小二乘法、顺序学习、正则化最小二乘法等内容。此外,还深入分析了偏差-方差分解原理,并介绍了贝叶斯线性回归方法,涵盖参数分布、预测分布及证据近似等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:Linear basis function models:

y(x⃗ ,w⃗ )=j=0M1wjϕj(x⃗ )=w⃗ Tϕ⃗ (x⃗ )

where:

1:w⃗ =(w0,...,wM1)Tϕ⃗ =(ϕ0,...,ϕM1)T并且ϕ0(x⃗ )=1

2:y(x⃗ ,w⃗ )被称之为线性模型,因为其对参数w⃗ 是线性的,虽然其对输入变量x⃗ 不是线性的。

3:ϕj(x⃗ )被称之为基函数(basis function)。基函数可以有很多种选择,比如:

(1):Polynomial:ϕj(x)=xj;

(2):Gaussian:ϕj(x)=exp((xuj)22s2);

(3):Sigmoid:ϕj(x)=σ(xujs) with σ(a)=11+exp(a)

(一):Maximum likelihood and least squares:

1:我们假定目标变量t是deterministic function y(x⃗ ,w⃗ )和均值为0,precision为β的高斯噪音ϵ的和,表达成t=y(x⃗ ,w⃗ )+ϵ,于是p(t|x⃗ ,w⃗ ,β)=N(t|y(x⃗ ,w⃗ ),β1);注意到,在这里高斯噪音的假设暗示着给定x⃗ 的目标变量t的分布p(t|x⃗ )是单峰的,可能在一些情况下不适用,这时候可以考虑多个条件高斯分布的叠加。

2:对输入变量x⃗ 的目标值t的最优推测值是tp(t|x⃗ )dx⃗ =y(x⃗ ,w⃗ ),如果平方损失函数被假定的话。

3:对于一个i.i.d的数据集,其似然函数为p(t⃗ |X⃗ ,w⃗ ,β)=Nn=1N(tn|w⃗ Tϕ⃗ (x⃗ n),β1)。运用最大似然法,我们得到的参数w⃗ β的值分别是:

w⃗ ML=(ΦTΦ)1ΦTt⃗ ,Φnj=ϕj(x⃗ n)
1βML=1Nn=1N{tnw⃗ TMLϕ⃗ (x⃗ n)}

(二):Sequential learning:

如果我们有一个非常大的数据集,运用batch technique,假如一次性的去计算极大似然解w⃗ ML,其将会是一个计算量很大的过程。在这时候,我们可以使用sequential algorithm (on-line algorithm),每一次只考虑一个数据,考虑完一个数据后更新其模型参数。

sequential learning不仅适用于数据量很大的数据集,也适用于real time applications。在real-time applications情况下,数据是以连续流的形式抵达,在所有数据被观察之前我们就要做出预测。

我们能够通过stochastic gradient descent技术,也称之为sequential gradient descent技术,去获得一个sequential learning算法。如果误差函数可以写成E=nEn,那么第n个数据被观察之后,其模型参数可以通过w⃗ (τ+1)=w⃗ (τ)ηEn获得更新,其中τ代表着迭代的数目,η是学习率参数。如果误差函数En=12{tnw⃗ Tϕ⃗ (x⃗ n)},则w⃗ (τ+1)=w⃗ (τ)+η(tnw⃗ (τ)Tϕ⃗ (x⃗ n))ϕ⃗ (x⃗ n)

(三):Regularized least squares:

运用极大似然法求解模型参数时,如果模型很复杂,则会带来过度拟合的问题。为了控制模型的复杂度以此来避免过度拟合问题,我们可以在之前提到的误差函数中增加一个正则化项,总误差函数可以写成12Nn=1{tnw⃗ Tϕ⃗ (x⃗ n)}+λ2w⃗ Tw⃗ λ被称之为正则化因子(regularization coefficient),此误差函数最小值对应的参数w⃗ (λI+ΦTΦ)1ΦTt

正则化因子λ的添加可以控制模型复杂度的原因:假设我们有一个参数很多复杂度很高的模型,由于正则化因子λ的添加能够使得模型中参数值朝着0减少,因此如不断增加果我们λ值直到一个合适正值,则模型中参数值为0,此时模型就非常简单了。则在不断增加λ值的过程中,模型在由复杂向简单转变,因此我们可以选择一个合适的λ值,使得模型复杂度满足数据集的需要,这也就是为什么正则化因子λ的添加可以控制模型复杂度的原因。

正则化项的添加可以使得我们限制模型的复杂度,从而避免最大似然法带来的过度拟合问题。然后,这就会使得找到合适基函数数目的问题变成找到合适的正则化因子λ的值。

二:The Bias-Variance Decomposition:

当我们使用极大似然法时,如果基函数数目很多但训练集数据数目有限,会出现过度拟合问题。这时候我们的一种选择就是限制基函数数目,但这样的话会限制模型的灵活性。当然我们可以添加正则化项,但这样一来,怎样决定正则化因子λ将会是一个新问题。

期待的平方损失函数为E[L]={y(x⃗ )h(x⃗ )}2p(x⃗ )dx⃗ +{h(x⃗ )t}2p(x⃗ ,t)dx⃗ dt。在这个等式中,h(x⃗ )为最佳预测,y(x⃗ )为实际预测,t是实际观测到的值。E[L]中的第二项是与我们所做的实际预测y(x⃗ )无关的项,其的出现是由于intrinsic noise on the data,并且表示的是期待损失最小可以实现的值。为了使期待的损失最小,我们唯一能做的就是找到y(x⃗ ),使得第一项尽可能的小。

frequentist的model complexity 理论:bias-variance tradeoff

以linear basis function model为例说明:

1:frequentist基于给定的数据集D对参数w进行point estimate;

2:不同的数据集D,估计出来的参数w可能不同,因而导致y(x⃗ )不同,故可以把D对y(x⃗ )的这种影响记为y(x⃗ ;D),换句话说,每一个D对应了一个其所训练出来的模型y(x⃗ ;D)

3:进行一个thought experiment:假设有很多不同的data sets,每个都是从p(t,x⃗ )中采样出来,并且每个data set含有N个样本;

4:考虑某个data set D所训练出来的模型y(x⃗ ;D),那么:

{y(x⃗ ;D)h(x⃗ )}2={y(x⃗ ;D)ED[y(x⃗ ;D)]+ED[y(x⃗ ;D)]h(x⃗ )}2={y(x⃗ ;D)ED[y(x⃗ ;D)]}2+{ED[y(x⃗ ;D)]h(x⃗ )}2+2{y(x⃗ ;D)ED[y(x⃗ ;D)]}{ED[y(x⃗ ;D)]h(x⃗ )}

现在可以take the expectation of this expression with respect to D,我们得到

ED[{y(x⃗ ;D)h(x⃗ )}2]={ED[y(x⃗ ;D)]h(x⃗ )}2+ED[{y(x⃗ ;D)ED[y(x⃗ ;D)]}2]

The first term, called the bias^2 , represents the extent to which the average prediction over all data sets differs from the desired regression function. The second term, called the variance, measured the extent to which the solutions for individual data sets vary around their average, and hence this measured the extent to which the function y(x⃗ ;D) is sensitive the particular choice of data set.

5:用 ED[{y(x⃗ ;D)h(x⃗ )}2]替换掉期待平方损失函数E[L]中的{y(x⃗ )h(x⃗ )}2,我们能够得到Expected loss(E[L])=(bias)^2 + variance + noise。因此为了极小化期待损失,我们需要在bias和variance中取得平衡,flexible模型有着low bias(average model能够很好接近desired model), high variance(但是model 对 particular data set D很敏感),rigid模型则有着high bias,low variance,一个好的模型需要在bias和variance中取得较好的平衡。

三:Bayesian linear regression:

(一):Parameter distribution:

似然函数p(t⃗ |w⃗ )w⃗ 的二次函数的指数形式,因此参数w⃗ 的共轭先验概率可以为p(w⃗ )=N(w⃗ |m⃗ 0,S0),因此后验概率:

p(w⃗ |t⃗ )=N(w⃗ |m⃗ N,SN)m⃗ N=SN(S10m⃗ 0+βΦTt⃗ )S1N=S10+βΦTΦ

后验概率最大值对应的w⃗ MAP=m⃗ N

现在假设参数w⃗ 的先验概率p(w⃗ |α)=N(w⃗ |0,α1I),即w⃗ =0,S0=α1I。因此对应的后验概率p(w⃗ |t⃗ )=N(w⃗ |m⃗ N,SN),m⃗ N=βSNΦTt⃗ ,S1N=αI+βΦTΦ。在此情况下,则:

1:如果α趋于0,即有一个无限宽的先验,则后验分布的平均值m⃗ Nw⃗ ML=(ΦTΦ)1ΦTt⃗ 

2:后验概率的log形式为lnp(w⃗ |t⃗ )=β2Nn=1{tnw⃗ Tϕ⃗ (x⃗ n)}2α2w⃗ Tw⃗ +const。当我们极大化后验概率时,就相当于极小化了极大似然法中所提到的误差平方和以及正则化项这两项的和,在这里α/β相当于前面所提到的正则化因子λ

(二):Predictive distribution:

事实上,我们希望对变量x⃗ 所对应的目标值t做预测,因此我们需要计算出预测分布:p(t|t⃗ ,α,β)=p(t|w⃗ ,β)p(w⃗ |t⃗ ,α,β)dw⃗ 。由于p(t|w⃗ ,β)=N(t|y(x⃗ ,w⃗ ),β1),p(w⃗ |t⃗ ,α,β)=N(w⃗ |m⃗ N,SN),因此预测分布

p(t|t⃗ ,α,β)=N(t|m⃗ TNϕ⃗ (x⃗ ),σ2N(x⃗ ))σ2N(x⃗ )=1β+ϕ⃗ (x⃗ )TSNϕ⃗ (x⃗ )
参数x⃗ 的方差的第一项对应的是数据的噪音(noise on the data),第二项对应的是和参数w⃗ 相关的不确定度。

从这里我们就可以看出为什么贝叶斯方法能够避免过度拟合的问题并且只从训练集就能评价模型的好与坏:在贝叶斯方法中,我们假设参数w⃗ 是变量,在对变量w⃗ 边际化时,不仅能够给出值预测,还能够给出对应的不确定度。因此即使一个很复杂的模型能够很好的给出值预测,但不确定度很大,那这个复杂的模型依然无效,这一信息我们可以通过贝叶斯方法对训练集数据做一次预测直接得到。但是在极大似然法中,我们对参数w⃗ 做出的是点预测,因此我们在对训练集变量x⃗ 的目标值t做预测时,只能做出值预测,但给不出对应的不确定度,因此预测值可能很准确,但对应的不确定度事实上很大,这就是过度拟合问题,因此为了知道这个模型的好与坏,我们还需要另外一个独立的validation集合去验证这个模型。

Bayesian veiw on model complexity :model evidence p(D)

在贝叶斯方法中,我们不仅能够给出对目标值的推测值,还能给出对应的不确定度,这个不确定度是与参数w⃗ 的不确定度呈正相关的。对于简单模型来说,由于参数很小数据集的量相对很大,因此训练后的参数w⃗ 对应的不确定度比较小,但由于其简单,所以对训练集不能给出比较好的值预测,因此导致用简单模型对训练集做最终预测时,预测的值与实际值有出入,但对应不确定度小;对于复杂模型来说,由于参数很多但数据集相对来说有限,因此训练后的参数w⃗ 对应的不确定比较大,但由于该模型复杂,所以比较灵活,能够对训练集给出比较好的值预测,因此用复杂模型对训练集做预测时,预测的值与实际的值会吻合的很好,但对应的不确定度会很大。因此这就有了拟合的好与坏与模型复杂度之间的一个权衡,这个量可以用p(D|Mi)来衡量(Mi表示某一个特定的模型),这个量称之为model evidence。

p(D|Mi)=p(D|w⃗ ,Mi)p(w⃗ |Mi)dw⃗ 

(三):Equivalent kernel:

y(x⃗ ,m⃗ N)=m⃗ TNϕ⃗ (x⃗ )=Nn=1βϕ⃗ (x⃗ )TSNϕ⃗ (x⃗ n)tn=Nn=1k(x⃗ ,x⃗ n)tnk(x⃗ ,x⃗ n)称之为smoother matrix 或者是equivalent kernel,并且是localized around x⃗ 。从该公式中,我们发现对点x⃗ 所作出的预测值是训练集目标变量tn的线性组合,权重为euqivalent kernel k(x⃗ ,x⃗ n),因此对于靠近x⃗ 的训练集数据点目标值给出高的权重,对于远离x⃗ 的训练集的数据点目标值给出低的权重,这是符合情理的。

通过将训练集目标变量值的线性组合起来对输入变量x⃗ 做出预测的回归函数称之为linear smoother,这个为我们解决回归问题提出了一个新的思路:代替引入一些列基函数(能够隐含地决定kernel function),我们能够直接定义一个localized kernel k(x⃗ ,x⃗ n),并且利用y(x⃗ )=Nn=1k(x⃗ ,x⃗ n)tn将训练集目标变量线性组合以此来给出新的输入矢量x⃗ 的预测。另外内核函数应满足Nn=1k(x⃗ ,x⃗ n)=1这一性质。

四:The Evidence Approximation

1:全贝叶斯处理:

全贝叶斯处理(fully bayesian treatment)不仅要求对参数w⃗ 边际化,还要求对超参数αβ边际化,p(t|t⃗ )=p(t|w⃗ ,β)p(w⃗ |t⃗ ,α,β)p(α,β|t⃗ )dw⃗ dαdβ,但这三重积分是解析不可解的,虽然我们解析上能够只对参数w⃗ 或者是只对超参数α,β进行边际化。

2:经验贝叶斯处理

我们能够使用经验贝叶斯(empirical bayes)来获得全贝叶斯的一种近似处理:先通过最大化边际似然函数p(t⃗ |α,β)来获得对应的超参数值α,β,然后在对参数w⃗ 进行边际化,p(t|t⃗ )p(t|t⃗ ,α,β)=p(t|w⃗ ,β)p(w⃗ |t⃗ ,α,β)dw⃗ 。之所以能这样做的原理如下:

假设后验分布p(α,β|t⃗ )在超参数值α,β附近是尖峰分布的,然后全贝叶斯积分能够近似为在超参数α,β分别取αβ的情况下对参数值w⃗ 积分

p(t|t⃗ )p(t|t⃗ ,α,β)=p(t|w⃗ ,β)p(w⃗ |t⃗ ,α,β)dw⃗ 

又由于p(α,β|t⃗ )p(t⃗ |α,β)p(α,β),如果先验p(α,β) is relatively flat,则我们可以通过最大化边际似然函数p(t⃗ |α,β)来获得超参数值αβ

边际似然函数lnp(t⃗ |α,β)=M2lnα+N2lnβE(m⃗ N)12ln|A|N2ln2π,分别对α,β取偏微分,令对应的偏微分值为0,我们可以求出

α=γm⃗ TNm⃗ N1β=1Nγn=1N{tnm⃗ TNϕ⃗ (x⃗ n)}2
<think>好的,我现在要分析用户提供的这个Python函数`mix_data_fitting`,并理解它的功能以及可能的问题。首先,我需要通读代码,看看每个部分在做什么。 函数定义是`def mix_data_fitting(x_train, y_train, model_name='lr'):`,接受训练数据x_train和y_train,模型名称默认为逻辑回归。然后初始化一个模型列表,循环遍历x_train的第二个维度(即特征的数量,假设x_train是一个二维数组,形状可能是样本数×特征数)。对于每个特征索引head,根据model_name选择不同的分类模型,然后拟合模型,将模型添加到列表中,最后返回模型列表。 首先,我需要确认x_train的结构。假设x_train是一个形状为(n_samples, n_features)的数组,比如1024个特征,那么循环会遍历每个特征单独训练一个分类器?这似乎不太合理,因为通常一个分类器会使用所有特征,而不是每个特征单独训练一个模型。这里可能用户是在进行某种特征级别的分析,比如每个特征单独做分类,但这样做的意义是什么呢? 接下来,函数中的循环是`for head in range(x_train.shape[1])`,也就是遍历每个特征列。然后对于每个特征,用该列的数据(x_train[:, head])来训练模型。这里可能存在问题,因为单个特征可能不足以让模型有效学习,尤其是像逻辑回归这样的模型,当只有一个特征时,性能可能非常有限。而如果是线性判别分析(LDA),也需要考虑协方差矩阵的情况,但这里每个特征单独使用,可能LDA也不适用,因为LDA通常用于多变量数据。 另外,模型的训练数据是单个特征列,因此每个模型都是基于单一特征训练的。这可能用于特征选择,或者检查每个特征对目标变量的预测能力。但用户可能没有明确说明这个函数的用途,所以需要进一步分析。 接下来,不同的模型选择: - 当model_name为'lda'时,使用LinearDiscriminantAnalysis,并设置store_covariance=True。LDA需要计算类间和类内散度矩阵,但单变量情况下,LDA可能退化为类似Fisher判别的方法。 - 当model_name为'lr'时,使用LogisticRegression,采用L2正则化。 - 当model_name为'sgd'时,使用SGDClassifier,损失函数为log_loss,即随机梯度下降的逻辑回归。 然后,每个模型用单个特征列进行拟合,即x_train[:, head],y_train。最后将所有模型存储在model_list中返回。 现在,需要指出可能的问题: 1. **输入维度问题**:当使用单个特征训练模型时,输入x_train[:, head]的形状是(n_samples,),但在scikit-learn中,输入需要是二维数组(n_samples, n_features)。因此,直接传入一维数组可能导致错误。例如,LogisticRegression的fit方法需要X为二维,否则会抛出ValueError。用户可能在这里忽略了这一点,需要将单个特征转换为二维数组,比如使用x_train[:, head].reshape(-1, 1)。 2. **模型适用性**:某些模型可能在单特征情况下表现不佳,或者需要调整参数。例如,LDA在单变量情况下可能没问题,但SGDClassifier使用log_loss(即逻辑回归)时,如果特征是一维的,可能没有问题,但仍需注意输入形状是否正确。 3. **性能问题**:对每个特征单独训练模型,当特征数量很大时(如1024),会生成大量模型,可能导致内存问题或计算时间过长。 4. **返回值的使用**:返回的model_list包含每个特征对应的模型,但用户可能不清楚如何利用这些模型进行预测或集成。通常,集成多个单特征模型的方法需要明确,比如投票机制或特征加权,但函数中没有体现后续步骤。 5. **异常处理**:虽然函数对model_name有检查,抛出NotImplementedError,但未处理其他可能的异常,比如输入数据不符合模型要求(如二分类问题中使用LDA,但某个特征可能只有一个类别的情况)。 6. **模型参数设置**:例如,LogisticRegression默认的solver可能与penalty参数不兼容。例如,当使用'l2'惩罚时,默认的solver是'lbfgs',这在大多数情况下没问题,但有时可能需要指定solver。不过用户没有设置,可能依赖默认值,但需要注意版本兼容性。 现在需要整理这些分析,用中文向用户解释函数的功能,指出潜在问题,并提供改进建议。同时,需要按照用户之前的格式,结构清晰,分点说明。 可能的回答结构: 1. 功能解析:说明函数的目的,即对每个特征单独训练分类器。 2. 核心逻辑:循环每个特征,选择模型,拟合。 3. 存在问题:输入维度问题,模型适用性,性能等。 4. 改进建议:修正输入形状,添加异常处理,说明适用场景等。 5. 使用示例:给出正确调用函数的例子。 同时需要确保使用正确的格式,如代码块用反引号,使用列表或表格进行对比,但根据用户之前的回答,可能偏好使用分节和代码示例。 需要验证是否每个模型在单特征情况下需要二维输入。例如,测试一下scikit-learn的LogisticRegression是否接受一维输入。根据scikit-learn的文档,输入X需要是二维的,否则会报错:ValueError: Expected 2D array, got 1D array instead。因此,用户提供的函数在实际运行时会出现错误,必须将x_train[:, head]转换为二维数组。 因此,这是代码中的一个严重错误,必须指出。同时,其他模型如LinearDiscriminantAnalysis和SGDClassifier也需要二维输入,因此同样存在问题。 所以,关键问题在于输入数据的维度不正确,必须修正为reshape(-1,1)。 另外,可能用户希望进行特征选择,或者进行某种集成学习,但方法是否合理需要进一步讨论。 总结回答时需要明确这些点,帮助用户理解问题所在,并提供修改建议。</think>--- ### 一、函数功能解析 此函数 `mix_data_fitting` 用于**为每个特征单独训练一个分类器**,核心功能如下: 1. **输入要求**: - `x_train`: 训练数据,需为二维数组,形状为 `(样本数, 特征数)`(例如 `(100, 1024)`) - `y_train`: 标签数据,一维数组 - `model_name`: 模型类型,支持 `lr`(逻辑回归)、`lda`(线性判别分析)、`sgd`(随机梯度下降分类器) 2. **核心逻辑**: - 遍历每个特征(`x_train.shape[1]` 个特征) - 对每个特征单独实例化一个分类器 - 使用该特征列(单变量)训练模型 - 将所有模型存储在列表中返回 --- ### 二、代码潜在问题分析 #### 1. 输入维度错误(严重问题) - **问题表现**:直接使用 `x_train[:, head]` 会导致输入数据为一维数组(形状 `(n_samples,)`) - **引发错误**: ```python ValueError: Expected 2D array, got 1D array instead. ``` - **修正方法**:需将特征列转换为二维数组: ```python model.fit(x_train[:, head].reshape(-1, 1), y_train) # 改为 (n_samples, 1) ``` #### 2. 模型适用性存疑 - **单变量性能**:逻辑回归、LDA 等模型在单特征场景下可能表现较差(信息量有限) - **LDA 限制**:若某个特征的类别样本数小于特征维度(如二分类单特征),`store_covariance=True` 可能引发计算问题 #### 3. 效率与资源消耗 - **模型数量爆炸**:若特征数为 1024,将生成 1024 个独立模型,导致: - 内存占用高 - 训练时间随特征数线性增长 #### 4. 返回值使用场景模糊 - **未定义集成策略**:返回的模型列表需配合特定逻辑使用(如投票、加权等),但函数未提供相关接口 --- ### 三、改进建议 #### 1. 修复输入维度问题 修改模型拟合代码: ```python # 修改前(错误) model.fit(x_train[:, head], y_train) # 修改后(正确) model.fit(x_train[:, head].reshape(-1, 1), y_train) ``` #### 2. 增强异常处理 添加对空数据、无效标签等的检查: ```python # 示例:检查特征列是否全为常数 if np.all(x_train[:, head] == x_train[0, head]): print(f"Feature {head} is constant, skipping...") continue ``` #### 3. 优化模型选择逻辑 对单变量场景推荐适用模型: ```python if model_name == 'lda': model = LinearDiscriminantAnalysis(solver='eigen', shrinkage='auto') # 改进数值稳定性 elif model_name == 'lr': model = LogisticRegression(penalty='l2', solver='liblinear') # 明确指定求解器 ``` #### 4. 添加结果整合功能 扩展返回值处理逻辑: ```python def mix_data_fitting(..., return_metrics=False): # ...原有代码... if return_metrics: scores = [model.score(X_test[:, head].reshape(-1,1), y_test) for head, model in enumerate(model_list)] return model_list, scores else: return model_list ``` --- ### 四、典型应用场景 #### 1. 特征重要性初筛 ```python models = mix_data_fitting(x_train, y_train, 'lr') accuracies = [m.score(X_test[:,i].reshape(-1,1), y_test) for i, m in enumerate(models)] important_features = np.argsort(accuracies)[-10:] # 取TOP10特征 ``` #### 2. 单变量分类基准测试 ```python from sklearn.dummy import DummyClassifier # 对比随机猜测基线 baseline = DummyClassifier(strategy='stratified').fit(x_train, y_train) baseline_score = baseline.score(x_test, y_test) model_list, scores = mix_data_fitting(x_train, y_train, return_metrics=True) print(f"单特征最佳准确率: {max(scores):.3f} vs 基线 {baseline_score:.3f}") ``` --- ### 五、完整修正代码示例 ```python def mix_data_fitting(x_train, y_train, model_name='lr'): model_list = [] for head in range(x_train.shape[1]): X = x_train[:, head].reshape(-1, 1) # 修复维度问题 try: if model_name == 'lda': model = LinearDiscriminantAnalysis(solver='eigen', shrinkage='auto') elif model_name == 'lr': model = LogisticRegression(penalty='l2', solver='liblinear', max_iter=1000) elif model_name == 'sgd': model = SGDClassifier(loss='log_loss', eta0=0.1) else: raise NotImplementedError(f"Model {model_name} not supported") model.fit(X, y_train) model_list.append(model) except Exception as e: print(f"Feature {head} training failed: {str(e)}") model_list.append(None) # 保留空位 return model_list ``` --- ### 附:各模型单变量适用性对比 | 模型类型 | 单变量适用性 | 注意事项 | |---------|-------------|---------| | 逻辑回归 (LR) | ★★☆ | 需确保特征尺度一致,建议预先标准化 | | 线性判别分析 (LDA) | ★★★ | 对类别分布敏感,建议平衡数据 | | SGD分类器 | ★☆☆ | 需调整学习率(`learning_rate`)和迭代次数 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值