程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Sklearn SGDClassifier部分拟合大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Sklearn SGDClassifier部分拟合?

开发过程中遇到Sklearn SGDClassifier部分拟合的问题如何解决?下面主要结合日常开发的经验,给出你关于Sklearn SGDClassifier部分拟合的解决方法建议,希望对你解决Sklearn SGDClassifier部分拟合有所启发或帮助;

我终于找到了答案。您需要 重新 ,因为在实例化模型时设置 shuffle = True 不会在使用partial_fit 时重新 整理 数据(仅适用于 fit )。注意:在sklearn.linear_model.SGDClassifier页面上找到此信息将很有帮助。

修改后的代码如下:

from sklearn.linear_model import SGDClassifIEr
import random
clf2 = SGDClassifIEr(loss='log') # shuffle=True is uSELEss here
shuffledRange = range(len(X))
n_iter = 5
for n in range(n_iter):
    random.shuffle(shuffledRangE)
    shuffledX = [X[i] for i in shuffledRange]
    shuffledY = [Y[i] for i in shuffledRange]
    for batch in batches(range(len(shuffledX)), 10000):
        clf2.partial_fit(shuffledX[batch[0]:batch[-1]+1], shuffledY[batch[0]:batch[-1]+1], classes=numpy.unique(Y))

解决方法

我正在尝试使用SGD对大型数据集进行分类。由于数据太大而无法放入内存,因此我想使用 partial_fit
方法来训练分类器。我选择了适合内存的数据集样本(100,000行)来测试 fitpartial_fit

from sklearn.linear_model import SGDClassifier

def batches(l,n):
    for i in xrange(0,len(l),n):
        yield l[i:i+n]

clf1 = SGDClassifier(shuffle=True,loss='log')
clf1.fit(X,Y)

clf2 = SGDClassifier(shuffle=True,loss='log')
n_iter = 60
for n in range(n_iter):
    for batch in batches(range(len(X)),10000):
        clf2.partial_fit(X[batch[0]:batch[-1]+1],Y[batch[0]:batch[-1]+1],classes=numpy.unique(Y))

然后,我使用相同的测试集测试两个分类器。在第一种情况下,我的准确度为100%。据我了解,默认情况下,SGD在训练数据上传递5次(n_iter = 5)。

在第二种情况下,我必须对数据传递60次才能达到相同的精度。

为什么会有这种差异(5比60)?还是我做错了什么?

大佬总结

以上是大佬教程为你收集整理的Sklearn SGDClassifier部分拟合全部内容,希望文章能够帮你解决Sklearn SGDClassifier部分拟合所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。