【问题标题】:How to deal with name column in Scikitlearn randomforest classifier. python 3如何处理 Scikit Learn 随机森林分类器中的名称列。蟒蛇 3
【发布时间】:2017-06-17 15:16:21
【问题描述】:

我有一个包含 13 列的数据框。在 13 三列中是字符串。一个字符串列是简单的男性和女性,我使用 1 和 0 转换为

pd.get_dummies()

第二列包含三种不同类型的字符串,因此可以使用

轻松转换为数组

从 sklearn.feature_extraction.text 导入 CountVectorizer

完全没有问题。问题是我的第三列也是最后一列包含大量名称。如果我尝试使用 Countvectorizer 进行转换,它会将名称转换为不可读的长字符串。

df['name']=Countvectorizer.fit_transform(df.name)

如果我尝试将其转换回数据帧,如 stackoverflow 页面上的其他示例所示,在这种情况下,我会得到这个

245376 (0, 14297)\t1\n (1, 5843)\t1\n (1, 13365)... 245377 (0, 14297)\t1\n (1, 5843)\t1\n (1, 13365)...

名称:供应商名称,数据类型:对象

接下来的代码会导致内存错误

df['name'] =pd.DataFrame(CV.fit_transform(df.name).toarray(),columns=CV.get_feature_names())

我也看过这个问题。 问题:除了上面提到的以外,还有什么方法最好以数字形式使用此名称列。或任何其他想法如何改进这一点,以便数据完全适合 Randomforest 分类器。因为,Dataframe 包含 123790 行。提前感谢您的帮助或建议。

【问题讨论】:

  • 您要解决什么类型的问题(分类、回归等)?首先,您应该分析您是否确定要在模型中使用name 功能。展示一些样本以及你想用它们做什么。
  • 我想使用 scikitlearn 随机森林创建简单的预测模型。它实际上是分类问题。我有 13 列最后一列是 id。基于 12 列,我想在训练模型后预测 id。此名称列根本不为空。这是最重要的列,我无法删除它。
  • 每行的名称是否唯一?如果不是,并且它们来自一个小集合,那么您可以为它们进行一次热编码。
  • 我试过了,但结果 TypeError: float() argument must be a string or a number, not 'CountVectorizer'
  • 我认为CountVectorizer 在这里不会有任何帮助。请显示一些您尝试过的代码以及一些名称示例。

标签: python scikit-learn random-forest countvectorizer


【解决方案1】:

在将原始名称存储到单独的列表之后,名称是一个独特的东西,并且是一种使用 sklearn.preprocessing.LabelEncoder 的 id。它会自动将名称转换为序列号。

另外,请注意,如果它是一个独特的东西,您应该在预测期间删除名称。

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 2017-05-22
    • 2017-08-25
    • 2015-12-16
    • 2013-04-26
    • 2015-02-20
    • 2015-02-21
    • 2016-06-22
    • 2017-03-26
    相关资源
    最近更新 更多