Machine learning 用Keras提高神经网络的精度

Machine learning 用Keras提高神经网络的精度,machine-learning,keras,neural-network,Machine Learning,Keras,Neural Network,下面是我试图做的代码,但我的准确率总是低于50%,所以我想知道我应该如何解决这个问题?我想做的是使用1885年的第一个每日单位销售数据作为输入,使用1885年的剩余每日单位销售数据作为输出。在对这些数据进行训练之后,我需要用它来预测未来20多个日销售量 我在这里使用的数据在这个链接中提供 这是我得到的 情节也很奇怪: 两个错误: 在回归设置中,精度无意义,例如您的设置(仅对分类设置有意义);参见(使用MAE损失时,参数相同,如此处所示)。您在这里的绩效衡量与您的损失(即MAE)相同 除了

下面是我试图做的代码,但我的准确率总是低于50%,所以我想知道我应该如何解决这个问题?我想做的是使用1885年的第一个每日单位销售数据作为输入,使用1885年的剩余每日单位销售数据作为输出。在对这些数据进行训练之后,我需要用它来预测未来20多个日销售量 我在这里使用的数据在这个链接中提供

这是我得到的

情节也很奇怪:

两个错误:

  • 在回归设置中,精度无意义,例如您的设置(仅对分类设置有意义);参见(使用MAE损失时,参数相同,如此处所示)。您在这里的绩效衡量与您的损失(即MAE)相同

  • 除了分类模型的最后一层,我们从不在任何地方使用
    softmax
    激活;将模型中使用的
    softmax
    激活函数替换为
    relu
    (保持最后一层不变,因为没有激活意味着
    线性
    ,这确实是回归的正确方法)


  • 嗨,保罗,欢迎你。你可以补充一些你想做的事情的澄清吗?输入数据是什么?培训目标是什么?您是否对输入数据和标签进行了可视化,以确保其正确性?您好!谢谢你的回复。我的模型的输入:从第1天到第1885天的每日单位销售额数据,我的模型的输出是从第1886天到第1913天的预测单位每日销售额。但是,我不知道如何训练我的模型,使其最适合提供的输出数据。还有一些分类变量,如部门、地点等。我只是简单地对它们进行了计算,但我不确定我是否走上了正确的道路,因为我得到了建设性的答复(和投票)。提供一个详细的背景,让你想解决你的问题,这会有很大帮助。从你的损失曲线上看,你的模型似乎在学习一些东西,所以你可以试着训练更长的时间。Softmax似乎是针对您的问题的错误激活函数(输出的概率总和为1)。对于每日单位销售额(大于等于0),请坚持使用ReLU。对于预测问题,人们已经使用递归神经网络和LSTM取得了一些成功。如果你认为有一些潜在的动力你想在你的预测中发现和使用,也可以查看库普曼分析。
    import pandas as pd
    import numpy as np
    import keras
    import keras.backend as k
    import tensorflow as tf
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.layers import Dropout
    from keras.callbacks import EarlyStopping
    from sklearn import preprocessing
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    
    data = pd.read_csv('sales_train.csv')
    #Since there are 3 departments and 10 store from  3 different areas, thus I categorized the data into 30 groups and numerize them
    Unique_dept = data["dept_id"].unique()
    Unique_state = data['state_id'].unique()
    Unique_store = data["store_id"].unique()
    data0 = data.copy()
    for i in range(3):
        data0["dept_id"] = data0["dept_id"].replace(to_replace=Unique_dept[i], value = i)
        data0["state_id"] = data0["state_id"].replace(to_replace=Unique_state[i], value = i)
    for j in range(10):
        data0["store_id"] = data0["store_id"].replace(to_replace=Unique_store[j], value = int(Unique_store[j][3]) -1)
    
    # Select the three numerized categorical variables and daily unit sale data
    pt = 6 + 1885 
    X = pd.concat([data0.iloc[:,2],data0.iloc[:, 4:pt]], axis = 1)
    Y = data0.iloc[:, pt:]
    
    # Remove the daily unit sale data that are highly correlated to each other (corr > 0.9)
    correlation = X.corr(method = 'pearson')
    corr_lst = []
    for i in correlation:
        for j in correlation:
            if (i != j) & (correlation[i][j] >= 0.9) & (j not in corr_lst) & (i not in corr_lst):
                corr_lst.append(i)  
    
    x = X.drop(corr_lst, axis = 1)
    x_value = x.values
    y_value = Y.values
    
    sc = StandardScaler()
    X_scale = sc.fit_transform(x_value)
    
    X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(x_value, y_value, test_size=0.2)
    X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)
    print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)
    
    #create model
    model = Sequential()
    #get number of columns in training data
    n_cols = X_train.shape[1]
    #add model layers
    model.add(Dense(32, activation='softmax', input_shape=(n_cols,)))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(32, activation='softmax'))
    model.add(Dense(1))
    
    #compile model using rmsse as a measure of model performance
    model.compile(optimizer='Adagrad', loss= "mean_absolute_error", metrics = ['accuracy'])
    
    #set early stopping monitor so the model stops training when it won't improve anymore early_stopping_monitor = EarlyStopping(patience=3)
    early_stopping_monitor = EarlyStopping(patience=20)
    #train model
    model.fit(X_train, Y_train,batch_size=32, epochs=10, validation_data=(X_val, Y_val))