首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keras的准确率没有提高

keras的准确率没有提高
EN

Stack Overflow用户
提问于 2019-09-04 17:29:43
回答 1查看 156关注 0票数 0

我正在将Keras与Random forest进行比较。我跟随研究论文,它给出了keras模型比随机森林模型更高的精度,但当我实现它时,没有给出我。RF* 0.997 0.0006的精度和标准Keras 0.0079的精度

代码语言:javascript
复制
#Importing dataset 
    dataset = pd.read_csv('KDD_Dataset.csv')
    X = dataset.iloc[:, :-1].values
    y = dataset.iloc[:, 41:42].values

    from sklearn.preprocessing import LabelEncoder
    labelencoder_X = LabelEncoder()
    X[:,0] = labelencoder_X.fit_transform(X[:,0])
    X[:,1] = labelencoder_X.fit_transform(X[:,1])
    X[:,2] = labelencoder_X.fit_transform(X[:,2])
    #
    from sklearn.preprocessing import OneHotEncoder
    onehotencoder_0 = OneHotEncoder(categorical_features=[0])
    onehotencoder_1 = OneHotEncoder(categorical_features=[1])
    onehotencoder_2 = OneHotEncoder(categorical_features=[2])
    X = onehotencoder_0.fit_transform(X).toarray()
    X = onehotencoder_1.fit_transform(X).toarray()
    X = onehotencoder_2.fit_transform(X).toarray()
     Encoding categorical data y
    from sklearn.preprocessing import LabelEncoder
    labelencoder_y = LabelEncoder()
    y = labelencoder_y.fit_transform(y)
    max(y)

将数据集拆分为训练集和测试集

代码语言:javascript
复制
        #from sklearn.cross_validation import train_test_split
          from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                        test_size = 0.2, 
                                                        random_state = 1)
    """sc_y = StandardScaler()
    y_train = sc_y.fit_transform(y_train)"""

#Feature Scaling
       from sklearn.preprocessing import StandardScaler
       sc = StandardScaler()
       X_train = sc.fit_transform(X_train)
       X_test = sc.transform(X_test)

随机森林分类与训练集的拟合

代码语言:javascript
复制
        from sklearn.ensemble import RandomForestClassifier
    classifier = RandomForestClassifier(n_estimators = 500, 
                                        criterion = 'entropy', 
                                        random_state = 0,
                                        oob_score = True)
    classifier.fit(X_train, y_train)

    y_pred = classifier.predict(X_test)

制作混淆矩阵

代码语言:javascript
复制
      from sklearn.metrics import confusion_matrix
    cm = confusion_matrix(y_test, y_pred)


    from sklearn.model_selection import cross_val_score
    accuracies = cross_val_score(estimator= classifier, 
                                 X = X_train,
                                 y = y_train,
                                 cv=10)

    accuracies_mean = accuracies.mean()
    accuracies_std = accuracies.std()

    print("Accuracy and STD of RF")
    print(accuracies_mean)
    print(accuracies_std)

Keras模型

代码语言:javascript
复制
    model = Sequential()
    model.add(Dense(12, input_dim=45, activation='relu'))
    model.add(Dense(8, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))


    from keras import optimizers

    numpy.random.seed(7)
    import datetime, os
    logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
    tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
    sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

    model.compile(loss='mean_squared_error', optimizer=sgd, metrics=['accuracy'])

    sgd = optimizers.SGD(lr=0.01, clipnorm=1.)


              model.fit(X_train, y_train,
              batch_size=50000,
              epochs=10,
              verbose=1,
              validation_data=(X_test, y_test),
              callbacks=None)

    y_pred = model.predict(X_test)

    score = model.evaluate(X_test, y_test, verbose=1)

建议我如何提高keras的准确性

EN

回答 1

Stack Overflow用户

发布于 2019-09-04 19:26:37

您处于分类(而不是回归)设置中,因此您应该在Keras中使用MSE 作为损失函数(用于回归问题);将模型编译更改为

代码语言:javascript
复制
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])

有关更多详细信息,请参阅What function defines accuracy in Keras when the loss is mean squared error (MSE)?,尽管是在“反向”设置中(尝试在回归问题中使用准确性)。

您的batch_size=50000看起来非常高,但如果您没有遇到内存问题,它可能会这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57785455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档