机器学习的周期性数据(像度角度 - > 179与-179不同)

 十一月听雨 发布于 2023-02-12 19:37

我正在使用Python进行内核密度估计和高斯混合模型来对多维数据样本的可能性进行排序.每个数据都是一个角度,我不知道如何处理机器学习的角度数据的周期性.

首先,我通过向它们添加360来移除所有负角度,因此所有负面的角度变为正,-179变为181.我相信这优雅地处理-179的情况,类似的情况与179并没有显着差异相似,但它确实不处理像359这样的实例与1不同.

我想到的解决问题的一种方法是保持负值和负值+ 360值并使用两者中的最小值,但这需要修改机器学习算法.

是否有一个很好的预处理解决方案来解决这个问题?什么内置为scipy或scikit?

谢谢!

1 个回答
  • 正如Tal Darom在评论中所写,你可以x用两个特征替换每个周期特征,cos(x)sin(x)在归一化为弧度之后.这解决了359≈1问题:

    >>> def fromdeg(d):
    ...     r = d * np.pi / 180.
    ...     return np.array([np.cos(r), np.sin(r)])
    ... 
    >>> np.linalg.norm(fromdeg(1) - fromdeg(359))
    0.03490481287456796
    >>> np.linalg.norm(fromdeg(1) - fromdeg(180))
    1.9999238461283426
    >>> np.linalg.norm(fromdeg(90) - fromdeg(270))
    2.0
    

    norm(a - b)是矢量a和矢量之间良好的欧几里德距离b.正如您可以使用简单的绘图验证,或者通过意识到这些(cos,sin)对实际上是单位圆上的坐标,这个距离是这两个(cos,sin)向量之间的最大值(和点积最小)当原始角度相差180°时.

    2023-02-12 19:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有