如何处理机器学习的大量功能

时间:2013-06-26 02:58:48

标签: machine-learning gradient-descent

我开发了一个图像处理程序,用于识别给出数字图像的数字。每幅图像为27x27像素= 729像素。我取每个R,G和B值,这意味着每个图像有2187个变量(截距+1,总数2188)。

我使用了以下渐变下降公式:

Repeat {
    θj = θj−α/m∑(hθ(x)−y)xj
}

其中θj是变量j的系数; α是学习率; hθ(x)是假设; y是实数值,xj是变量j的值。 m是训练集的数量。 hθ(x)y用于每个训练集(即,总和符号的用途)。此外,该假设定义为:

hθ(x) = 1/(1+ e^-z)
z= θo + θ1X1+θ2X2 +θ3X3...θnXn

通过这个和3000个训练图像,我能够在一个多小时内训练我的程序,并且当在交叉验证集上进行测试时,它能够在67%的时间内识别出正确的图像。

我想改进它,所以我决定尝试一个2阶多项式。

然而,每张图像的变量数量从2188跳到2,394,766!我需要一个小时来完成梯度下降的一步。

所以我的问题是,机器学习中如何处理大量变量?一方面,我没有足够的空间来为每个训练集保留那么多变量。另一方面,我目前每个训练样本存储2188个变量,但我必须执行O(n ^ 2)只是为了得到每个变量的值乘以另一个变量(即多项式到2度值)。

所以非常感谢任何建议/意见。

2 个答案:

答案 0 :(得分:1)

  • 首先尝试使用某些降维(PCA,内核PCA或LDA,如果您对图像进行分类)

  • 矢量化你的渐变下降 - 使用大多数数学库或matlab等,它会运行得更快

  • 并行化算法,然后在多个CPU上运行(但是你的库可以用于乘法向量已经支持并行计算)

答案 1 :(得分:0)

与Jirka-x1的答案一起,我首先要说这是处理图像数据的主要区别之一,而不是ML的文本数据:高维度。

第二......这是重复的,请参阅How to approach machine learning problems with high dimensional input space?