Machine learning 将逻辑回归模型拟合到MNIST数据需要很长时间

Machine learning 将逻辑回归模型拟合到MNIST数据需要很长时间,machine-learning,scikit-learn,classification,logistic-regression,Machine Learning,Scikit Learn,Classification,Logistic Regression,我试图将sklearn的Logistic回归模型应用于MNIST数据集,并将训练测试数据分为70-30个部分 然而,当我简单地说 model.fit(train\u x,train\u y)这需要很长时间 我在启动LogisticReturnal时没有添加任何参数 代码: import seaborn as sns import matplotlib import matplotlib.pyplot as plt from sklearn.datasets import fetch_mldata

我试图将sklearn的Logistic回归模型应用于MNIST数据集,并将训练测试数据分为70-30个部分

然而,当我简单地说
model.fit(train\u x,train\u y)
这需要很长时间

我在启动LogisticReturnal时没有添加任何参数

代码:

import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_mldata
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

import tempfile

test_data_home = tempfile.mkdtemp()
mnist = fetch_mldata('MNIST original', data_home = test_data_home)


x_train, x_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size = 0.30, random_state = 0)

lr = LogisticRegression(penalty = 'l2')
lr.fit(x_train, y_train)

你提出的问题似乎相当模糊,但我相当肯定你的逻辑回归没有收敛。我不太清楚为什么你现在要加上一个“L2”的惩罚条款,除非你担心过度装修。不管怎么说,如果你看一下,上面写着:

用于优化问题的算法

对于小型数据集,“liblinear”是一个不错的选择,而对于大型数据集,“sag”和“saga”则更快。 对于多类问题,只有“newton cg”、“sag”、“saga”和“lbfgs”处理多项式损失“liblinear”仅限于一对多方案。 “newton cg”、“lbfgs”和“sag”只处理L2惩罚,“liblinear”和“saga”处理L1惩罚。 请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的特征上得到保证。您可以使用sklearn.preprocessing中的定标器对数据进行预处理

我会立即建议您添加参数'solver=sag'(或任何其他可以处理L2惩罚的解算器),因为文档明确指出只有某些解算器可以处理L2惩罚,默认解算器liblinear只处理L1惩罚。关于逻辑回归的解算器,有一篇非常棒的帖子,你可以在你的数据集上看到:


请记住,L2和L1正则化处理过拟合,因此,您甚至可以更改lr定义中的C参数。请查看sklearn文档以了解更多信息。希望这有帮助

首先,MINST不是一个二元分类,而是一个多类。因此,关于scikit中的文档,请学习:

multi_类:str,{'ovr','multi-nomial','auto'},默认值为'ovr'If 选择的选项为“ovr”,则每个选项都适合一个二进制问题 标签。对于“多项式”而言,最小损失为多项式损失 适用于整个概率分布,即使数据是 二进制的。”当解算器='liblinear'时,多项式'不可用自动的 如果数据为二进制,或如果solver='liblinear',则选择“ovr”,然后 否则选择“多项式”

您需要在创建模型时强调这一点

由于MINST具有相同数量级的特征,我相信如果你明确提到你的解算器是比其他解算器收敛更快的传奇

因此,我将以Scikitlearn为例,设置培训参数,并将代码更改为:

lr = LogisticRegression(C=50. / train_samples,
                         multi_class='multinomial',
                         penalty='l1', solver='saga', tol=0.1)
lr.fit(x_train, y_train)

你能分享你正在运行的代码吗?还有您机器的规格?@alift添加了规格和代码的图像,这将有助于查看代码,并告诉您大概需要多长时间才能获得结果?10分钟?1小时?etc@alift将模型与数据相匹配大约需要20分钟。这两行文字就是我到目前为止所做的。好吧,你的规格对我来说似乎很好,但20分钟太多了。恐怕我无法帮助您,因为您没有共享代码,仅共享了两行代码就找不到问题。如果您不愿意共享代码,请查看此处,看看您正在做哪些不同的事情,希望这会有所帮助:。祝你好运