我用R实现了简单的神经网络,但这是我第一次使用Keras这样做,所以我会很感激一些建议。
我在Keras开发了一个神经网络功能来预测汽车销售(数据集可用here)。 CarSales 是因变量。
据我所知,Keras用于开发神经网络用于分类目的而不是回归。在我到目前为止看到的所有例子中,输出都在0和1之间。
这是我开发的代码,您将看到我正在使用'sigmoid'函数进行输出:
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense
from tensorflow.python.keras.wrappers.scikit_learn import KerasRegressor
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
import os;
path="C:/Users/cars.csv"
os.chdir(path)
os.getcwd()
#Variables
dataset=np.loadtxt("cars.csv", delimiter=",")
x=dataset[:,0:5]
y=dataset[:,5]
y=np.reshape(y, (-1,1))
scaler = MinMaxScaler()
print(scaler.fit(x))
print(scaler.fit(y))
xscale=scaler.transform(x)
yscale=scaler.transform(y)
model = Sequential()
model.add(Dense(12, input_dim=5, kernel_initializer='normal', activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()
model.compile(loss='mse', optimizer='adam', metrics=['mse','mae','mape','cosine','accuracy'])
model.fit(xscale, yscale, epochs=150, batch_size=50, verbose=1, validation_split=0.2)
正如您所看到的,我使用MaxMinScaler来绑定变量,从而将输出绑定在0和1之间。
当我生成150个纪元时, mean_squared_error 和 mean_absolute_error 等值非常低。但是,mean_absolute_percentage_error非常高 - 但我怀疑在评估sigmoid输出时这不是一个好的指标。
将输出变量绑定在0和1之间,然后运行模型是否可以尝试使用神经网络预测区间变量?
答案 0 :(得分:1)
将输出变量绑定在0和1之间,然后运行模型是否可以尝试使用神经网络预测区间变量?
如果您知道输出可以提前采用的值范围,我认为这可以工作。这当然不常见。
使用以下代码,您实际上是在作弊。您正在使用所有数据(训练和验证)来计算缩放器的边界,而只应使用训练数据。
dataset=np.loadtxt("cars.csv", delimiter=",")
x=dataset[:,0:5]
y=dataset[:,5]
y=np.reshape(y, (-1,1))
scaler = MinMaxScaler()
print(scaler.fit(x))
print(scaler.fit(y))
xscale=scaler.transform(x)
yscale=scaler.transform(y)
如果你没有这样作弊,你可能会在验证数据中获得超出界限的值。如果你仍然使用sigmoid,你将无法做出正确的预测(如果根据训练数据确定的界限进行缩放,则应该在[0, 1]
之外)。
如Hemen建议的那样,简单地以回归任务的线性层结束更为常见。
您的学习过程仍然可以将训练数据中的输出扩展到[0, 1]
,但是,如果训练数据外部的输出略微超过在1.1
中观察到的所有值,则可以将其映射到html {
background: linear-gradient(45deg, #17ead9, #6078ea);
height: 100vh;
margin: 0;
background-attachment: fixed;
}
。培训数据。