使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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