gpt4 book ai didi

python - sklearn多层感知器中的partial_fit函数

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:15 26 4
gpt4 key购买 nike

我正在使用 partial_fit(X,y) 函数在 scikit-learn 中训练多层感知器 (MLP)(使用默认选项),我注意到调用之间有区别

partial_fit([X1],[y1])
partial_fit([X2],[y2])

partial_fit([X1,X2],[y1,y2])

第二个选项似乎更快,但结果似乎更糟。有人可以解释一下发生了什么吗?

最佳答案

如果没有最小的、可重现的示例,回答这个问题有点困难,但这是我的看法。

sklearn 感知器有一个属性 batch_size默认值为 200。当您设置 MLPClassifierverbose=True 时,您将看到第一个示例(两次连续调用)导致两次迭代,而第二个示例导致一次迭代,即第二个 partial_fit 调用改进了第一次调用的结果。在每次迭代中,总样本再次被分成 block 。

当您的样本大小较小(下面的代码片段中为 <5000)时,默认的 batch_size 相对于样本大小来说太大,将其减少到 100 将为两种方法提供更好的结果,但是连续调用和单行方法之间没有区别。

随着样本数量增加 (>10^6),此伪影就会消失。

enter image description here

from sklearn.datasets import make_moons
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt

def get_mlp(resize_batch, n):
mlp = MLPClassifier(verbose=True, random_state=random_state)
if resize_batch:
mlp.batch_size = min(n // 2, 100)
return mlp

n_samples = [10**2, 10**3, 5*10**3, 10**4, 10**5, 10**6, 10**7]
batch_resize = [False, True]
random_state = 1

results = list()

for n in n_samples:
x = make_moons(n_samples=n, noise=0.3, random_state=random_state)
X = StandardScaler().fit_transform(x[0])
results.append([n])
for resize in batch_resize:
mlp = get_mlp(resize, n)
mlp.partial_fit(X, x[1], [0, 1])
results[-1].append([mlp.score(X, x[1]), 0, resize])

mlp = get_mlp(resize, n)
for i in range(2):

train_start = i * n // 2
train_stop = (i + 1) * n // 2
mlp.partial_fit(X[train_start:train_stop], x[1][train_start:train_stop], [0, 1])
results[-1].append([mlp.score(X, x[1]), 1, resize])

x = [i[0] for i in results]
colors = ['red', 'green', 'blue', 'black']
labels = ['one call, batch=auto', 'two calls, batch=auto', 'one call, batch=100', 'two calls, batch=100']

fig, ax = plt.subplots()
handles = list()
for n in range(4):
plt.subplot(210 + i)
handles.append(plt.plot(x, [i[n + 1][0] for i in results], c=colors[n], label=labels[n])[0])
plt.xscale('log')
plt.legend(handles=handles, loc=2)
plt.show()

关于python - sklearn多层感知器中的partial_fit函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com