+-
为什么Keras与随机森林或其他ML算法相比效果不好?

我正在使用keras进行深度学习,并尝试将结果(准确性)与机器学习算法(sklearn)(即random forestk_neighbors)进行比较

似乎keras,我得到的结果最糟。我正在研究简单的分类问题:iris dataset我的keras代码看起来:

samples = datasets.load_iris()
X = samples.data
y = samples.target
df = pd.DataFrame(data=X)
df.columns = samples.feature_names
df['Target'] = y

# prepare data
X = df[df.columns[:-1]]
y = df[df.columns[-1]]

# hot encoding
encoder = LabelEncoder()
y1 = encoder.fit_transform(y)
y = pd.get_dummies(y1).values

# split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

# build model
model = Sequential()
model.add(Dense(1000, activation='tanh', input_shape = ((df.shape[1]-1),)))
model.add(Dense(500, activation='tanh'))
model.add(Dense(250, activation='tanh'))
model.add(Dense(125, activation='tanh'))
model.add(Dense(64, activation='tanh'))
model.add(Dense(32, activation='tanh'))
model.add(Dense(9, activation='tanh'))
model.add(Dense(y.shape[1], activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train)
score, acc = model.evaluate(X_test, y_test, verbose=0)

#results:
#score = 0.77
#acc = 0.711

由于看起来结果不高于0.85,我累了添加层和/或更改每层的单元数和/或更改激活功能(至relu)。

使用sklearn random forestk_neighbors,我得到的结果(在同一数据集上)高于0.95。

我想念什么?

使用sklearn时,我付出了很少的努力并获得了不错的结果;使用keras时,我进行了很多升级,但不如sklearn时。为什么会这样?

如何使用keras获得相同的结果?

3
投票

这里的第一个观察结果是,如今我们[[从不

activation='tanh'用于中间NN层。在此类问题中,我们实际上总是使用 activation='relu'
1
投票
model.add(Dropout(0.2)