[英]Is it possible to apply sklearn.preprocessing.LabelEncoder() on a 2D list?
[英]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.