微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更改 LabeledPoint RDD

如何解决如何更改 LabeledPoint RDD

我有大量数据作为分配给七个不同整数标签的 LabeledPoint RDD。

 [LabeledPoint(5.0,[2590.0,56.0,2.0,212.0,-6.0,390.0,220.0,235.0,151.0,6225.0]),LabeledPoint(2.0,[2804.0,139.0,9.0,268.0,65.0,3180.0,234.0,238.0,135.0,6121.0])....

我需要将此问题设为二进制以通过 MLLib 中的 BoostedGradientTrees,因此我希望所有标签为 2.0 的特征为 1.0,否则为 0.0。我是 RDD 的新手,我一生都无法弄清楚如何在不遇到 OutOfMemory 错误的情况下更改标签。我尝试了几种不同的方法,我认为这样的方法最简单:

def to_binary(Data):
    Datazero = Data.filter(lambda x: (x != 2.0,y))
    Data = Data.subtract(Datazero)
    Datazero = Datazero.map(lambda x:(0.0,y))
    Data = Data.map(lambda x: (1.0,y))
    Data = Datazero.union(Data)
    
    return Data

但显然这会返回一个错误,因为我不知道如何使用 LabeledPoint 对象。

解决方法

无需定义辅助函数,单独过滤两种情况。函数式 lambda 环境支持内部 if-else 环境:

Data = Data.map(lambda point : LabeledPoint(1,point.features) if point.label == 2.0 \
                         else LabeledPoint(0,point.features))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。