了解KernelML可以让你更好的掌握机器学习算法
作者发明了一个特定的“粒子优化器”,并发布了一个名为kernelml的pip python包。这样做目的是为分析人员和数据科学家提供一种处理损失函数和非线性系数的广义机器学习算法。“粒子优化器”的主要原理是通过机器学习和概率模拟相结合的方法,使用损失函数、输入和输出矩阵以及(可选)随机采样器搜索最优参数。作者正在研究该项目更多的可能性,并希望最终使它开源。
举例:
让我们以经度和纬度坐标的聚类为例。聚类方法是让K-均值使用欧氏距离来进行比较观察。然而,经纬度数据点之间的欧氏距离并不直接映射到半正矢(Haversine)距离。这意味着,如果将0到1之间的坐标标准化,那么距离将在集群模型中有所误差。一个可能的解决办法是找到一个纬度和经度的投影,这样到数据点质心的半正矢(Haversine)距离等于欧氏空间中投影的纬度和经度。
这个坐标转换的结果支持你将相对于中心的半正矢距离表示为欧氏距离。(它可以被缩放并用于解决集群问题的方案中。)
另一个问题是求非线性系数的最优值,即最小二乘线性模型中的次方转换。这样做的原理是:整数幂的变换很少能采集到最适合的变换值。通过允许电子变换为任意实数,提高模型的精度,使模型更好地应用于验证数据中。
为了弄清整数幂的含义,作者给出了模型的公式。
算法:
KernelML背后的想法很简单。通过机器学习模型中参数更新的历史记录来决定如何更新下一个参数集。在后端使用机器学习模型会带来偏见方差问题。具体来说,就是每次迭代时参数的更新都会带来误差,解决方案是每次迭代后根据最佳记录参数集进行蒙特卡罗模拟。
趋同问题:
每次迭代后,模型会保存最佳参数和自定义损失记录。模型还会记录所有参数的更新历史。问题是如何使用这些数据来定义收敛。一个可能的解决办法是:
该公式通过最后10个参数和最佳参数创建Z分数。如果所有参数的Z值小于1,则该算法符合收敛的要求。但当存在理论上的最佳参数集时,收敛将处于最佳结果。这是使用聚类算法时的一个问题,参见下面的示例。
我们不会过多的深入讨论集群解决方案,因为它显然不能代表数据。聚类解决方案使多维直方图与6个正态分布的平均概率之间的差异最小化(每个轴有3个)。在这里,分布可以很容易地对数据点进行“交易”,这可能会增加收敛时间。为什么这里不适合3个多元正态分布?因为由于某些参数具有约束条件,因此在模拟分布参数时存在问题。协方差矩阵必须是正的,半定的,反演需要存在的。正态分布的标准差必须大于0。该模型中使用的解决方案通过对每个参数进行自定义模拟,将参数约束结合在一起。(作者仍在寻找一个很好的公式,如何有效地模拟多元正态分布的协方差矩阵。)
为什么要用KernelML来代替EM算法?
非正态分布,如泊松分布,可能与多元正态簇解中的其他维数不相适应。此外,随着维数的增加,一个集群成为唯一具有非零值特性的集群的可能性也在增加。这给EM算法带来了一个问题,因为它试图更新协变矩阵。唯一特征与其他维度之间的协方差为零,或者另一个集群接受具有此非零值的观测的概率为零。
优化器的好处是:
参数的概率模拟与全参数化模型相比具有很大的优越性。首先,它在随机模拟中引入正则化。例如,如果参数的随机模拟介于—1到1之间,则可以推断参数的更新具有同等的重要性。此外,当算法收敛时,每一次迭代都会产生一组参数,这些参数将对全局或局部最小损失进行采样。该方法的主要优点是:1)可以为每个参数建立置信区间;2)各参数集的预测输出可以作为统一模型中的一个有用的特征。