Skip to main content

基于二阶优化的机器学习框架

项目描述

峰值引擎

PyPI 版本 许可证:CC BY 4.0 API 参考

peak-engines是机器学习框架,专注于应用高级优化算法来构建更好的模型。

安装

pip install peak-engines

拟合逻辑回归超参数

可以有效地近似逻辑回归的留一法交叉验证。在高层次上,它是这样工作的:对于给定的超参数C,我们

  1. 找到b优化给定逻辑回归的参数C。
  2. 对于每个数据索引,我们在删除第 i 个数据条目的情况下计算对数似然i的粗麻布H_{-i}和梯度。g_{-i}(我们可以重用从 (1) 计算的粗麻布,以最少的工作量完成此操作。)
  3. 我们应用矩阵求逆引理来有效地计算逆H_{-i}^{-1}。
  4. 我们使用H_{-i}^{-1}和采取牛顿方法g_{-i}的一步来近似逻辑回归系数,其中第 i 个条目被删除。b_{-i}
  5. 最后,我们使用b_{-i}'s 来近似样本外预测并估计留一法交叉验证。

有关 更多详细信息,请参阅 Kamiar Rad 和 Arian Maleki通过近似留一法对样本外预测误差的可扩展估计。

此外,我们可以将 Approximate Leave-One-Out 指标与超参数区分开来,并迅速攀升至最佳性能C。以下是使用peak-engines 的方法:

加载示例数据集

from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
X, y = load_breast_cancer(return_X_y=True)
X = StandardScaler().fit_transform(X)

找到表现最好的 C

model = peak_engines.LogisticRegressionModel()
model.fit(X, y)
print('C =', model.C_[0])

印刷

C = 0.66474879

如果我们通过蛮力计算 LOOCV 并与 ALOOCV 进行比较,我们可以看到近似值有多准确

替代文字

拟合岭回归超参数

通过将交叉验证表示为优化目标并计算导数, 峰值引擎能够有效地找到正则化参数,从而在留一法或广义交叉验证中获得最佳分数。此外,它可以扩展以处理多个正则化器。这是它如何工作的示例

import numpy as np
from sklearn.datasets import load_boston
X, y = load_boston(return_X_y=True)
from peak_engines import RidgeRegressionModel
model = RidgeRegressionModel(normalize=True)
# Fit will automatically find the best alpha that minimizes the Leave-one-out Cross-validation.
# when you call fit. There's no need to provide a search space because peak_engines optimizes the
# LOOCV directly. It the computes derivatives of the LOOCV with respect to the hyperparameters and
# is able to quickly zero in on the best alpha.
model.fit(X, y)
print('alpha =', model.alpha_)

印刷

alpha = 0.009274259071634289

拟合扭曲线性回归

让X和y表示回归数据集的特征矩阵和目标向量。在误差正态分布的假设下,普通最小二乘法 (OLS) 找到最大化数据集似然性的线性模型

当错误不是正态分布时会发生什么?好吧,模型将被错误指定,没有理由认为它的可能性预测是准确的。这就是扭曲线性回归可以提供帮助的地方。它在 OLS 中引入了一个额外的步骤,它使用由ψ​​ 参数化的可延展的单调函数f转换目标向量,并调整参数以最大化转换后数据集的可能性

通过引入额外的转换步骤,扭曲线性回归比 OLS 更通用,同时仍然保留了强大的结构和可解释性。这是你如何使用它

加载示例数据集

from sklearn.datasets import load_boston
X, y = load_boston(return_X_y=True)

拟合扭曲的线性回归模型

import peak_engines
model = peak_engines.WarpedLinearRegressionModel()
model.fit(X_train, y_train)

可视化变形函数

import numpy as np
import matplotlib.pyplot as plt
y_range = np.arange(np.min(y), np.max(y), 0.01)
z = model.warper_.compute_latent(y_range)
plt.plot(y_range, z)
plt.xlabel('Median Housing Value in $1000s')
plt.ylabel('Latent Variable')
plt.scatter(y, model.warper_.compute_latent(y))

替代文字

教程

文章

例子

文档

见doc/Reference.pdf

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置发行版

peak_engines-0.2.8-cp32-abi3-manylinux1_x86_64.whl (16.3 MB 查看哈希)

已上传 cp32

peak_engines-0.2.8-cp32-abi3-macosx_10_9_intel.whl (16.9 MB 查看哈希)

已上传 cp32

peak_engines-0.2.8-cp27-cp27mu-manylinux1_x86_64.whl (16.3 MB 查看哈希)

已上传 cp27

peak_engines-0.2.8-cp27-cp27mu-macosx_10_9_intel.whl (16.9 MB 查看哈希)

已上传 cp27

peak_engines-0.2.8-cp27-cp27m-manylinux1_x86_64.whl (16.3 MB 查看哈希)

已上传 cp27

peak_engines-0.2.8-cp27-cp27m-macosx_10_9_intel.whl (16.9 MB 查看哈希)

已上传 cp27