【发布时间】: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