我正在开始一个机器学习项目(为了好玩!),但我不知道从哪里开始......我对 ML 相当陌生,所以任何提示都值得赞赏。
我有一个相对较大的数据集,其中每个输入都是大约 300 个整数(主要是零)的列表。输出是 20 个整数的列表。目标是在给定随机输入的情况下预测输出(显然)。我不确定什么是最好的方法。我已经开始阅读一些神经网络,这似乎是解决此类问题的好方法,但似乎有一系列不同的激活等(不确定它实际上是如何调用的)所以我不太确定该怎么办。
关于研究方向的任何提示?
非常感谢!
我正在开始一个机器学习项目(为了好玩!),但我不知道从哪里开始......我对 ML 相当陌生,所以任何提示都值得赞赏。
我有一个相对较大的数据集,其中每个输入都是大约 300 个整数(主要是零)的列表。输出是 20 个整数的列表。目标是在给定随机输入的情况下预测输出(显然)。我不确定什么是最好的方法。我已经开始阅读一些神经网络,这似乎是解决此类问题的好方法,但似乎有一系列不同的激活等(不确定它实际上是如何调用的)所以我不太确定该怎么办。
关于研究方向的任何提示?
非常感谢!
如果您有多个输出列(目标),您可以选择有限的模型,因为大多数模型预测一个输出列。请参阅sklearn 文档以获得良好的概述。本质上,您处理的是多输出问题。
用于回归的 sklearn 模型只是旨在分别预测每个输出。RegressionChain考虑到先前的预测,尝试一个接一个地连续预测一个目标值。从文档:
可以使用MultiOutputRegressor 将多输出回归支持添加到任何回归器。该策略包括为每个目标拟合一个回归器。由于每个目标仅由一个回归量表示,因此可以通过检查其对应的回归量来获得有关目标的知识。由于 MultiOutputRegressor 适合每个目标一个回归器,它不能利用目标之间的相关性。
Regressor 链(参见 RegressorChain)类似于 ClassifierChain,它是一种将多个回归组合成单个多目标模型的方法,该模型能够利用目标之间的相关性。
如果您想尝试神经网络,您可以使用 Keras 的“功能 API”,它允许您定义多个输出(列)。在这里找到一个最小的例子。简而言之,您需要定义一些输入(矩阵,又称解释变量),您需要分别定义所有输出。输入和输出可以输入到模型定义和模型fit语句中,如下所示。
# 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.2)