我有一个数据集,包含135个输入特性和132个要预测的输出值。输入特性都是数值浮点值,每个输出值都是0,1,2,3,4之间的整数。
我对数据科学和机器学习基本上是新手,因此我需要了解哪种神经网络模型(回归或分类)最适合这类数据。一方面,输出值表示不同的类,但我不确定单个神经网络如何能够从相同的输入数据中预测多个类。
发布于 2018-10-03 16:03:16
欢迎来到现场!
我认为你需要知道的定义你的任务的关键词是:多目标分类或回归。
您可以在这个链接中找到一个解释和一些可能的技术。
对于神经网络:
关键是要记住,最后一层应该有线性激活(即根本没有激活)。
根据您的要求,输入层的形状将是向量(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')
发布于 2018-10-03 15:07:22
看看用于分类的输出层的softmax激活函数。
发布于 2019-12-06 18:17:03
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))
https://datascience.stackexchange.com/questions/39116
复制相似问题