猿问

简单机器模型的精度不好?如何调试?

我正在尝试构建一个机器学习模型,尽管答案相当简单,但结果确实很糟糕。我知道我做错了什么,但不确定在哪里。

以下是我正在做的事情:

  1. 我有一个公司财务数据集。

  2. 为了方便起见,我试图预测毛利润(总收入 - 收入成本)

  3. 为了使它更容易,我实际上正在自己将该值计算到熊猫列中df['grossProfit'] = df['totalRevenue'] - df['costOfRevenue']

  4. 为了使它有点挑战性,我有一个名为exchange的列,它是数字格式的类别(1,2,3等)。

我的目标是简单地预测总利润,我认为这很容易,因为100%的数据计算它在我的数据集中,但当我运行模型时,我得到高达6%的准确率。我预计它会接近100%,因为模型应该计算出总收入+收入成本=总利润。

这是我的数据:

    grossProfit totalRevenue    Exchange    costOfRevenue

0   9.839200e+10    2.601740e+11    NASDAQ  1.617820e+11

1   9.839200e+10    2.601740e+11    NASDAQ  1.617820e+11

2   1.018390e+11    2.655950e+11    NASDAQ  1.637560e+11

3   1.018390e+11    2.655950e+11    NASDAQ  1.637560e+11

4   8.818600e+10    2.292340e+11    NASDAQ  1.410480e+11

... ... ... ... ...

186 4.224500e+10    9.113400e+10    NYSE    4.888900e+10

187 4.078900e+10    9.629300e+10    NYSE    5.550400e+10

188 3.748200e+10    8.913100e+10    NYSE    5.164900e+10

189 3.397500e+10    8.118600e+10    NYSE    4.721100e+10

190 3.597700e+10    8.586600e+10    NYSE    4.988900e+10

191 rows × 4 columns


慕盖茨4494581
浏览 59回答 1
1回答

慕少森

对于初学者:您处于回归设置中,其中准确性毫无意义(它仅用于分类问题)。从模型编译中删除,不要为此烦恼 - 您应该使用与损失相同的数量(此处为MSE)来评估模型的性能。metrics=['accuracy']出于同样的原因(回归问题),您不应该对最后一个图层使用激活,而应该对最后一个图层使用激活(离开,就像执行该工作一样,因为这是 Keras 图层的默认激活)。sigmoidlinearDense(1)linear具有线性激活的中间层(如您在这里的中间层)每个都只是一个单节点线性层(即几乎没有);向所有中间层添加激活(就像对第一层所做的那样)。relu总而言之,这是实验的起点:model = tf.keras.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(numInputColumns,)))model.add(layers.Dense(128, activation='relu'))model.add(layers.Dense(128, activation='relu'))model.add(layers.Dense(128, activation='relu'))model.add(layers.Dense(1))model.compile(loss='mean_squared_error', optimizer='adam')当你完成这一部分时,你最终会得出一个不幸的结论,即与分类问题相反,我们可以立即说准确性是否“好”,“不够好”,“坏”等,回归问题的性能指标,如MSE,不会让自己进入如此简单的评估;更糟糕的是,您的 MSE 是根据您缩放的数据计算的。阅读我的答案 如何在Keras Regressor中解释MSE 了解如何计算初始未缩放数据中的MSE,获取其平方根,从而能够以原始数据的单位进行比较,以查看它是否适合您的情况(ML教程中通常省略的一部分)...y
随时随地看视频慕课网APP

相关分类

Python
我要回答