使用sklearn预处理训练列表

我有以下形式的mnist训练列表:

def load_data():    f = gzip.open('mnist.pkl.gz', 'rb')    training_data, validation_data, test_data = cPickle.load(f, encoding='latin1')    f.close()def load_data_wrapper():    tr_d, va_d, te_d = load_data()    training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]]    training_results = [vectorized_result(y) for y in tr_d[1]]    training_data = list(zip(training_inputs, training_results))    ........................................

现在我想对我的训练输入进行预处理,使其具有零均值和单位方差。因此,我在以下代码中使用了from sklearn import preprocessing :

def SGD(self, training_data, epochs, mini_batch_size, eta,            test_data=None):        if test_data: n_test = len(test_data)        preprocessed_training = preprocessing.scale(training_data)        n = len(preprocessed_training)        for j in range(epochs):            random.shuffle(preprocessed_training)            mini_batches = [                training_data[k:k+mini_batch_size].....                ....................

然而,我遇到了以下错误:

ValueError: setting an array element with a sequence.

我正在修改来自mnielsen的代码,可以在这里找到。我是Python和机器学习的新手。如果有人能帮我解决这个问题,我将不胜感激。注意: 如果您认为有更好的库选项,请告诉我。

更新_1: 这是我另一次尝试,但得到了相同的错误。

    scaler = StandardScaler()    scaler.fit(training_data)    training_data = scaler.transform(training_data)    if test_data: test_data = scaler.transform(test_data)

更新_2: 我尝试了建议答案中使用pandas数据框提供的解决方案,但我仍然得到相同的错误。

更新_3 : 所以它是对象类型,但我需要浮点类型来执行缩放器。我做了以下操作: training_data = np.asarray(training_data).astype(np.float64) 但我仍然得到错误!

更新_4 : 一般mnist数据集结构: 50k训练图像,10k测试图像。在50k图像中,每个图像为28 * 28像素,这给出了784个数据点。例如,MNIST中的一个数据点,如果它的原始输出是5,那么它是(array([ 0., 0., 0., ..., 0., 0., 0.], dtype=float32), 5))元组。你可以看到元组中的第一个元素是一个稀疏矩阵。这里是训练数据集的一个例子,元组的第一个元素(即具有784个灰度浮点数的输入图像)。对于元组的第二个元素,我们只给出从0到9的数字作为输出。然而,在独热编码中,我们给出一个10D向量,其中除了输出值的索引外,所有索引值都为零。所以对于数字5,它将是[[0],[0],[0],[0],[0],[1],[0],[0],[0],[0]]。我使用的包装器修改可以在这里找到。


回答:

我遇到的问题是因为from sklearn.preprocessing import StandardScaler改变了我的数据维度。不是使用StandardScaler,我只是对我的(50k,(784,1))维数据集中的每个输入使用preprocessing.scale。也就是说,我对每个(784,1)数据使用scale函数,axis = 1,并使用for循环添加它们。这减慢了程序的速度,但有效。如果有人知道更好的方法,请在回答部分告诉我。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注