簡體   English   中英

sklearn預處理培訓清單

[英]Preprocessing training list with 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和機器學習的新手。 如果有人可以幫助我,我將不勝感激。 注意:如果您認為有更好的庫選項,請也告訴我。

Update_1 :這是我的另一個嘗試,給出了同樣的錯誤。

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

Update_2 :我嘗試使用pandas數據嘗試提供建議的答案中提供的解決方案,但仍然遇到相同的錯誤。

Update_3 :所以它是對象類型,但是我需要浮點類型來執行縮放器。 我做了以下工作: training_data = np.asarray(training_data).astype(np.float64) ,我仍然收到錯誤!

Update_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
scaler = StandardScaler()
scaler.fit(train[features])   
X_train = pd.DataFrame(scaler.transform(train[features]),columns = train[features].columns)
X_test = pd.DataFrame(scaler.transform(test[features]),columns = test[features].columns)

這樣行嗎? 您有使用批處理的理由嗎?

我遇到的問題是由於from sklearn.preprocessing import StandardScaler更改了數據的維度。 我沒有使用StandardScaler ,而是對(50k,(784,1))暗淡數據集中的每個輸入使用了preprocessing.scale 也就是說,我對axis = 1上的每個(784,1)數據使用了scale函數,並使用for循環將它們相加。 這減慢了程序的運行速度,但是起作用了。 如果有人知道更好的方法,請在答案部分中告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM