如何在分类中将多个输入建模为单个输出?
Posted
技术标签:
【中文标题】如何在分类中将多个输入建模为单个输出?【英文标题】:How to model multiple inputs to single output in classification? 【发布时间】:2018-09-22 02:33:56 【问题描述】:目的:
我正在尝试构建一个模型来将多个输入分类为单个输出类,如下所示:
x_i1, x_i2, x_i3, ..., x_i16(特征)到 y_i(类)
我正在使用 SVM 进行分类,但 0/1 损失很糟糕(一半的数据分类错误),这使我得出结论,数据可能是非线性的。这就是我玩多项式基函数的原因。我对每个系数进行了变换,以便得到最多 4 次多项式的任意组合,希望我的特征在变换后的空间中是线性的。我的新转换输入如下所示:
x_i1, ..., x_i16, x_i1^2, ..., x_i16^2, ... x_i1^4, ..., x_i16^4, x_i1^3, ..., x_i16^3 , x_i1*x_i2, ...
损失已降至最低,但仍不是我想去的地方。由于随着多项式次数的增加过度拟合的机会增加,我添加了正则化以抵消这种情况。我还添加了一个前向贪心算法,以获取导致交叉验证误差最小的系数,但没有很大的改进。
问题:
是否有系统的方法来确定哪种变换会导致变换空间中的线性特征行为?对我来说似乎有点奇怪,我必须尝试每一个多项式,直到它“适合”。除了多项式之外,是否还有更好的基函数?我知道在低维特征空间中,可以简单地将数据绘制出来并直观地估计变换,但是我该如何在高维空间中做到这一点?
也许有点跑题了,但我也告诉自己有关 PCA 的信息,以便首先丢弃那些不提供太多信息的组件。这值得一试吗?
感谢您的帮助。
【问题讨论】:
【参考方案1】:除了线性和多项式之外,您是否尝试过其他核函数,例如 RBF?由于不同的数据集可能具有不同的特征,因此某些核函数可能比其他核函数工作得更好,尤其是在非线性情况下。
不知道你用的是什么工具,不过下面这个也为初学者提供了如何构建SVM模型的指南:
https://www.csie.ntu.edu.tw/~cjlin/libsvm/
首先进行特征选择步骤总是一个好主意,尤其是对于高维数据。应该去掉那些嘈杂或不相关的特征,从而获得更好的性能和更高的效率。
【讨论】:
核化感知器在 one-vs-all 情况下给了我更好的分类,但我如何计算整体分类的置信度?以上是关于如何在分类中将多个输入建模为单个输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase 中将多个 Recyclerview 设置为单个适配器(多视图类型)?
如何在单个集群环境中将 Redshift 用户/组限制为多个数据库中的单个数据库
如何在 Spring WebFlux Security(Reactive Spring Security)配置中将多个用户角色添加到单个 pathMatcher/Route?