【问题标题】:Using One-Hot Encoding vector as a feature for machine learning models使用 One-Hot 编码向量作为机器学习模型的特征
【发布时间】:2022-11-28 08:32:34
【问题描述】:

我有一个分类列('session',可以获得这些值之一:[2,4,8]),我想在训练机器学习模型(如 RandomForest 或 MLP)时使用它。

为此,我使用 One-Hot Encode 方法对该功能进行了编码:

df= pd.get_dummies(df, columns=["session"], prefix="Sessions")

我得到了三个新列:Session_2、Session_4、Session_8 而不是旧的会话列。

然后我将这些新的 3 列转换为一个向量(作为列表)并用该列表填充“会话”列:

df['session'] = np.array(df[['Sessions_2', 'Sessions_4', 'Sessions_8']], dtype=object).tolist()

所以,现在数据看起来像:

在尝试训练 ML 模型时,我认为最好使用新的向量“session”列而不是分离的 Session_x 列(否则,对于我们所做的一次性编码!)

但我收到此错误:

ValueError:设置带有序列的数组元素。

我搜索了那个错误,到处都提到根本原因可能是形状不相同或元素具有不同的数据类型......但我的情况并非如此!我验证了所有向量都具有相同的大小并且都具有相同的类型! (我在创建 np 数组时也使用了dtype=object

我相信问题可能在于尝试将 n 元素数组(序列)加载到只有一个浮点数的单个数字槽中! 我尝试了 2 种不同的 ML 模型:RandomForest 和 MLP,但结果仍然相同。

如何让我的 ML 模型使用 One-Hot 编码向量? (首先是正确的方法吗?使用向量?)

【问题讨论】:

    标签: python machine-learning one-hot-encoding


    【解决方案1】:

    您的数据框已经包含分类特征的单热编码,它实际上是三个现有列 Session_2、4、8 的组合。不需要包括那个会话列(对象类型),因为它是多余的和无效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2018-02-25
      • 1970-01-01
      • 2016-03-27
      • 2019-01-03
      • 1970-01-01
      • 2017-04-23
      • 2021-01-14
      相关资源
      最近更新 更多