- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 sklearn
中的 LaasoCV
来选择通过交叉验证选择的最佳模型。我发现如果我使用 sklearn 或 matlab 统计工具箱,交叉验证会给出不同的结果。
我使用了 matlab
并复制了中给出的示例 http://www.mathworks.se/help/stats/lasso-and-elastic-net.html得到这样的图
然后我保存了 matlab
数据,并尝试用 sklearn
中的 laaso_path
复制图形,我得到了
虽然这两个数字之间有一些相似之处,但也有一定的差异。据我了解 matlab
中的参数 lambda
和 sklearn
中的 alpha
是相同的,但是在这个图中似乎有一些差异。有人可以指出哪个是正确的还是我遗漏了什么?此外,获得的系数也不同(这是我主要关心的问题)。
Matlab代码:
rng(3,'twister') % for reproducibility
X = zeros(200,5);
for ii = 1:5
X(:,ii) = exprnd(ii,200,1);
end
r = [0;2;0;-3;0];
Y = X*r + randn(200,1)*.1;
save randomData.mat % To be used in python code
[b fitinfo] = lasso(X,Y,'cv',10);
lassoPlot(b,fitinfo,'plottype','lambda','xscale','log');
disp('Lambda with min MSE')
fitinfo.LambdaMinMSE
disp('Lambda with 1SE')
fitinfo.Lambda1SE
disp('Quality of Fit')
lambdaindex = fitinfo.Index1SE;
fitinfo.MSE(lambdaindex)
disp('Number of non zero predictos')
fitinfo.DF(lambdaindex)
disp('Coefficient of fit at that lambda')
b(:,lambdaindex)
Python 代码:
import scipy.io
import numpy as np
import pylab as pl
from sklearn.linear_model import lasso_path, LassoCV
data=scipy.io.loadmat('randomData.mat')
X=data['X']
Y=data['Y'].flatten()
model = LassoCV(cv=10,max_iter=1000).fit(X, Y)
print 'alpha', model.alpha_
print 'coef', model.coef_
eps = 1e-2 # the smaller it is the longer is the path
models = lasso_path(X, Y, eps=eps)
alphas_lasso = np.array([model.alpha for model in models])
coefs_lasso = np.array([model.coef_ for model in models])
pl.figure(1)
ax = pl.gca()
ax.set_color_cycle(2 * ['b', 'r', 'g', 'c', 'k'])
l1 = pl.semilogx(alphas_lasso,coefs_lasso)
pl.gca().invert_xaxis()
pl.xlabel('alpha')
pl.show()
最佳答案
我没有 matlab,但请注意交叉验证获得的值可能不稳定。这是因为它受到您分割样本的方式的影响。
即使您在 python 中运行 2 次交叉验证,您也可以获得 2 个不同的结果。考虑这个例子:
kf=sklearn.cross_validation.KFold(len(y),n_folds=10,shuffle=True)
cv=sklearn.linear_model.LassoCV(cv=kf,normalize=True).fit(x,y)
print cv.alpha_
kf=sklearn.cross_validation.KFold(len(y),n_folds=10,shuffle=True)
cv=sklearn.linear_model.LassoCV(cv=kf,normalize=True).fit(x,y)
print cv.alpha_
0.00645093258722
0.00691712356467
关于python - 为什么sklearn(python)和matlab统计包中的LASSO不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12746479/
我试图将 javascript 数组从 jquery ajax 调用传递到 lasso 脚本,但在尝试在 lasso 脚本中访问它时,它返回空记录。 我确信我在代码中遗漏了一些东西,但无法弄清楚它是什
我想创建一个模型来描述我的数据行为。我尝试了简单线性回归、简单多项式回归和正则化和交叉验证的多项式回归。 我发现最后一种方法允许自动特征选择(带度数),我实际上需要它,因为简单的线性回归表现不佳。我关
这是我的代码。当我运行它时,山脊很好,但是对于套索,我收到错误消息: ConvergenceWarning: Objective did not converge. You might want to
我有一个非常大的数据集,其中包含 100 多个系数和数千个条目。因此,我想使用 Lasso 方法进行模型训练。 我目前正在研究以下 sci-kit 文档: Lasso LassoCV 虽然实现看起来很
我想一次选择多个标记,并通过绘制套索来选择标记,然后选择套索区域旁边的标记,但实际上我不知道该怎么做,而且我没有找到任何包或教程这样做我想知道是否有人可以帮助我,即使只是告诉我逻辑而不是完整的代码。
我正在尝试使用 LASSO 确定我的特征在分类中的重要性。但是,我找不到任何关于这样做的引用或指南。我知道 LASSO 主要适用于回归,但是,有什么方法或指南可以解决吗? 如果没有办法,有没有其他类似
我正在寻找在 scikit-learn 的 Lasso/LassoCV 中添加交互项。如果是两个连续变量之间或两个分类变量之间的交互作用,我可以添加与交互中每个元素的乘法相对应的列。但是当我们在分类变
我有这个套索回归代码,当我打印 beta 系数时,我得到许多组 beta 值,而不仅仅是一组。我没有为 lambda 指定任何值,但当我这样做时,我只得到一组 beta 值。我知道如何找到 lambd
我正在 sklearn 中进行回归项目,我在其中对各种数字和分类变量使用了 LASSO 回归。使用 One-hot-encoder 方法转换分类变量。 由于一开始对特征矩阵进行了归一化处理,所以最终L
我目前使用 sklearn.linear_model 模块实现了 Ridge 和 Lasso 回归。 但是,套索回归在同一数据集上的效果似乎差了 3 个数量级! 我不确定哪里出了问题,因为从数学上讲,
我想用 lasso 在 python 中执行多元线性回归。我不确定输入观察矩阵 X 是否可以包含分类变量。我从这里阅读了说明:lasso in python 但它很简单,并没有指明允许的类型。例如,我
glmnet 中有没有办法进行一阶交互? 例如,如果我的 X 矩阵是: V1 V2 V3 0 1 0 1 0 1 1 0 0 ... 有没有办法指定它在不手动创建列的情况下按照 `y
我正在尝试在网页上实现这种功能: 通过拖动鼠标选择正方形区域 选取所选区域中的所有元素 处理它们 => 所以我基本上想创建类似“photoshop 方形选择工具”的东西,它可以获取所选区域中的所有 H
我有大约 22 个数据预测变量 x_i,我想减少到一定数量以便最好地描述 y。基本问题...但是,我很不清楚如何使用 scikit 和 Linearmodel.lassoLars 来执行此任务。 从他
我正在尝试弄清楚如何在使用 RobustScalar 和 Lasso 后取消缩放数据(大概使用 inverse_transform)以进行预测。下面的数据只是一个例子。我的实际数据更大、更复杂,但我希
我认为下面的 Lasso 问题有简单的解决方案 [1,2,0,0] 因为 np.dot(x, [1,2,0,0]) 返回 [[5,7,6,8]]。 clf = linear_model.Lasso(a
我目前正在高维情况下用scikit试验Lasso。标签是 Y_i(实数),特征是 X_i(X_i 是大小为 d=112 的向量)。我只有三对 (Y_i,X_i)。 d>>n=3 所以我们处于高维情况。
我很想在 statsmodels 中使用线性 LASSO 回归,以便能够使用“公式”符号来编写模型,这将在处理许多分类变量及其交互时节省我相当多的编码时间。但是,它似乎还没有在统计模型中实现? 最佳答
在我重新发明轮子之前...... 我正在用 C# 编写代码,因此需要一个 .NET 解决方案。我想处理一个灰度图像,它可以被分解成多个区域,这些区域可以被定义为具有较低和较高的颜色阈值(或“暗度”)—
我想获得 LASSO 回归的置信区间。为此,我使用了 selective inference R 中的包。 此包中的 fixedLassoInf 函数为给定的 lambda 值提供套索回归的置信区间。
我是一名优秀的程序员,十分优秀!