Machine learning 用Keras提高神经网络的精度
下面是我试图做的代码,但我的准确率总是低于50%,所以我想知道我应该如何解决这个问题?我想做的是使用1885年的第一个每日单位销售数据作为输入,使用1885年的剩余每日单位销售数据作为输出。在对这些数据进行训练之后,我需要用它来预测未来20多个日销售量 我在这里使用的数据在这个链接中提供 这是我得到的 情节也很奇怪: 两个错误:Machine learning 用Keras提高神经网络的精度,machine-learning,keras,neural-network,Machine Learning,Keras,Neural Network,下面是我试图做的代码,但我的准确率总是低于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))