<p><span style="padding: 3px 10px; border-radius: 5px; color: #ffffff; font-weight: bold; display: inline-block; background-color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;External Email - Use Caution&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p><p></p><div dir="ltr">Hi Giula,<div><br></div><div>good catch, I had forgotten that we&#39;re cloning the estimator for each time sample; you&#39;ll thus need to do this:</div><div><br></div><div>class MyModel(SGDClassifier):<br>    def fit(self, X, y):<br>        super().partial_fit(X, y)<br>        return self<br><br>model = MyModel(loss=&#39;log&#39;, class_weight=&#39;balanced&#39;) <br>slider = SlidingEstimator(model, scoring=&#39;roc_auc&#39;)<br></div><div><br></div><div>Hope that helps</div><div><br></div><div>JR</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 6 Aug 2020 at 15:56, Giulia Gennari &lt;<a href="mailto:giulia.gennari1991@gmail.com">giulia.gennari1991@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p><span style="padding:3px 10px;border-radius:5px;color:rgb(255,255,255);font-weight:bold;display:inline-block;background-color:rgb(255,0,0)">        External Email - Use Caution        </span></p><p></p><div dir="ltr">Dear Jean-<span id="gmail-m_-1700891060312205861:88n.11">Rémi</span>,<div><br></div><div>Thank you for the nice suggestion!</div><div><br></div><div>Just to make sure that this is working (I apologize for my ignorance):</div><div><br></div><div>When I run:</div><div>model = <span id="gmail-m_-1700891060312205861:88n.12">SGDClassifier</span>(loss=&#39;log&#39;, class_weight=&#39;balanced&#39;)<br>model.fit = model.partial_fit<br>slider1 = <span id="gmail-m_-1700891060312205861:88n.13">SlidingEstimator</span>(model, scoring=&#39;roc_auc&#39;)<br></div><div>slider1.fit(X_train, y_train)<br></div><div><br></div><div>or </div><div><br></div><div><span id="gmail-m_-1700891060312205861:88n.14">clf</span> = make_pipeline(<span id="gmail-m_-1700891060312205861:88n.15">Vectorizer</span>(), <span id="gmail-m_-1700891060312205861:88n.16">StandardScaler</span>(), model)<br>slider2 = <span id="gmail-m_-1700891060312205861:88n.17">SlidingEstimator</span>(<span id="gmail-m_-1700891060312205861:88n.18">clf</span>, scoring=&#39;roc_auc&#39;)<br></div><div>slider2.fit(X_train, y_train)<br></div><div><br></div><div>I do not get any error, while I would expect:</div><div><pre style="box-sizing:border-box;overflow:auto;font-size:14px;padding:1px 0px;margin-top:0px;margin-bottom:0px;line-height:inherit;color:rgb(0,0,0);word-break:break-all;border:0px;border-radius:0px;white-space:pre-wrap;vertical-align:baseline"><span style="box-sizing:border-box;color:rgb(178,43,49);font-weight:bold"><span id="gmail-m_-1700891060312205861:88n.19">ValueError</span></span>: class_weight &#39;balanced&#39; is not supported for partial_fit. In order to use &#39;balanced&#39; weights, use compute_class_weight(&#39;balanced&#39;, classes, y). Pass the resulting weights as the class_weight parameter.</pre><pre style="box-sizing:border-box;overflow:auto;font-size:14px;padding:1px 0px;margin-top:0px;margin-bottom:0px;line-height:inherit;color:rgb(0,0,0);word-break:break-all;border:0px;border-radius:0px;white-space:pre-wrap;vertical-align:baseline"><br></pre></div><div>Since this is what I get with:</div><div>model.fit(X_train[:,:,single_time_point], y_train)<br></div><div><br></div><div>Is there a good reason for that? E.g. class weights are computed internally beforehand by <span id="gmail-m_-1700891060312205861:88n.20">SlidingEstimator</span>?</div><div><br></div><div>Thank you again!</div><div><br></div><div>Giulia</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 5, 2020 at 7:18 PM Jean-Rémi KING &lt;<a href="mailto:jeanremi.king@gmail.com" target="_blank">jeanremi.king@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p><span style="padding:3px 10px;border-radius:5px;color:rgb(255,255,255);font-weight:bold;display:inline-block;background-color:rgb(255,0,0)">        External Email - Use Caution        </span></p><p></p><div dir="ltr">Hi Giulia,<div><br></div><div>I think you should be able to change the method:</div><div><br></div><div>model = sklearn.linear_model.SGDClassifier()</div><div>model.fit = model.partial_fit</div><div>slider = mne.decoding.SlidingEstimator(model)</div><div>for X, y in train_batches:</div><div>    slider.fit(X, y)</div><div><br></div><div>Best</div><div><br></div><div>JR</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 5 Aug 2020 at 18:40, Giulia Gennari &lt;<a href="mailto:giulia.gennari1991@gmail.com" target="_blank">giulia.gennari1991@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p><span style="padding:3px 10px;border-radius:5px;color:rgb(255,255,255);font-weight:bold;display:inline-block;background-color:rgb(255,0,0)">        External Email - Use Caution        </span></p><p></p><div dir="ltr">Hi!<div><br></div><div>I would need to try decoding with incremental learning (EEG data).</div><div>I was planning to use logistic regression by means of the <a href="https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html" target="_blank">SGDClassifier</a> .</div><div>I would then need to call .partial_fit to make my estimator learn on each of my training sets.</div><div>However:</div><div><pre style="box-sizing:border-box;overflow:auto;font-size:14px;padding:1px 0px;margin-top:0px;margin-bottom:0px;line-height:inherit;color:rgb(0,0,0);word-break:break-all;border:0px;border-radius:0px;white-space:pre-wrap;vertical-align:baseline">&#39;GeneralizingEstimator&#39; object has no attribute &#39;partial_fit&#39;</pre></div><div>Same issue for SlidingEstimator. <br></div><div>Is there a way to work around this limitation?</div><div><br></div><div>Thank you so so much in advance!</div><div><br></div><div>Giulia Gennari </div></div>
_______________________________________________<br>
Mne_analysis mailing list<br>
<a href="mailto:Mne_analysis@nmr.mgh.harvard.edu" target="_blank">Mne_analysis@nmr.mgh.harvard.edu</a><br>
<a href="https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis" rel="noreferrer" target="_blank">https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis</a></blockquote></div>
_______________________________________________<br>
Mne_analysis mailing list<br>
<a href="mailto:Mne_analysis@nmr.mgh.harvard.edu" target="_blank">Mne_analysis@nmr.mgh.harvard.edu</a><br>
<a href="https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis" rel="noreferrer" target="_blank">https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis</a></blockquote></div>
_______________________________________________<br>
Mne_analysis mailing list<br>
<a href="mailto:Mne_analysis@nmr.mgh.harvard.edu" target="_blank">Mne_analysis@nmr.mgh.harvard.edu</a><br>
<a href="https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis" rel="noreferrer" target="_blank">https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis</a></blockquote></div>