我有一个数据集,其中包含要预测的 135 个输入特征和 132 个输出值。输入特征都是数字浮点值,每个输出值都是 [0,1,2,3,4] 之间的整数。
我基本上是数据科学和机器学习的新手,因此我需要了解哪种神经网络模型(回归或分类)最适合此类数据。一方面,输出值代表不同的类别,但我不确定单个神经网络如何从相同的输入数据中预测多个类别。
我有一个数据集,其中包含要预测的 135 个输入特征和 132 个输出值。输入特征都是数字浮点值,每个输出值都是 [0,1,2,3,4] 之间的整数。
我基本上是数据科学和机器学习的新手,因此我需要了解哪种神经网络模型(回归或分类)最适合此类数据。一方面,输出值代表不同的类别,但我不确定单个神经网络如何从相同的输入数据中预测多个类别。
欢迎来到本站!
我认为定义你的任务需要知道的关键词是:多目标分类或回归。
您可以在此链接中找到解释和一些可能的技术。
对于神经网络:
关键是要记住最后一层应该有线性激活(即根本没有激活)。
根据您的要求,输入层的形状将是向量 (135,) 和输出 (132,)。
用于回归问题的常用损失函数是均方误差 (MSE)。这是使用 Keras 进行多维回归的示例:
model = Sequential()
model.add(Dense(200, input_dim = (135,)))
model.add(Activation('relu'))
model.add(Dense(200))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(132))
model.compile(loss='mean_absolute_error', optimizer='Adam')
看一下用于分类的输出层的 softmax 激活函数。
Keras函数式 API允许轻松添加多个目标。
尝试这个有点令人生畏,因为网上没有太多关于这种技术的好例子。下面我发布一个基于波士顿数据的简单模型,展示了如何使用 Keras 实现多目标(或多输出)模型。另请参见此处。
import numpy as np
import pandas as pd
from keras.datasets import boston_housing
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
# Standardise data
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std
# Add an additional target (just add some random noise to the original one)
import random
train_targets2 = train_targets + random.uniform(0, 0.1)
test_targets2 = test_targets + random.uniform(0, 0.1)
# https://keras.io/models/model/
from keras import models
from keras import layers
from keras.layers import Input, Dense
from keras.models import Model
from keras import regularizers
from keras.layers.normalization import BatchNormalization
# Input and model architecture
Input_1=Input(shape=(13, ))
x = Dense(1024, activation='relu', kernel_regularizer=regularizers.l2(0.05))(Input_1)
x = Dense(512, activation='relu', kernel_regularizer=regularizers.l2(0.05))(x)
x = Dense(256, activation='relu', kernel_regularizer=regularizers.l2(0.05))(x)
x = Dense(128, activation='relu', kernel_regularizer=regularizers.l2(0.05))(x)
x = Dense(8, activation='relu', kernel_regularizer=regularizers.l2(0.05))(x)
# Outputs
out1 = Dense(1)(x)
out2 = Dense(1)(x)
# Compile/fit the model
model = Model(inputs=Input_1, outputs=[out1,out2])
model.compile(optimizer = "rmsprop", loss = 'mse')
# Add actual data here in the fit statement
model.fit(train_data, [train_targets,train_targets2], epochs=500, batch_size=4, verbose=0, validation_split=0.8)
# Predict / check type and shape
preds = np.array(model.predict(test_data))
#print(type(preds), preds.shape)
# is a 3D numpy array
# get first part of prediction (column/row/3D layer)
preds0 = preds[0,:,0]
# second part
preds1 = preds[1,:,0]
# Check MAE
from sklearn.metrics import mean_absolute_error
print(mean_absolute_error(test_targets, preds0))
print(mean_absolute_error(test_targets2, preds1))