【问题标题】:Reduce data dimensionality using curve fitting使用曲线拟合降低数据维度
【发布时间】:2015-09-03 05:30:48
【问题描述】:

我是机器学习的新手,之前没有使用过 scikit-learn。我正在做一个项目。作为项目的一部分,我需要训练一个机器学习算法来将一些观察结果分类到不同的类中。我已经处理了传感器的观察结果以产生一些数据。但处理后的数据的问题在于,它是一个针对不同观察的不同长度的向量。

这张图片显示了一些数据。绿线是应用高斯滤波器后的原始数据,红线表示对数据的 16 度多项式拟合。第 1 行包含 3 个峰的数据,第 2 行包含 4 个峰的数据,第 3 行包含 5 个峰的数据。我希望能够将数据分类到不同的类中。

我目前计划使用多项式的系数作为我的特征向量。第一行很好,但在峰值数量较多的情况下,多项式拟合不佳,可能无法正确分类。我曾尝试使用更高次的多项式,但它会导致峰值数量较少的情况出现异常。仅仅计算峰的数量不能用于分类,因为这只是几个类别的一个子集,分类还将取决于观察到的峰的相对大小和间距,但在多项式拟合中,此信息不是很清楚更多的峰值。

我想知道有没有

  • 其他一些方法可以帮助我生成特征向量来对数据进行分类,而不是尝试拟合多项式。
  • 一种在 python 中可视化高维数据的方法

编辑:

我现在使用scipy.interpolate.UnivariateSpline 对数据拟合样条曲线而不是多项式,并且它生成的拟合效果要好得多。我现在可以使用结的位置和样条的系数。但是这些向量的长度不是恒定的,即使重复两次相同的观察也是不同的。有人可以建议一种将其映射到恒定长度向量的方法。

【问题讨论】:

    标签: python machine-learning scipy scikit-learn dimensionality-reduction


    【解决方案1】:

    如果您的问题主要是由于样本数量不同,插值而不是重新采样确实是可行的方法。但是,我会使用约束较少的插值技术。如果你有大量的点,即使是线性插值也可以。或者,您可以使用在 scikit learn 中很好地实现的高斯过程回归。您不需要先应用高斯滤波器,因为您使用的是回归。

    查看此链接以获取有关如何应用 GP 进行回归的示例:http://scikit-learn.org/stable/modules/gaussian_process.html

    【讨论】:

    • 问题不在于样本数量的变化,而在于如何得到能够代表数据的合适的特征向量。
    • 这取决于相关信息在数据中的表示位置(极值数、幅度、相移等)。但是,您的信号很简单,将原始信号用作分类器的输入可能会很好。在这种情况下,只需重新采样到固定向量长度就足够了。
    • 重新采样到固定向量长度会导致信号丢失与峰宽有关的数据,这是不可接受的,因为类别还取决于峰的幅度和宽度。
    【解决方案2】:

    另一种将信号压缩成特征向量的方法是进行 FFT 分析并使用第一个 n FFT 系数作为特征。

    或者你可以做一个加窗FFT,这样你就可以得到一个系数序列。

    【讨论】:

    • 我可能错了,但我认为 FFT 用于周期性数据。
    • 可以对非周期性数据使用 FFT。 DFT(离散傅里叶变换)适用于非周期性数据。然而,在 DFT 中隐含了信号是周期性扩展的。看看逆 DFT 的方程,信号是 N 周期的,就像 DFT 是 N 周期的一样。
    • 哦,是的,我会尝试使用 DFT。谢谢
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2019-08-11
    • 2010-10-06
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多