1.1. 线性模型#
以下是一组用于回归的方法,其中目标值预计是特征的线性组合。在数学符号中,如果 \(\hat{y}\) 是预测值。
在整个模块中,我们指定了载体 \(w = (w_1, ..., w_p)\) 作为 coef_
和 \(w_0\) 作为 intercept_
.
要使用广义线性模型执行分类,请参见 Logistic回归 .
1.1.1. 普通最小二乘#
LinearRegression
用系数匹配线性模型 \(w = (w_1, ..., w_p)\) 最小化数据集中观察到的目标与线性逼近预测的目标之间的残余平方和。从数学上讲,它解决了以下形式的问题:

LinearRegression
接受它的 fit
方法参数 X
, y
, sample_weight
并存储系数 \(w\) 线性模型在其 coef_
和 intercept_
属性::
>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression()
>>> reg.coef_
array([0.5, 0.5])
>>> reg.intercept_
0.0
普通最小平方的系数估计依赖于特征的独立性。当功能相关且设计矩阵的某些列时 \(X\) 具有大致线性相关性,设计矩阵变得接近奇异,因此,最小平方估计变得对观察目标中的随机误差高度敏感,从而产生很大的方差。的这种情况 multicollinearity 例如,当在没有实验设计的情况下收集数据时可能会出现。
示例
1.1.1.1. 非负最小平方#
可以将所有系数限制为非负,当它们代表一些物理或自然非负量(例如,频率计数或商品价格)。 LinearRegression
接受布尔值 positive
参数:设置为时 True
Non-Negative Least Squares 然后应用。
示例
1.1.1.2. 普通最小二乘复杂性#
The least squares solution is computed using the singular value
decomposition of \(X\). If \(X\) is a matrix of shape (n_samples, n_features)
this method has a cost of
\(O(n_{\text{samples}} n_{\text{features}}^2)\), assuming that
\(n_{\text{samples}} \geq n_{\text{features}}\).
1.1.2. 岭回归与分类#
1.1.2.1. 回归#
Ridge
回归解决了 普通最小二乘 通过对系数的大小施加惩罚。岭系数最小化惩罚剩余平方和:
复杂性参数 \(\alpha \geq 0\) 控制收缩量:值越大 \(\alpha\) ,收缩量越大,因此系数对共线性变得更稳健。

与其他线性模型一样, Ridge
将接受它的 fit
方法数组 X
, y
并将存储系数 \(w\) 线性模型在其 coef_
成员::
>>> from sklearn import linear_model
>>> reg = linear_model.Ridge(alpha=.5)
>>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
Ridge(alpha=0.5)
>>> reg.coef_
array([0.34545455, 0.34545455])
>>> reg.intercept_
np.float64(0.13636)
请注意,班级 Ridge
允许用户指定通过设置自动选择求解器 solver="auto"
.指定此选项时, Ridge
将在 "lbfgs"
, "cholesky"
,而且 "sparse_cg"
解决者。 Ridge
将开始从上到下检查下表中所示的条件。如果条件为真,则选择相应的求解器。
Solver |
Condition |
“lbfgs” |
的 |
“古怪” |
输入数组X不是稀疏的。 |
'sparse_cg' |
上述条件均不满足。 |
示例
1.1.2.2. 分类#
的 Ridge
回归量有一个分类器变体: RidgeClassifier
.该分类器首先将二进制目标转换为 {-1, 1}
然后将该问题视为回归任务,优化与上述相同的目标。预测的类别对应于回归量预测的符号。对于多类分类,该问题被视为多输出回归,预测的类对应于具有最高值的输出。
使用(惩罚的)最小平方损失来适应分类模型,而不是更传统的逻辑或铰链损失似乎有问题。然而,在实践中,所有这些模型都可以在准确性或精确性/召回率方面导致相似的交叉验证分数,而使用的惩罚最小平方损失 RidgeClassifier
允许对具有不同计算性能配置文件的数值求解器进行非常不同的选择。
的 RidgeClassifier
可以比例如显着更快 LogisticRegression
具有大量类,因为它可以计算投影矩阵 \((X^T X)^{-1} X^T\) 只有一次。
此分类器有时被称为 Least Squares Support Vector Machine 一个线性内核。
示例
1.1.2.3. 山脊复杂性#
该方法的复杂性与 普通最小二乘 .
1.1.2.4. 设置正规化参数:留一交叉验证#
RidgeCV
和 RidgeClassifierCV
通过Alpha参数的内置交叉验证实现岭回归/分类。它们的工作方式与 GridSearchCV
除了它默认为高效的留一出 cross-validation .使用默认值时 cross-validation ,由于用于计算留一出误差的公式,Alpha不能为0。看到 [RL2007] 有关详细信息
使用示例::
>>> import numpy as np
>>> from sklearn import linear_model
>>> reg = linear_model.RidgeCV(alphas=np.logspace(-6, 6, 13))
>>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
RidgeCV(alphas=array([1.e-06, 1.e-05, 1.e-04, 1.e-03, 1.e-02, 1.e-01, 1.e+00, 1.e+01,
1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06]))
>>> reg.alpha_
np.float64(0.01)
验证的价值 cv 属性将触发交叉验证的使用 GridSearchCV
例如 cv=10
用于10次交叉验证,而不是留一次交叉验证。
引用#
“关于正规化最小平方的注释”,Rifkin和Lippert (technical report , course slides ).
1.1.3. Lasso#
的 Lasso
是一个估计稀疏系数的线性模型。它在某些情况下很有用,因为它倾向于更喜欢具有更少非零系数的解决方案,从而有效地减少了给定解决方案所依赖的特征的数量。因此,Lasso及其变体是压缩传感领域的基础。在某些条件下,它可以恢复非零系数的精确集合(请参阅 压缩感知:使用L1先验进行断层扫描重建(Lasso) ).
从数学上讲,它由一个线性模型组成,并添加了一个正规化项。最小化的目标函数是:
因此,套索估计解决了最小平方罚的最小化问题 \(\alpha ||w||_1\) 补充说,在哪里 \(\alpha\) 是常数且 \(||w||_1\) 是 \(\ell_1\) - 系数载体的规范。
课堂中的实现 Lasso
使用坐标下降作为算法来匹配系数。看到 最小角回归 对于另一种实现::
>>> from sklearn import linear_model
>>> reg = linear_model.Lasso(alpha=0.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
Lasso(alpha=0.1)
>>> reg.predict([[1, 1]])
array([0.8])
功能 lasso_path
对于较低级别的任务很有用,因为它计算沿着可能值的完整路径的系数。
示例
引用#
1.1.3.1. 设置规则化参数#
的 alpha
参数控制估计系数的稀疏程度。
1.1.3.1.1. 使用交叉验证#
scikit-learn暴露设置套索的物体 alpha
通过交叉验证参数: LassoCV
和 LassoLarsCV
. LassoLarsCV
是基于 最小角回归 算法解释如下。
对于具有许多共线特征的多维数据集, LassoCV
通常是更可取的。然而, LassoLarsCV
具有探索更相关的价值观的优势 alpha
参数,如果样本数量与要素数量相比非常少,则通常比 LassoCV
.
1.1.3.1.2. 基于信息标准的模型选择#
或者,估计器 LassoLarsIC
建议使用Akaike信息准则(AIC)和Bayes信息准则(BIC)。找到Alpha的最佳值是一种计算上更便宜的替代方案,因为在使用k重交叉验证时,规则化路径仅计算一次,而不是k+1次。
事实上,这些标准是在样本内训练集上计算的。简而言之,他们通过灵活性来惩罚不同Lasso模型过于乐观的分数(参见。至下面的“数学详细信息”部分)。
然而,此类标准需要对解决方案的自由度进行正确估计,是针对大样本(渐进结果)推导的,并假设正确的模型是正在研究的候选模型。当问题条件不佳时(例如特征多于样本),它们也往往会崩溃。

示例
1.1.3.1.3. AIC和BIC标准#
AIC(以及CIC)的定义在文献中可能有所不同。在本节中,我们提供了有关scikit-learn中计算的标准的更多信息。
数学细节#
AIC标准定义为:
哪里 \(\hat{L}\) 是模型的最大可能性, \(d\) 是参数的数量(在上一节中也称为自由度)。
CIC的定义取代了常数 \(2\) 通过 \(\log(N)\) :
哪里 \(N\) 是样本数量。
对于线性高斯模型,最大log似然定义为:
哪里 \(\sigma^2\) 是对噪音方差的估计, \(y_i\) 和 \(\hat{y}_i\) 分别是真实目标和预测目标,并且 \(n\) 是样本数量。
在AIC公式中插入最大对数似然性会得到:
上述公式的第一项有时会被丢弃,因为当 \(\sigma^2\) 给出了此外,有时还说,AIC相当于 \(C_p\) 统计 [12]. 然而,从严格意义上说,它仅相当于某个常数和一个相乘因子。
最后,我们上面提到了 \(\sigma^2\) 是对噪音方差的估计。在 LassoLarsIC
当参数 noise_variance
未提供(默认),则通过无偏估计器估计噪音方差 [13] 定义为:
哪里 \(p\) 是功能的数量和 \(\hat{y}_i\) 是使用普通最小二乘回归的预测目标。请注意,此公式仅在以下情况下有效: n_samples > n_features
.
引用
1.1.3.1.4. 与支持机的正规化参数的比较#
的等价性 alpha
以及支持者的正规化参数, C
由下式给出 alpha = 1 / C
或 alpha = 1 / (n_samples * C)
,取决于估计量和模型优化的确切目标函数。
1.1.4. 多任务套索#
的 MultiTaskLasso
是一个线性模型,联合估计多重回归问题的稀疏系数: y
是一个2D阵列,具有形状 (n_samples, n_tasks)
.限制是,对于所有回归问题(也称为任务),所选特征都是相同的。
下图比较了使用简单Lasso或MultiTaskLasso获得的系数矩阵W中非零条目的位置。Lasso估计会产生分散的非零,而MultiTaskLasso的非零是完整的列。
多_任务_lasso_1多_任务_lasso_2
适应时间序列模型,规定任何活动特征始终处于活动状态。
示例
数学细节#
在数学上,它由一个用混合训练的线性模型组成 \(\ell_1\) \(\ell_2\) - 正规化规范。最小化的目标函数是:
哪里 \(\text{Fro}\) 表明弗罗贝尼乌斯规范
and \(\ell_1\) \(\ell_2\) reads
课堂中的实现 MultiTaskLasso
使用坐标下降作为算法来匹配系数。
1.1.5. Elastic-Net#
ElasticNet
is a linear regression model trained with both
\(\ell_1\) and \(\ell_2\)-norm regularization of the coefficients.
This combination allows for learning a sparse model where few of
the weights are non-zero like Lasso
, while still maintaining
the regularization properties of Ridge
. We control the convex
combination of \(\ell_1\) and \(\ell_2\) using the l1_ratio
parameter.
当存在多个相互相关的特征时,弹性网络很有用。Lasso可能会随机选择其中之一,而Elastic-net可能会同时选择两者。
Lasso和Ridge之间权衡的一个实际优势是,它允许Elastic-Net继承Ridge在旋转下的部分稳定性。
在这种情况下,最小化的目标函数是

The class ElasticNetCV
can be used to set the parameters
alpha
(\(\alpha\)) and l1_ratio
(\(\rho\)) by cross-validation.
示例
1.1.6. 多任务Elastic-Net#
的 MultiTaskElasticNet
是一个弹性网络模型,用于联合估计多重回归问题的稀疏系数: Y
是一个2D形状阵列 (n_samples, n_tasks)
.限制是,对于所有回归问题(也称为任务),所选特征都是相同的。
在数学上,它由一个用混合训练的线性模型组成 \(\ell_1\) \(\ell_2\) - 规范和 \(\ell_2\) - 正规化规范。最小化的目标函数是:
课堂中的实现 MultiTaskElasticNet
使用坐标下降作为算法来匹配系数。
The class MultiTaskElasticNetCV
can be used to set the parameters
alpha
(\(\alpha\)) and l1_ratio
(\(\rho\)) by cross-validation.
1.1.7. 最小角回归#
最小角回归(LARS)是一种针对多维数据的回归算法,由Bradley Efron、Trevor Hastie、Iain Johnstone和Robert Tibshirani开发。LARS类似于前向逐步回归。在每一步,它都会找到与目标最相关的特征。当存在多个具有相等相关性的特征时,它不是沿着同一特征继续,而是沿着特征之间的等角度方向进行。
LARS的优点是:
在特征数量明显大于样本数量的情况下,它在数字上是高效的。
它的计算速度与前向选择一样快,并且具有与普通最小平方相同的复杂度。
它生成完整的分段线性解路径,这在交叉验证或类似的调整模型尝试中很有用。
如果两个特征与目标的相关性几乎相同,那么它们的系数应该以大致相同的速度增加。因此,该算法的行为符合直觉的预期,并且更加稳定。
它很容易被修改以为其他估计器(例如Lasso)生成解决方案。
LARS方法的缺点包括:
由于LARS是基于对残余的迭代调整,因此它似乎对噪音的影响特别敏感。Weisberg在Efron等人(2004)《统计年鉴》文章的讨论部分详细讨论了这个问题。
LARS模型可以通过估计器使用 Lars
,或其低级实现 lars_path
或 lars_path_gram
.
1.1.8. LARS套索#
LassoLars
是使用LARS算法实现的套索模型,与基于坐标下降的实现不同,这会产生精确的解,该解是分段线性的,作为其系数的规范的函数。

>>> from sklearn import linear_model
>>> reg = linear_model.LassoLars(alpha=.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
LassoLars(alpha=0.1)
>>> reg.coef_
array([0.6, 0. ])
示例
LARS算法几乎免费提供系数沿着正规化参数的完整路径,因此常见的操作是使用其中一个函数检索路径 lars_path
或 lars_path_gram
.
数学公式#
该算法类似于前向逐步回归,但不是在每一步包括特征,而是在与每个系数与剩余的相关性相等的方向上增加估计系数。
LARS解不是给出矢量结果,而是由一条曲线组成,该曲线表示每个值的解。 \(\ell_1\) 参数载体的规范。完整的系数路径存储在数组中 coef_path_
形状 (n_features, max_features + 1)
.第一列始终为零。
引用
论文详细介绍了原始算法 Least Angle Regression 哈斯蒂等人
1.1.9. 垂直匹配追求(OMP)#
OrthogonalMatchingPursuit
和 orthogonal_mp
实现OMP算法,用于通过对非零系数数量施加约束(即 \(\ell_0\) 伪规范)。
作为一种前向特征选择方法, 最小角回归 ,垂直匹配追求可以用固定数量的非零元素来逼近最佳解载体:
或者,垂直匹配追求可以针对特定误差,而不是特定数量的非零系数。这可以表达为:
OMP基于贪婪算法,该算法在每一步都包括与当前剩余相关性最高的原子。它类似于更简单的匹配追踪(MP)方法,但更好的是,在每次迭代时,都会使用之前选择的字典元素空间上的垂直投影重新计算剩余。
示例
引用#
https://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf
Matching pursuits with time-frequency dictionaries <https://www.di.ens.fr/~mallat/papiers/MallatPursuit93.pdf>
_,S。G.马拉特,Z.张,
1.1.10. 贝叶斯回归#
Bayesian回归技术可用于在估计过程中包括正规化参数:正规化参数不是严格设置的,而是根据手头的数据进行调整。
这可以通过引入 uninformative priors 超过模型的超参数。的 \(\ell_{2}\) 使用的正规化 岭回归与分类 等价于在系数上的高斯先验下找到最大后验估计 \(w\) 精准 \(\lambda^{-1}\) .不是制订 lambda
手动可以将其视为随机变量,从数据中估计。
为了获得完全概率模型,输出 \(y\) 假设为高斯分布 \(X w\) :
哪里 \(\alpha\) 再次被视为从数据中估计的随机变量。
Bayesian回归的优点是:
它会适应手头的数据。
它可以用于在估计过程中包括正规化参数。
Bayesian回归的缺点包括:
模型的推断可能很耗时。
引用#
C中对Bayesian方法进行了很好的介绍。Bishop:模式识别和机器学习
书中详细介绍了原始算法
Bayesian learning for neural networks
作者:Radford M.尼尔
1.1.10.1. Bayesian Ridge Regression#
BayesianRidge
如上所述估计回归问题的概率模型。系数的先验 \(w\) 由球形高斯给出:
前科结束 \(\alpha\) 和 \(\lambda\) 被选择为 gamma distributions ,高斯精确度的共乘先验。生成的模型称为 Bayesian Ridge Regression ,与经典的 Ridge
.
The parameters \(w\), \(\alpha\) and \(\lambda\) are estimated
jointly during the fit of the model, the regularization parameters
\(\alpha\) and \(\lambda\) being estimated by maximizing the
log marginal likelihood. The scikit-learn implementation
is based on the algorithm described in Appendix A of (Tipping, 2001)
where the update of the parameters \(\alpha\) and \(\lambda\) is done
as suggested in (MacKay, 1992). The initial value of the maximization procedure
can be set with the hyperparameters alpha_init
and lambda_init
.
There are four more hyperparameters, \(\alpha_1\), \(\alpha_2\), \(\lambda_1\) and \(\lambda_2\) of the gamma prior distributions over \(\alpha\) and \(\lambda\). These are usually chosen to be non-informative. By default \(\alpha_1 = \alpha_2 = \lambda_1 = \lambda_2 = 10^{-6}\).
Bayesian Ridge回归用于回归::
>>> from sklearn import linear_model
>>> X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]
>>> Y = [0., 1., 2., 3.]
>>> reg = linear_model.BayesianRidge()
>>> reg.fit(X, Y)
BayesianRidge()
匹配后,模型可用于预测新值::
>>> reg.predict([[1, 0.]])
array([0.50000013])
的系数 \(w\) 可以访问该模型的::
>>> reg.coef_
array([0.49999993, 0.49999993])
由于Bayesian框架,找到的权重与 普通最小二乘 .然而,Bayesian Ridge回归对病态问题更稳健。
示例
引用#
克里斯托弗·M的第3.3节Bishop:模式识别和机器学习,2006
大卫·JC麦凯, Bayesian Interpolation ,1992年。
Michael E. Tipping, Sparse Bayesian Learning and the Relevance Vector Machine, 2001.
1.1.10.2. 自动相关性确定- ARD#
自动相关性确定(如在中实现的那样 ARDRegression
)是一种线性模型,与 Bayesian Ridge Regression ,但这会导致系数更稀疏 \(w\) [1] [2] .
ARDRegression
提出了不同的先验 \(w\) :它将球形高斯分布丢弃为中心椭圆高斯分布。这意味着每个系数 \(w_{i}\) 本身可以从高斯分布中绘制,以零为中心,具有精确度 \(\lambda_{i}\) :
with \(A\) being a positive definite diagonal matrix and \(\text{diag}(A) = \lambda = \{\lambda_{1},...,\lambda_{p}\}\).
In contrast to the Bayesian Ridge Regression, each coordinate of \(w_{i}\) has its own standard deviation \(\frac{1}{\lambda_i}\). The prior over all \(\lambda_i\) is chosen to be the same gamma distribution given by the hyperparameters \(\lambda_1\) and \(\lambda_2\).
ARD在文献中也被称为 Sparse Bayesian Learning 和 Relevance Vector Machine [3] [4] .对于ARD和 Bayesian Ridge Regression ,请参阅下面的例子。
示例
引用
Christopher M. Bishop:模式识别和机器学习,第7.2.1章
David Wipf和Srikantan Nagarajan: A New View of Automatic Relevance Determination
Michael E.小费: Sparse Bayesian Learning and the Relevance Vector Machine
特里斯坦·弗莱彻: Relevance Vector Machines Explained
1.1.11. Logistic回归#
逻辑回归在 LogisticRegression
.尽管它的名字,但它是作为线性分类模型实现的,而不是根据scikit-learn/ML命名法的回归模型。逻辑回归在文献中也被称为logit回归、最大熵分类(MaxEnt)或log线性分类器。在该模型中,描述单个试验可能结果的概率使用 logistic function .
此实现可以使用可选的二元、一vs-Rest或多项逻辑回归 \(\ell_1\) , \(\ell_2\) 或Elastic-Net正规化。
备注
Regularization
默认情况下应用规则化,这在机器学习中很常见,但在统计中却不常见。正规化的另一个优点是它提高了数值稳定性。没有正规化相当于将C设置为非常高的值。
备注
Logistic Regression as a special case of the Generalized Linear Models (GLM)
逻辑回归是 广义线性模型 具有二项/伯努里条件分布和Logit链接。逻辑回归的数字输出(即预测概率)可以通过对其应用阈值(默认为0.5)来用作分类器。这就是它在scikit-learn中的实现方式,因此它期望分类目标,使逻辑回归成为分类器。
示例
sphx_glr_auto_examples_classification_plot_classification_probability.py
1.1.11.1. 二进制情况#
为了方便符号,我们假设目标 \(y_i\) 取集中的值 \(\{0, 1\}\) 对于数据点 \(i\) .安装完毕后, predict_proba
方法 LogisticRegression
预测阳性类的概率 \(P(y_i=1|X_i)\) 作为
As an optimization problem, binary class logistic regression with regularization term \(r(w)\) minimizes the following cost function:
哪里 \({s_i}\) 对应于由用户分配给特定训练样本(向量 \(s\) 由类权重和样本权重的逐元素相乘形成),和 \(S = \sum_{i=1}^n s_i\) .
我们目前为正规化术语提供了四种选择 \(r(w)\) 经由 penalty
论点:
处罚 |
\(r(w)\) |
---|---|
|
\(0\) |
\(\ell_1\) |
\(\|w\|_1\) |
\(\ell_2\) |
\(\frac{1}{2}\|w\|_2^2 = \frac{1}{2}w^T w\) |
|
\(\frac{1 - \rho}{2}w^T w + \rho \|w\|_1\) |
For ElasticNet, \(\rho\) (which corresponds to the l1_ratio
parameter)
controls the strength of \(\ell_1\) regularization vs. \(\ell_2\)
regularization. Elastic-Net is equivalent to \(\ell_1\) when
\(\rho = 1\) and equivalent to \(\ell_2\) when \(\rho=0\).
请注意,类别权重和样本权重的规模将影响优化问题。例如,将样本权重乘以一个常数 \(b>0\) 相当于乘以(逆)正规化强度 C
通过 \(b\) .
1.1.11.2. 多项案例#
二元情况可以扩展到 \(K\) 导致多项逻辑回归的类,另请参阅 log-linear model .
备注
可以对a进行辅助治疗 \(K\) - 仅使用类别分类模型 \(K-1\) 权重载体,通过利用所有类概率之和必须等于一的事实,让一个类概率完全由其他类概率确定。我们故意选择过度参数化模型 \(K\) 为了易于实现并保留有关类排序的对称感性偏差,请参阅 [16]. 当使用正规化时,这种效应变得特别重要。过度参数化的选择可能会对未受惩罚的模型不利,因为解决方案可能不是唯一的,如所示 [16].
数学细节#
Let \(y_i \in \{1, \ldots, K\}\) be the label (ordinal) encoded target variable for observation \(i\).
Instead of a single coefficient vector, we now have
a matrix of coefficients \(W\) where each row vector \(W_k\) corresponds to class
\(k\). We aim at predicting the class probabilities \(P(y_i=k|X_i)\) via
predict_proba
as:
优化的目标成为
哪里 \([P]\) 代表艾弗森括号,其评估结果为 \(0\) 如果 \(P\) 为假,否则其评估结果为 \(1\) .
再说一次, \(s_{ik}\) 是用户分配的权重(样本权重和类权重的相乘)及其总和 \(S = \sum_{i=1}^n \sum_{k=0}^{K-1} s_{ik}\) .
我们目前为正规化术语提供了四种选择 \(r(W)\) 经由 penalty
争论,其中 \(m\) 是功能的数量:
处罚 |
\(r(W)\) |
---|---|
|
\(0\) |
\(\ell_1\) |
\(\|W\|_{1,1} = \sum_{i=1}^m\sum_{j=1}^{K}|W_{i,j}|\) |
\(\ell_2\) |
\(\frac{1}{2}\|W\|_F^2 = \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^{K} W_{i,j}^2\) |
|
\(\frac{1 - \rho}{2}\|W\|_F^2 + \rho \|W\|_{1,1}\) |
1.1.11.3. 解决者#
类中实现的求解器 LogisticRegression
是“lbfgs”、“liblinear”、“newton-cg”、“newton-spanky”、“sag”和“saga”:
下表总结了每个求解器支持的罚分和多项多类:
Solvers |
|||||||
Penalties |
'lbfgs' |
'liblinear' |
'newton-cg' |
'newton-cholesky' |
'sag' |
'saga' |
|
L2处罚 |
是的 |
是的 |
是的 |
是的 |
是的 |
是的 |
|
L1处罚 |
没有 |
是的 |
没有 |
没有 |
没有 |
是的 |
|
Elastic-Net(L1 + L2) |
没有 |
没有 |
没有 |
没有 |
没有 |
是的 |
|
无处罚(“无”) |
是的 |
没有 |
是的 |
是的 |
是的 |
是的 |
|
Multiclass support |
|||||||
多项多类 |
是的 |
没有 |
是的 |
是的 |
是的 |
是的 |
|
Behaviors |
|||||||
惩罚拦截(坏) |
没有 |
是的 |
没有 |
没有 |
没有 |
没有 |
|
对于大型数据集来说更快 |
没有 |
没有 |
没有 |
没有 |
是的 |
是的 |
|
对未缩放的数据集稳健 |
是的 |
是的 |
是的 |
是的 |
没有 |
没有 |
由于其稳健性,默认使用“lbfgs”解算器。为 n_samples >> n_features
,“newton-spoky”是一个不错的选择,可以达到高精度(微小 tol
价值观)。对于大型数据集,“saga”求解器通常更快(比“lbgs”更快),特别是对于低精度(高 tol
).对于大型数据集,您还可以考虑使用 SGDClassifier
与 loss="log_loss"
,这可能更快,但需要更多的调整。
1.1.11.3.1. 求解者之间的差异#
之间获得的分数可能存在差异 LogisticRegression
与 solver=liblinear
或 LinearSVC
和外部liblinear库,当 fit_intercept=False
和适合 coef_
(or)要预测的数据是零。这是因为对于具有 decision_function
零, LogisticRegression
和 LinearSVC
预测消极类别,而Liblinear预测积极类别。请注意,具有 fit_intercept=False
并拥有许多样本 decision_function
零,可能是一个不适合、坏的模型,建议您设置 fit_intercept=True
并增加 intercept_scaling
.
Solvers' details#
求解器“liblinear”使用坐标下降(CD)算法,并依赖于优秀的C++ LIBLINEAR library ,它随scikit-learn一起发货。然而,Liblinear中实现的CD算法无法学习真正的多项(多类)模型;相反,优化问题以“一对休息”的方式分解,因此为所有类训练单独的二进制分类器。这发生在引擎盖下,所以
LogisticRegression
使用该求解器的实例表现为多类分类器。为 \(\ell_1\) 正则化sklearn.svm.l1_min_c
允许计算C的下限,以获得非“空”(所有特征权重为零)模型。“lbfgs”、“newton-cg”和“sag”解算器仅支持 \(\ell_2\) 规则化或不规则化,并且发现对于一些多维数据收敛得更快。设置
multi_class
通过这些求解器进行“多项”学习真正的多项逻辑回归模型 [5], 这意味着其概率估计应该比默认的“一对休息”设置更好地校准。“下垂”求解器使用随机平均梯度下降 [6]. 当样本数量和特征数量都很大时,它比大型数据集的其他求解器更快。
“传奇”解决者 [7] 是“sag”的变体,也支持非光滑
penalty="l1"
.因此,这是稀疏多项逻辑回归的首选求解器。它也是唯一支持的解算器penalty="elasticnet"
.“lbfgs”是一种逼近Broyden-Fletcher-Goldfarb-Shanno算法的优化算法 [8], 属于准牛顿方法。因此,它可以处理广泛的不同训练数据,因此是默认的求解器。然而,它的性能在扩展不良的数据集以及具有罕见类别的单一热编码分类特征的数据集上会受到影响。
“牛顿-牛顿”解算器是一个精确的牛顿解算器,用于计算黑森矩阵并求解所得线性系统。对于
n_samples
>>n_features
并且可以达到高精度(微小值tol
),但有几个缺点:只有 \(\ell_2\) 支持正规化。此外,由于Hessian矩阵是显式计算的,因此内存使用具有二次依赖性n_features
以及关于n_classes
.
有关其中一些求解器的比较,请参阅 [9].
引用
Christopher M. Bishop:模式识别和机器学习,第4.3.4章
马克·施密特、尼古拉斯·勒鲁和弗朗西斯·巴赫: Minimizing Finite Sums with the Stochastic Average Gradient.
亚伦·德法齐奥、弗朗西斯·巴赫、西蒙·拉科斯特-朱利安: SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives.
https://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm
托马斯·P·明卡 "A comparison of numerical optimizers for logistic regression"
备注
Feature selection with sparse logistic regression
逻辑回归分析 \(\ell_1\) 惩罚会产生稀疏模型,因此可以用于执行特征选择,详细说明在 基于L1的特征选择 .
备注
P-value estimation
在不进行惩罚的回归情况下,可以获得系数的p值和置信区间。的 statsmodels package 天生支持这一点。在sklearn中,人们也可以使用自举。
LogisticRegressionCV
通过内置交叉验证支持实施逻辑回归,以找到最佳结果 C
和 l1_ratio
参数根据 scoring
属性由于热启动,“newton-cg”、“sag”、“saga”和“lbfgs”解算器对于多维密集数据来说速度更快(请参阅 Glossary ).
1.1.12. 广义线性模型#
广义线性模型(GLM)以两种方式扩展线性模型 [10]. 首先,预测值 \(\hat{y}\) 与输入变量的线性组合相关联 \(X\) 通过反向链接函数 \(h\) 作为
其次,单位偏差取代平方损失函数 \(d\) 指数族中的分布(或者更准确地说,生殖指数离散模型(EDM) [11]) .
最小化问题变成:
哪里 \(\alpha\) 是L2正规化处罚。当提供样本权重时,平均值将成为加权平均值。
下表列出了一些特定的EDM及其单位偏差:
分布 |
Target Domain |
单位偏差 \(d(y, \hat{y})\) |
---|---|---|
正常 |
\(y \in (-\infty, \infty)\) |
\((y-\hat{y})^2\) |
伯努利 |
\(y \in \{0, 1\}\) |
\(2({y}\log\frac{y}{\hat{y}}+({1}-{y})\log\frac{{1}-{y}}{{1}-\hat{y}})\) |
分类 |
\(y \in \{0, 1, ..., k\}\) |
\(2\sum_{i \in \{0, 1, ..., k\}} I(y = i) y_\text{i}\log\frac{I(y = i)}{\hat{I(y = i)}}\) |
泊松 |
\(y \in [0, \infty)\) |
\(2(y\log\frac{y}{\hat{y}}-y+\hat{y})\) |
伽马 |
\(y \in (0, \infty)\) |
\(2(\log\frac{\hat{y}}{y}+\frac{y}{\hat{y}}-1)\) |
逆高斯 |
\(y \in (0, \infty)\) |
\(\frac{(y-\hat{y})^2}{y\hat{y}^2}\) |
这些分布的概率密度函数(PDF)如下图所示,

随机变量Y的PDF遵循Poisson、Tweedie(功效=1.5)和Gamma分布,具有不同平均值 (\(\mu\) ).观察点质量 \(Y=0\) 对于Poisson分布和Tweedie(功率=1.5)分布,但对于具有严格正目标域的Gamma分布不适用。#
伯努里分布是对伯努里试验进行建模的离散概率分布--这是一个只有两个相互排斥结果的事件。类别分布是类别随机变量伯努里分布的推广。虽然伯努里分布中的随机变量有两种可能的结果,但类别随机变量可以采用K个可能的类别之一,每个类别的概率分别指定。
分布的选择取决于当前的问题:
如果目标值 \(y\) 是计数(非负整值)或相对频率(非负),则可以使用带有日志链接的Poisson分布。
如果目标值为正值且有偏差,则可以尝试带有日志链接的Gamma分布。
如果目标值似乎比伽玛分布的尾部更重,则可以尝试逆高斯分布(甚至是Tweedie系列的更高方差)。
如果目标值 \(y\) 是概率,你可以使用伯努里分布。具有logit链接的伯努里分布可用于二进制分类。具有softmax链接的类别分布可用于多类分类。
用例示例#
农业/天气建模:每年降雨事件数量(Poisson)、每次事件的降雨量(Gamma)、每年总降雨量(Tweedie /Complex Poisson Gamma)。
风险建模/保险单定价:每年索赔事件/保单持有人数量(Poisson)、每次事件的成本(Gamma)、每位保单持有人每年的总成本(Tweedie /复合Poisson Gamma)。
信用违约:贷款无法偿还的可能性(伯努利)。
欺诈检测:现金转移等金融交易是欺诈交易的可能性(伯努利)。
预测性维护:每年生产中断事件数量(Poisson)、中断持续时间(Gamma)、每年总中断时间(Tweedie / Compound Gamma Poisson)。
医疗药物测试:在一系列试验中治愈患者的可能性或患者出现副作用的可能性(伯努里)。
新闻分类:将新闻文章分为三个类别,即商业新闻、政治新闻和娱乐新闻(分类)。
引用
McCullagh,Peter; Nelder,John.广义线性模型,第二版。Boca Raton:Chapman and Hall/CRC. ISBN 0-412-31760-5。
约根森湾(1992)。指数分散模型理论及偏差分析。Monografias de Matemática,第51号。 另见 Exponential dispersion model.
1.1.12.1. 使用#
TweedieRegressor
为Tweedie分布实现广义线性模型,允许使用适当的 power
参数.特别是:
power = 0
:正态分布。具体估计值,例如Ridge
,ElasticNet
在这种情况下通常更合适。power = 1
:Poisson分布。PoissonRegressor
为了方便而暴露。然而,它严格相当于TweedieRegressor(power=1, link='log')
.power = 2
:伽玛分布。GammaRegressor
为了方便而暴露。然而,它严格相当于TweedieRegressor(power=2, link='log')
.power = 3
:逆高斯分布。
链接功能由 link
参数.
使用示例::
>>> from sklearn.linear_model import TweedieRegressor
>>> reg = TweedieRegressor(power=1, alpha=0.5, link='log')
>>> reg.fit([[0, 0], [0, 1], [2, 2]], [0, 1, 2])
TweedieRegressor(alpha=0.5, link='log', power=1)
>>> reg.coef_
array([0.2463, 0.4337])
>>> reg.intercept_
np.float64(-0.7638)
示例
sphx_glr_auto_examples_linear_model_plot_poisson_regression_non_normal_loss.py
sphx_glr_auto_examples_linear_model_plot_tweedie_regression_insurance_claims.py
实际考虑#
所述特征矩阵 X
在试穿前应进行标准化。这确保了惩罚平等地对待特征。
由于线性预测器 \(Xw\) 可以是负的,而Poisson、Gamma和逆高斯分布不支持负值,因此有必要应用保证非负性的反向链接函数。例如用 link='log'
,反向链接函数变成 \(h(Xw)=\exp(Xw)\) .
If you want to model a relative frequency, i.e. counts per exposure (time, volume, ...) you can do so by using a Poisson distribution and passing \(y=\frac{\mathrm{counts}}{\mathrm{exposure}}\) as target values together with \(\mathrm{exposure}\) as sample weights. For a concrete example see e.g. sphx_glr_auto_examples_linear_model_plot_tweedie_regression_insurance_claims.py.
执行交叉验证时 power
参数 TweedieRegressor
,建议明确指定 scoring
功能,因为默认记分器 TweedieRegressor.score
取决于 power
本身
1.1.13. 随机梯度下降-新加坡元#
随机梯度下降是一种简单但非常有效的线性模型匹配方法。当样本数量(和特征数量)非常大时,它特别有用。的 partial_fit
方法允许在线/非核心学习。
的类 SGDClassifier
和 SGDRegressor
提供使用不同(凸)损失函数和不同罚分来匹配线性模型以进行分类和回归的功能。例如,与 loss="log"
, SGDClassifier
符合逻辑回归模型,而 loss="hinge"
它适合线性支持向量机(SVM)。
您可以参考专门的 随机梯度下降 文档部分了解更多详细信息。
1.1.14. 感知器#
的 Perceptron
是另一种适合大规模学习的简单分类算法。默认:
它不需要学习率。
它没有被正规化(惩罚)。
它仅在错误时更新其模型。
最后一个特征意味着,在铰链损失的情况下,Perceptron的训练速度比Singapore略快,并且生成的模型更稀疏。
实际上 Perceptron
是一个包裹 SGDClassifier
类使用感知器损失和恒定的学习率。参阅 mathematical section 详细信息,请参阅Singapore程序。
1.1.15. 被动攻击算法#
被动攻击算法是一个用于大规模学习的算法家族。它们与Perceptron类似,不需要学习率。然而,与感知器相反,它们包括一个正规化参数 C
.
对于分类, PassiveAggressiveClassifier
可用于 loss='hinge'
(PA-I)或 loss='squared_hinge'
(PA-II)。 对于回归, PassiveAggressiveRegressor
可用于 loss='epsilon_insensitive'
(PA-I)或 loss='squared_epsilon_insensitive'
(PA-II)。
引用#
"Online Passive-Aggressive Algorithms" K.克拉默,O.德克尔,J. Keshat,S. Shalev-Shwartz,Y.歌手- JMLR 7(2006)
1.1.16. 稳健性回归:异常值和建模错误#
稳健回归旨在在存在损坏数据的情况下匹配回归模型:要么是异常值,要么是模型中的错误。

1.1.16.1. 不同的场景和有用的概念#
在处理被异常值损坏的数据时需要记住不同的事情:
Outliers in X or in y ?
y方向的离群值
X方向的离群值
Fraction of outliers versus amplitude of error
离群点的数量很重要,但它们在多大程度上是离群值也很重要。
小异常值
大异常值
鲁棒拟合的一个重要概念是崩溃点:数据的一部分,可以是离群的拟合开始错过内在的数据。
请注意,一般来说,在多维设置中稳健地匹配(大 n_features
)很难。这里的稳健模型可能无法在这些环境中工作。
权衡:哪个估计者?
Scikit-learn提供了3个稳健的回归估计器: RANSAC , Theil Sen 和 HuberRegressor .
HuberRegressor 应该比 RANSAC 和 Theil Sen 除非样本数量非常大,即
n_samples
>>n_features
.这是因为 RANSAC 和 Theil Sen 适合较小的数据子集。但无论 Theil Sen 和 RANSAC 不太可能像 HuberRegressor 对于默认参数。RANSAC 将更好地处理y方向上的大异常值(最常见的情况)。
Theil Sen 将更好地应对X方向上的中等大小异常值,但该属性将在多维设置中消失。
如果有疑问,请使用 RANSAC .
1.1.16.2. 随机抽样共识#
RASAC(随机样本共识)从完整数据集中的内点随机子集中匹配模型。
RASAC是一种非确定性算法,仅产生具有一定概率的合理结果,该概率取决于迭代次数(请参阅 max_trials
参数)。它通常用于线性和非线性回归问题,在摄影测量计算机视觉领域特别受欢迎。
该算法将完整的输入样本数据拆分为一组可能受到噪音影响的内值和例如由错误测量或关于数据的无效假设引起的异常值。然后,仅根据确定的内值来估计所得模型。

示例
算法详情#
每个迭代都执行以下步骤:
选择
min_samples
从原始数据中随机采样,并检查数据集是否有效(参见is_data_valid
).将模型适合随机子集 (
estimator.fit
)并检查估计的模型是否有效(请参阅is_model_valid
).通过计算估计模型的残余,将所有数据分类为内值或异常值 (
estimator.predict(X) - y
)-绝对残留小于或等于的所有数据样本residual_threshold
被认为是内值。如果内点样本数最大,则将拟合模型保存为最佳模型。如果当前估计的模型具有相同数量的内点,则仅当其具有更好的得分时才被视为最佳模型。
这些步骤执行的次数最多 (max_trials
)或直到满足特殊停止标准之一(请参阅 stop_n_inliers
和 stop_score
).使用之前确定的最佳模型的所有内点样本(共识集)来估计最终模型。
的 is_data_valid
和 is_model_valid
函数允许识别和拒绝随机子样本的退化组合。如果识别退化病例不需要估计模型, is_data_valid
应在匹配模型之前使用,从而获得更好的计算性能。
引用#
"Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography" Martin A.费舍尔和罗伯特·C。博尔斯- SRI国际(1981)
"Performance Evaluation of RANSAC Family" Sunglok Choi、Taemin Kim和Wonspel Yu -BMVP(2009)
1.1.16.3. Theil-Sen估计量:基于广义中位数的估计量#
的 TheilSenRegressor
估计器使用多个维度的中位数的一般化。因此,它对多元异常值具有鲁棒性。然而请注意,估计器的稳健性随着问题的维度而迅速下降。它失去了鲁棒性,并不比普通的高维度最小平方好。
示例
理论考虑#
TheilSenRegressor
可媲美 Ordinary Least Squares (OLS) 就渐进效率而言和作为无偏估计量而言。与OLS相比,Theil-Sen是一种非参数方法,这意味着它不对数据的潜在分布做出任何假设。由于Theil-Sen是一种基于中位数的估计器,因此它对损坏的数据(即离群值)更稳健。在单变量设置中,在简单线性回归的情况下,Theil-Sen的崩溃点约为29.3%,这意味着它可以容忍高达29.3%的任意损坏数据。

执行 TheilSenRegressor
在scikit-learn中遵循多元线性回归模型的概括 [14] 使用空间中位数,这是中位数到多个维度的概括 [15].
在时间和空间复杂性方面,Theil-Sen根据
这使得不可能详尽地应用于具有大量样本和特征的问题。因此,可以通过仅考虑所有可能组合的随机子集来选择子种群的大小来限制时间和空间复杂性。
引用
党辛、彭汉翔、王雪芹、张和平: Theil-Sen Estimators in a Multiple Linear Regression Model.
Kärkkäinen和S.艾伊拉姆: On Computation of Spatial Median for Robust Data Mining.
也看到 Wikipedia page
1.1.16.4. 胡伯回归#
的 HuberRegressor
不同于 Ridge
因为它将线性损失应用于被定义为离群值的样本 epsilon
参数.如果样本的绝对误差小于阈值,则该样本被分类为内点 epsilon
.它不同于 TheilSenRegressor
和 RANSACRegressor
因为它没有忽视异常值的影响,而是赋予它们较小的权重。

示例
数学细节#
其中损失函数由下式给出
建议设置参数 epsilon
至1.35,实现95%的统计效率。
引用
Peter J. Huber、Elvezio M. Ronchetti:稳健统计,伴随规模估计,第172页。
的 HuberRegressor
与使用不同 SGDRegressor
损失将为 huber
通过以下方式。
HuberRegressor
是缩放不变的。一旦epsilon
已设置,缩放X
和y
向下或向上不同的值将产生与以前相同的对离群值的鲁棒性。相比SGDRegressor
哪里epsilon
当X
和y
被缩放。HuberRegressor
对于样本数量较少的数据使用应该更有效,SGDRegressor
需要对训练数据进行多次传递才能产生相同的鲁棒性。
请注意,此估计量不同于 R implementation of Robust Regression 因为R实现进行加权最小平方实现,根据剩余值大于某个阈值的多少为每个样本赋予权重。
1.1.17. 分位数回归#
分位数回归估计的中位数或其他分位数 \(y\) 条件是 \(X\) 而普通最小二乘(OLS)估计条件均值。
如果有兴趣预测区间而不是点预测,分位数回归可能很有用。有时,预测区间是基于预测误差正态分布、均值为零且方差为恒定的假设来计算的。分位数回归即使对于具有非恒定(但可预测)方差或非正态分布的误差也能提供合理的预测区间。

基于最小化弹球损失,条件分位数也可以通过线性模型以外的模型来估计。例如, GradientBoostingRegressor
如果其参数可以预测条件分位数 loss
设置为 "quantile"
和参数 alpha
设置为应该预测的分位数。请参阅中的示例 梯度Boosting回归的预测区间 .
分位数回归的大多数实现都基于线性规划问题。当前的实施基于 scipy.optimize.linprog
.
示例
数学细节#
作为线性模型, QuantileRegressor
给出线性预测 \(\hat{y}(w, X) = Xw\) 为 \(q\) - 第四分位数, \(q \in (0, 1)\) .权重或系数 \(w\) 然后通过以下最小化问题找到:
这包括弹球损失(也称为线性损失),参见 mean_pinball_loss
,
L1罚分由参数控制 alpha
,类似于 Lasso
.
由于弹球损失在剩余中仅呈线性,因此分位数回归对异常值的鲁棒性比基于平方误差的平均值估计要强得多。介于两者之间的是 HuberRegressor
.
引用#
科恩克,R.,&巴塞特Jr,G.(1978)。 Regression quantiles. 计量经济学:计量经济学会杂志,33-50。
南卡罗来纳州波特诺伊,& Koenker,R.(1997)。 The Gaussian hare and the Laplacian tortoise: computability of squared-error versus absolute-error estimators. Statistical Science, 12, 279-300 .
科恩克河(2005年)。 Quantile Regression .剑桥大学出版社。
1.1.18. 多元回归:用基函数扩展线性模型#
机器学习中的一种常见模式是使用在数据的非线性函数上训练的线性模型。 这种方法保持了线性方法的普遍快速性能,同时允许它们适应更广泛的数据范围。
数学细节#
例如,简单的线性回归可以通过构建来扩展 polynomial features 从系数。 在标准线性回归的情况下,对于二维数据,您可能有一个看起来像这样的模型:
如果我们想将复面而不是平面与数据相匹配,我们可以将特征组合为二阶方程,使模型看起来像这样:
(有时令人惊讶)的观察是,这是 still a linear model :要看到这一点,请想象创建一组新功能
通过重新标记数据,我们的问题就可以写出来了
我们看到由此产生的 polynomial regression 与我们上面考虑的线性模型相同(即该模型是线性的 \(w\) )并且可以通过相同的技术来解决。 通过考虑用这些基函数构建的更高维度空间内的线性匹配,该模型具有适应更广泛范围的数据的灵活性。
以下是将此思想应用于一维数据的示例,使用不同程度的多项特征:

此图形是使用 PolynomialFeatures
Transformer,将输入数据矩阵转换为给定次数的新数据矩阵。它可以如下使用::
>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
[2, 3],
[4, 5]])
>>> poly = PolynomialFeatures(degree=2)
>>> poly.fit_transform(X)
array([[ 1., 0., 1., 0., 0., 1.],
[ 1., 2., 3., 4., 6., 9.],
[ 1., 4., 5., 16., 20., 25.]])
的特征 X
已从 \([x_1, x_2]\) 到 \([1, x_1, x_2, x_1^2, x_1 x_2, x_2^2]\) ,现在可以在任何线性模型中使用。
这种预处理可以通过 Pipeline 工具.可以创建和使用代表简单的多元回归的单个对象,如下所示:
>>> from sklearn.preprocessing import PolynomialFeatures
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.pipeline import Pipeline
>>> import numpy as np
>>> model = Pipeline([('poly', PolynomialFeatures(degree=3)),
... ('linear', LinearRegression(fit_intercept=False))])
>>> # fit to an order-3 polynomial data
>>> x = np.arange(5)
>>> y = 3 - 2 * x + x ** 2 - x ** 3
>>> model = model.fit(x[:, np.newaxis], y)
>>> model.named_steps['linear'].coef_
array([ 3., -2., 1., -1.])
基于多项特征训练的线性模型能够准确恢复输入的多项系数。
在某些情况下,没有必要包括任何单个特征的更高次,而只需包括所谓的特征 interaction features 最多只能成倍增加 \(d\) 鲜明的特征。这些可以从 PolynomialFeatures
与设定 interaction_only=True
.
For example, when dealing with boolean features, \(x_i^n = x_i\) for all \(n\) and is therefore useless; but \(x_i x_j\) represents the conjunction of two booleans. This way, we can solve the XOR problem with a linear classifier:
>>> from sklearn.linear_model import Perceptron
>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
>>> y = X[:, 0] ^ X[:, 1]
>>> y
array([0, 1, 1, 0])
>>> X = PolynomialFeatures(interaction_only=True).fit_transform(X).astype(int)
>>> X
array([[1, 0, 0, 0],
[1, 0, 1, 0],
[1, 1, 0, 0],
[1, 1, 1, 1]])
>>> clf = Perceptron(fit_intercept=False, max_iter=10, tol=None,
... shuffle=False).fit(X, y)
分类器“预测”是完美的::
>>> clf.predict(X)
array([0, 1, 1, 0])
>>> clf.score(X, y)
1.0