मैं क्रॉस-सत्यापन द्वारा सर्वोत्तम मॉडल का चयन करने के लिए sklearn
से LaasoCV
का उपयोग कर रहा हूं। मैंने पाया कि यदि मैं sklearn या matlab सांख्यिकीय टूलबॉक्स का उपयोग करता हूं तो क्रॉस सत्यापन अलग-अलग परिणाम देता है।sklearn (पायथन) और matlab सांख्यिकीय पैकेज में LASSO क्यों अलग हैं?
मैं matlab
का इस्तेमाल किया और उदाहरण http://www.mathworks.se/help/stats/lasso-and-elastic-net.html में दिए गए दोहराने इस
तब मैं matlab
डेटा सहेजा तरह एक आंकड़ा पाने के लिए, और sklearn
से laaso_path
साथ आंकड़ा दोहराने की कोशिश की, मैं मिल गया
हालांकि इन दो आंकड़ों के बीच कुछ समानताएं हैं, कुछ अंतर भी हैं। जहां तक मैं matlab
और alpha
sklearn
में पैरामीटर lambda
को समझता हूं, हालांकि इस आंकड़े में ऐसा लगता है कि कुछ अंतर हैं। क्या कोई यह बता सकता है कि कौन सा सही है या क्या मुझे कुछ याद आ रहा है? इसके अलावा प्राप्त गुणांक भी अलग हैं (जो मेरी मुख्य चिंता है)।
मैटलैब कोड:
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)
अजगर कोड:
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 परिणाम अलग थे और काफी बेहतर थे। हालांकि, मैंने इस समस्या को बहुत गहराई से नहीं देखा है, हालांकि। – Bitwise