首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于多整数输出的神经网络

用于多整数输出的神经网络
EN

Data Science用户
提问于 2018-10-03 15:02:40
回答 3查看 10.3K关注 0票数 7

我有一个数据集,包含135个输入特性和132个要预测的输出值。输入特性都是数值浮点值,每个输出值都是0,1,2,3,4之间的整数。

我对数据科学和机器学习基本上是新手,因此我需要了解哪种神经网络模型(回归或分类)最适合这类数据。一方面,输出值表示不同的类,但我不确定单个神经网络如何能够从相同的输入数据中预测多个类。

EN

回答 3

Data Science用户

回答已采纳

发布于 2018-10-03 16:03:16

欢迎来到现场!

我认为你需要知道的定义你的任务的关键词是:多目标分类或回归。

您可以在这个链接中找到一个解释和一些可能的技术。

对于神经网络:

关键是要记住,最后一层应该有线性激活(即根本没有激活)。

根据您的要求,输入层的形状将是向量(135 )和输出(132,)。

回归问题常用的损失函数是均方误差(MSE)。下面是一个使用Keras的多维回归示例:

代码语言:javascript
运行
复制
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')
票数 2
EN

Data Science用户

发布于 2018-10-03 15:07:22

看看用于分类的输出层的softmax激活函数。

票数 1
EN

Data Science用户

发布于 2019-12-06 18:17:03

Keras 功能API允许轻松添加多个目标。

尝试这种方法有点让人望而生畏,因为在线上对这种技术并没有太多的好例子。下面我发布了一个基于波士顿数据的简单模型,它展示了如何使用Keras实现多目标(或多输出)模型。另见这里

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/39116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档