Как сделать Keras Neural Net лучше, чем логистическая регрессия по данным Iris

Я сравниваю Keras Neural-Net с простой логистической регрессией от Scikit-learn по данным IRIS. Я ожидаю, что Keras-NN будет работать лучше, как было предложено на этом посту .

Но почему, подражая коду, результат Keras-NN ниже логистической регрессии?

import seaborn as sns import numpy as np from sklearn.cross_validation import train_test_split from sklearn.linear_model import LogisticRegressionCV from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.utils import np_utils # Prepare data iris = sns.load_dataset("iris") X = iris.values[:, 0:4] y = iris.values[:, 4] # Make test and train set train_X, test_X, train_y, test_y = train_test_split(X, y, train_size=0.5, random_state=0) ################################ # Evaluate Logistic Regression ################################ lr = LogisticRegressionCV() lr.fit(train_X, train_y) pred_y = lr.predict(test_X) print("Test fraction correct (LR-Accuracy) = {:.2f}".format(lr.score(test_X, test_y))) ################################ # Evaluate Keras Neural Network ################################ # Make ONE-HOT def one_hot_encode_object_array(arr): '''One hot encode a numpy array of objects (eg strings)''' uniques, ids = np.unique(arr, return_inverse=True) return np_utils.to_categorical(ids, len(uniques)) train_y_ohe = one_hot_encode_object_array(train_y) test_y_ohe = one_hot_encode_object_array(test_y) model = Sequential() model.add(Dense(16, input_shape=(4,))) model.add(Activation('sigmoid')) model.add(Dense(3)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam') # Actual modelling model.fit(train_X, train_y_ohe, verbose=0, batch_size=1) score, accuracy = model.evaluate(test_X, test_y_ohe, batch_size=16, verbose=0) print("Test fraction correct (NN-Score) = {:.2f}".format(score)) print("Test fraction correct (NN-Accuracy) = {:.2f}".format(accuracy)) 

Я использую эту версию Keras

 In [2]: keras.__version__ Out[2]: '1.0.1' 

Результат показывает:

 Test fraction correct (LR-Accuracy) = 0.83 Test fraction correct (NN-Score) = 0.75 Test fraction correct (NN-Accuracy) = 0.60 

Согласно этому сообщению , точность Keras должна быть 0,99. Что пошло не так?

2 Solutions collect form web for “Как сделать Keras Neural Net лучше, чем логистическая регрессия по данным Iris”

Число эпох по умолчанию было уменьшено с 100 в Keras версии 0 до 10 в версии Keras 1, только что выпущенной в этом месяце (апрель 2016 года). Пытаться:

 model.fit(train_X, train_y_ohe, verbose=0, batch_size=1, nb_epoch=100) 

Ваша нейронная сеть довольно проста. Попробуйте создать глубокую нейронную сеть, добавив в нее больше нейронов и слоев. Кроме того, важно масштабировать свои функции. Попробуйте инициализатор glorot_uniform . И последнее, но не менее важное: увеличить эпоху и посмотреть, уменьшается ли убыток с каждой эпохой.

Итак, вот вы идете:

 model = Sequential() model.add(Dense(input_dim=4, output_dim=512, init='glorot_uniform')) model.add(PReLU(input_shape=(512,))) model.add(BatchNormalization((512,))) model.add(Dropout(0.5)) model.add(Dense(input_dim=512, output_dim=512, init='glorot_uniform')) model.add(PReLU(input_shape=(512,))) model.add(BatchNormalization((512,))) model.add(Dropout(0.5)) model.add(Dense(input_dim=512, output_dim=512, init='glorot_uniform')) model.add(PReLU(input_shape=(512,))) model.add(BatchNormalization((512,))) model.add(Dropout(0.5)) model.add(Dense(input_dim=512, output_dim=512, init='glorot_uniform')) model.add(PReLU(input_shape=(512,))) model.add(BatchNormalization((512,))) model.add(Dropout(0.5)) model.add(Dense(input_dim=512, output_dim=512, init='glorot_uniform')) model.add(PReLU(input_shape=(512,))) model.add(BatchNormalization((512,))) model.add(Dropout(0.5)) model.add(Dense(input_dim=512, output_dim=3, init='glorot_uniform')) model.add(Activation('softmax')) 

Это достигает около 0,97 в 120-ю эпоху

  • Использование срезов в Python
  • Как сделать Onehotencoding в Sklearn Pipeline
  • Использование функции prec_proba () RandomForestClassifier безопасным и правильным способом
  • Как импортировать файл данных csv в scikit-learn?
  • Какие функции выбирает fit_transform?
  • sklearn и большие наборы данных
  • Как читать в списке краев, чтобы сделать скудную разреженную матрицу
  • scikit изучает создание фиктивных переменных
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.