如何将包含字符串列表的 numpy 数组转换为包含零和一列表的数组?
Posted
技术标签:
【中文标题】如何将包含字符串列表的 numpy 数组转换为包含零和一列表的数组?【英文标题】:How can I convert a numpy array containing a list of strings into an array containing a list of zeros and ones? 【发布时间】:2018-12-30 01:52:56 【问题描述】:现在我有这个 numpy 数组,其中包含对电子邮件是 'spam' 还是 'ham' 的预测。所以基本上是垃圾邮件预测模型的结果。我想与一个包含所用测试集类的数组进行比较。当我对它们使用MultinominalNB.score()
方法时,我收到一个错误,因为它是为了比较浮点值而不是字符串。
那么如何根据列表条目是 'spam' 还是 'ham' 将这两个数组更改为浮点值?更好的是,还有其他更好的方法来定量衡量模型的质量吗?
【问题讨论】:
你能举一些例子数据吗? array(['ham', 'spam', 'ham', 'spam', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham' , '火腿', '火腿', '火腿', '火腿', '火腿', '火腿', '火腿', '火腿', '火腿', '垃圾邮件', '火腿', '火腿', ' spam', 'ham', 'ham', 'spam', 'ham', 'ham', 'ham', 'ham', 'ham'....], dtype=object)例如, 是预测数组(['ham', 'spam', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', “火腿”、“火腿”、“火腿”、“火腿”、“火腿”、“火腿”、“火腿”、“火腿”、“火腿”、“垃圾邮件”、“火腿”、“火腿”、“垃圾邮件” '....], dtype='a == 'ham'
呢?
我尝试使用 for a 循环迭代地更改它们,如下所示:for c, x in test_classes: if x == 'ham': test_classes[c] = 0,但我得到一个 ValueError:需要解压的值太多(预期为 2)
@AhmedSamir 如果您有其他信息,请编辑您的问题。人们倾向于忽略 cmets,您无法在评论中正确格式化代码。
【参考方案1】:
假设你已经获得了y_true
和y_predicted
然后使用这个:
import numpy as np
y_test = np.array(['ham', 'spam', 'ham', 'spam', 'ham', 'ham', 'ham', 'ham',
'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham',
'ham', 'ham', 'ham', 'spam','ham', 'ham', 'spam'], dtype=object)
y_predicted = np.array(['ham', 'spam', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham',
'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham',
'ham', 'ham', 'ham', 'spam','ham', 'ham', 'spam'], dtype=object)
y_test[y_test == 'ham']=0
y_test[y_test == 'spam']=1
y_predicted[y_predicted == 'ham']=0
y_predicted[y_predicted == 'spam']=1
结果:
print(y_test=
#array([0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=object)
print(y_predicted)
#array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1], dtype=object)
【讨论】:
以上是关于如何将包含字符串列表的 numpy 数组转换为包含零和一列表的数组?的主要内容,如果未能解决你的问题,请参考以下文章
包含具有可变形状的多维 numpy 数组的 numpy 数组