J'utilise J'ai utilisé p> Ensuite, j'ai sauvegé les données p> Bien qu'il existe une similitude entre ces deux chiffres, il existe également certaines différences . Aussi loin que je comprenne le paramètre Code MATLAB: strong> P> LAASOCV code> à partir de
sklearn code> pour sélectionner le meilleur modèle est sélectionné par la validation croisée. J'ai constaté que la validation croisée donne un résultat différent si j'utilise la boîte à outils statistiques Sklearn ou Matlab.
matlab code> et reproduit l'exemple donné dans
http://www.mathworks.se/help/stats/lasso -et-elastic-net.html
Pour obtenir une figure comme celle-ci p>
lauaso_path code> de
sklearn code>, j'ai reçu p>
lambda code> dans
matlab code> et
alpha code> dans
sklearn code> est identique, cependant dans ce chiffre qu'il semble qu'il y a des différences. Quelqu'un peut-il souligner lequel est le bon ou que je manque quelque chose? En outre, le coefficient obtenu est également différent (qui est ma principale préoccupation). P>
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()
4 Réponses :
Il est possible que Une autre remarque est que votre chemin n'est pas très linéaire car il pourrait / devrait être. Envisagez de réduire la tol et augmente Max_Itre. P>
J'espère que cela aide p> alpha = lambda / n_semples code>
où n_samples = x.shape [0] code> en scikit-apprendre p>
Je suppose que le problème est plus que la normalisation. J'ai essayé ce qui précède et j'ai toujours eu des courbes différentes. En outre, les coefficients obtenus par la validation croisée sont très différents.
Cela ressemble toujours à un problème de paramétrage pour moi: les 2 courbes sont similaires mais décalées sur l'axe X. Un répression sur l'alpha en scikit-apprentissage pris dans l'espace journal peut provoquer cela. Le paramétrage utilisé dans SCIKIT-HORK est donné dans le Documentation . Vous pouvez également générer plus de données de la même distribution et calculer un score de régression (par exemple le coefficient de détermination R ^ 2 ou RMSE) et vérifiez que la valeur optimale de l'alpha est trouvée près de la valeur de la croix validée de l'alpha.
@IMSC Avez-vous essayé avec alpha = lambda / (2 * x.shape [0]) code>?
Bien que je ne puisse pas comprendre ce qui cause le problème, il y a une direction logique dans laquelle continuer. P>
Ce sont les faits: p>
C'est mon hypothèse: p>
Conclusion logique: votre implémentation de MATLAB de cet exemple est fiable et l'autre n'est pas. Cela pourrait être un problème dans le code, ou peut-être dans la façon dont vous l'utilisez, mais de toute façon la seule conclusion logique serait que vous devriez continuer avec MATLAB pour sélectionner votre modèle. P>
C'est un argument très faible pour annoncer une technologie sur une autre. Sklearn fournit également des exemples. Serait-il reproductible par le code Matlab? En fait, Lasso ressemble plus à une classe de solutaire qu'un algorithme défini avec précision. Il est donc plus probable que l'algorithme diffère légèrement. Indiquant que Scikit-apprendre n'est pas fiable sur la base de vos arguments est assez dur.
Je ne voulais pas impliquer cela, j'ai répété ma réponse légèrement plus claire.
Merci d'avoir répondu. Scikit-apprendre CODE> est en effet un module bien implémenté. Cependant, la documentation et les exemples manquent toujours de ce qui cause le problème ci-dessus. Je pourrais résoudre le problème par une bonne normalisation.
Je n'ai pas de matlab mais veillez à ce que la valeur obtenue avec la validation croisée puisse être instable. C'est parce qu'il a influencé par la façon dont vous subdivisez les échantillons.
Même si vous exécutez 2 fois la validation croisée dans Python, vous pouvez obtenir 2 résultats différents.
Considérez cet exemple: p>
Je sais que c'est un vieux fil, mais:
Je travaille réellement sur la tuyauterie sur Essayez de normaliser le X matrice d'abord lorsque vous utilisez LassOCV. P> S'il s'agit d'un objet Pandas, P> lassocv code> à partir de
GLMNET code> (in r), et j'ai trouvé que
lassocv code> ne fonctionne pas trop bien avec la normalisation de la matrice X (même si vous spécifiez le paramètre
normalisé = true code>). p>
(X - X.mean())/X.std()
Je peux simplement dire que je me souviens de constatations similaires lorsque vous travaillez sur des données réelles. Les résultats MATLAB étaient différents et significativement mieux. Je n'ai pas exploré très profondément ce que ce problème découle de ce problème.