हो सकता है , लेकिन ध्यान दें कि यह उन मामलों में से एक है जहां मशीन लर्निंग का जवाब नहीं है । ऐसे मामलों में सीखने की मशीन और शूहॉर्न मशीन सीखने की प्रवृत्ति है जहां वास्तव में, दलदल मानक नियम-आधारित समाधान तेज, सरल और बस आम तौर पर सही विकल्प हैं: पी।
सिर्फ इसलिए कि आप कर सकते हैं, इसका मतलब यह नहीं है कि आपको चाहिए
संपादित करें : मैंने मूल रूप से इसे "हां, लेकिन ध्यान दें ..." के रूप में लिखा था, लेकिन फिर खुद पर संदेह करना शुरू कर दिया, कभी भी ऐसा नहीं किया। मैंने इसे आज दोपहर में आज़माया और यह निश्चित रूप से उल्लेखनीय है:
import numpy as np
from keras.models import Model
from keras.layers import Input, Dense, Dropout
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from keras.callbacks import EarlyStopping
# Create an input array of 50,000 samples of 20 random numbers each
x = np.random.randint(0, 100, size=(50000, 20))
# And a one-hot encoded target denoting the index of the maximum of the inputs
y = to_categorical(np.argmax(x, axis=1), num_classes=20)
# Split into training and testing datasets
x_train, x_test, y_train, y_test = train_test_split(x, y)
# Build a network, probaly needlessly complicated since it needs a lot of dropout to
# perform even reasonably well.
i = Input(shape=(20, ))
a = Dense(1024, activation='relu')(i)
b = Dense(512, activation='relu')(a)
ba = Dropout(0.3)(b)
c = Dense(256, activation='relu')(ba)
d = Dense(128, activation='relu')(c)
o = Dense(20, activation='softmax')(d)
model = Model(inputs=i, outputs=o)
es = EarlyStopping(monitor='val_loss', patience=3)
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(x_train, y_train, epochs=15, batch_size=8, validation_data=[x_test, y_test], callbacks=[es])
print(np.where(np.argmax(model.predict(x_test), axis=1) == np.argmax(y_test, axis=1), 1, 0).mean())
आउटपुट 0.74576 है, इसलिए यह समय का अधिकतम 74.5% सही ढंग से खोज रहा है। मुझे इसमें कोई संदेह नहीं है कि इसमें सुधार किया जा सकता है, लेकिन जैसा कि मैं कहता हूं कि यह एक usecase नहीं है जिसे मैं एमएल के लिए सुझाऊंगा।
EDIT 2 : वास्तव में मैंने आज सुबह स्केलेर के randomForestClassifier का उपयोग करके इसे फिर से चलाया और इसने बेहतर प्रदर्शन किया:
# instantiation of the arrays is identical
rfc = RandomForestClassifier(n_estimators=1000, verbose=1)
rfc.fit(x_train, y_train)
yhat_proba = rfc.predict_proba(x_test)
# We have some annoying transformations to do because this .predict_proba() call returns the data in a weird format of shape (20, 12500, 2).
for i in range(len(yhat_proba)):
yhat_proba[i] = yhat_proba[i][:, 1]
pyhat = np.reshape(np.ravel(yhat_proba), (12500,20), order='F')
print(np.where(np.argmax(pyhat, axis=1) == np.argmax(y_test, axis=1), 1, 0).mean())
और यहां का स्कोर 94.4% नमूनों का अधिकतम सही ढंग से पहचाना गया है, जो वास्तव में बहुत अच्छा है।