python - भविष्य की तारीखों या घटनाओं के पूर्वानुमान के लिए केरस मॉडल का उपयोग कैसे करें?



python-3.x python-2.7 (1)

ठीक है, आपको एक stateful=True मॉडल की आवश्यकता है, इसलिए आप इसे अगले प्राप्त करने के लिए एक के बाद एक भविष्यवाणी खिला सकते हैं और मॉडल को यह सोचकर रख सकते हैं कि प्रत्येक इनपुट एक नया अनुक्रम नहीं है, लेकिन पिछले की अगली कड़ी है।

कोड और प्रशिक्षण को ठीक करना

मैं कोड में देखता हूं कि आपके y को एक शिफ्ट x (अगले चरणों की भविष्यवाणी के लिए एक अच्छा विकल्प) बनाने का प्रयास है। लेकिन यहां प्रीप्रोसेसिंग में एक बड़ी समस्या यह भी है:

training_set = df_train.values
training_set = min_max_scaler.fit_transform(training_set)

x_train = training_set[0:len(training_set)-1]
y_train = training_set[1:len(training_set)]
x_train = np.reshape(x_train, (len(x_train), 1, 1))

LSTM परतों के लिए डेटा को आकार (number_of_sequences, number_of_steps,features) LSTM , LSTM (number_of_sequences, number_of_steps,features) रूप में होना चाहिए।

तो, आप स्पष्ट रूप से केवल 1 चरण के अनुक्रम बना रहे हैं, जिसका अर्थ है कि आपका LSTM अनुक्रम बिल्कुल नहीं सीख रहा है। (केवल एक चरण के साथ कोई अनुक्रम नहीं है)।

यह मानते हुए कि आपका डेटा 1 सुविधा वाला एक एकल अनुक्रम है, इसे निश्चित रूप से (1, len(x_train), 1) रूप में आकार दिया जाना चाहिए।

स्वाभाविक रूप से, y_train आकार समान होना चाहिए।

यह, अपनी बारी में, यह आवश्यक होगा कि आपकी LSTM परतें return_sequences=True - y बनाने का एकमात्र तरीका चरणों में लंबाई हो। इसके अलावा, एक अच्छी भविष्यवाणी होने के लिए, आपको अधिक जटिल मॉडल की आवश्यकता हो सकती है (क्योंकि अब यह ट्रूली सीखना होगा)।

ऐसा किया जाता है, आप अपने मॉडल को तब तक प्रशिक्षित करते हैं जब तक आपको संतोषजनक परिणाम न मिल जाए।

भविष्य का पूर्वानुमान करना

भविष्य की भविष्यवाणी के लिए, आपको stateful=True एलएसटीएम परतों की आवश्यकता होगी।

कुछ भी करने से पहले, आप मॉडल की स्थिति को रीसेट करते हैं: model.reset_states() - हर बार जब आप एक नए अनुक्रम को एक स्टेटफुल मॉडल में इनपुट कर रहे होते हैं।

फिर, पहले आप पूरे X_train भविष्यवाणी करते हैं (यह मॉडल के लिए यह समझने के लिए आवश्यक है कि यह अनुक्रम के किस बिंदु पर है, तकनीकी शब्दों में: एक राज्य बनाने के लिए)।

predictions = model.predict(`X_train`) #this creates states

और अंत में आप एक लूप बनाते हैं जहां आप पिछले भविष्यवाणी के अंतिम चरण से शुरू करते हैं:

future = []
currentStep = predictions[:,-1:,:] #last step from the previous prediction

for i in range(future_pred_count):
    currentStep = model.predict(currentStep) #get the next step
    future.append(currentStep) #store the future steps    

#after processing a sequence, reset the states for safety
model.reset_states()

उदाहरण

यह कोड 2-फीचर अनुक्रम, एक स्थानांतरित भविष्य के कदम की भविष्यवाणी और एक विधि है जो इस उत्तर से थोड़ा अलग है, लेकिन एक ही सिद्धांत पर आधारित है।

मैंने दो मॉडल (एक stateful=False , हर बार राज्यों को रीसेट करने की आवश्यकता के बिना प्रशिक्षण के लिए - जब आप एक नया अनुक्रम शुरू कर रहे हैं तो राज्यों को रीसेट करना कभी न भूलें - और दूसरा stateful=True मॉडल से वेट कॉपी करते हुए, के लिए भविष्य का पूर्वानुमान करना)

https://github.com/danmoller/TestRepo/blob/master/TestBookLSTM.ipynb

यहाँ मेरा कोड सामने प्रशिक्षण पूरा मॉडल और इसे बचाने के लिए है।

num_units = 2
activation_function = 'sigmoid'
optimizer = 'adam'
loss_function = 'mean_squared_error'
batch_size = 10
num_epochs = 100

# Initialize the RNN
regressor = Sequential()

# Adding the input layer and the LSTM layer
regressor.add(LSTM(units = num_units, activation = activation_function, input_shape=(None, 1)))

# Adding the output layer
regressor.add(Dense(units = 1))

# Compiling the RNN
regressor.compile(optimizer = optimizer, loss = loss_function)

# Using the training set to train the model
regressor.fit(x_train, y_train, batch_size = batch_size, epochs = num_epochs)
regressor.save('model.h5')

उसके बाद मैंने देखा है कि ज्यादातर लोग हमारे परीक्षण को देखने के लिए टेस्ट डेटासेट का सुझाव देते हैं जिसे मैंने भी प्रयास किया है और अच्छा परिणाम मिला है।

लेकिन समस्या मेरे द्वारा बनाए गए मॉडल के उपयोग में है। मैं अगले 30 दिनों या हर मिनट के लिए पूर्वानुमान लगाना चाहता हूं। अब मेरे पास प्रशिक्षित मॉडल है, लेकिन मुझे यह नहीं मिल रहा है कि मैं क्या कर सकता हूं या अगले 30 दिनों या एक मिनट के लिए मॉडल का उपयोग करने और कीमतों का पूर्वानुमान लगाने के लिए मैं किस कोड का उपयोग करूंगा।

कृपया मुझे बाहर का रास्ता सुझाएं। मैं एक सप्ताह से इस समस्या पर अड़ा हुआ हूं और कोई सफल प्रयास नहीं कर पा रहा हूं।

यहां रिपॉजिटरी का लिंक दिया गया है, जहां कोई पूरा रन करने योग्य कोड, मॉडल और डेटासेट पा सकता है। माय रिपोजिटरी लिंक





keras