データセットが大きすぎるため、一度にすべてをロードできません。特徴を正規化し、抽出し、バッチでトレーニングする必要があります。データセットとしてアイリスを選択し、Python でscikit-learn を選択して、アイデアを検証しました。最初のステップでは、を使用してバッチを正規化standarScaler.particial_fit()
しました。
def batch_normalize(data):
scaler = StandardScaler()
dataset=[]
for i in data:
sc = scaler.partial_fit(i)
for i in data:
dataset.append(scaler.transform(i))
return dataset
2番目のステップでは、次を使用して特徴を抽出しましたIncrementalPCA.particial_fit()
def batch_feature_extracrton(dataset):
ipca = IncrementalPCA(n_components=4)
dataset_1=[]
for i in dataset:
ipca.partial_fit(i)
for i in dataset:
dataset_1.extend(ipca.transform(i))
return dataset_1
3 番目のステップでは、次を使用してデータをトレーニングしました。MLPClassifier.particial_fit()
def batch_classify(X_train, X_test, y_train, y_test):
batch_mlp = MLPClassifier(hidden_layer_sizes=(50,10), max_iter=500,
solver='sgd', alpha=1e-4, tol=1e-4, random_state=1,
learning_rate_init=.01)
for i,j in zip(X_train,y_train):
batch_mlp.partial_fit(i, j,[0,1,2])
print("batch Test set score: %f" % batch_mlp.score(X_test, y_test))
以下は、上記で定義された 3 つの関数を呼び出すメイン関数です。
def batch(iris,batch_size):
dataset=batch_normalize(list(chunks(iris.data, batch_size)))
dataset=batch_feature_extracrton(dataset)
X_train, X_test, y_train, y_test = train_test_split(dataset, iris.target, test_size=0.2)
batch_data = list(chunks(X_train, batch_size))
batch_label = list(chunks(y_train, batch_size))
batch_classify(batch_data, X_test, batch_label, y_test)
ただし、この方法では、正規化と特徴抽出を含むすべてのステップで、データのすべてのバッチを 2 回実行する必要があります。プロセスを簡素化する他の方法はありますか? (たとえば、バッチはステップ 1 から 3 に直接進むことができます)