SVD的效果到底如何呢?

分享到:
12214
下一篇 >

机器学习中常用的降维方法是主成分分析

n = len

a = np.zeros

count =

curSum = 0

k = 0

while curSum <= count * p:

uk = u[:, k].reshape

vk = v[k].reshape

a += sigma[k] * np.dot

curSum += sigma[k]

k += 1

print 'k:',k

a[a < 0] = 0

a[a > 255] = 255

#按照*近距离取整数,并设置参数类型为uint8

return np.rint

if __name__ == '__main__':

img = Image.open

a = np.array

for p in np.arange

R = rebuild_img

u, sigma, v = np.linalg.svd

G = rebuild_img

u, sigma, v = np.linalg.svd

B = rebuild_img

I = np.stack

#保存图片在img文件夹下

Image.fromarray

效果

一共10张图,从上到下奇异值和占比为[0.1, 0.2, …, 0.9, 1.0],奇异值和占比[0.7, 0.8, 0.9]的恢复图像还是比较清楚,然而对应的奇异值个数却非常少,如下表所示:

奇异值和占比 奇异值个数 奇异值个数占比

0.7 45 0.10

0.8 73 0.16

0.9 149 0.33

1.0 450 1.00

小结

奇异值分解能够有效的降低数据的维数,以本文的图片为例,从450维降到149维后,还保留了90%的信息

虽然奇异值分解很有效,但是不能滥用,一般情况下要求降维后信息的损失度不能超过5%,甚至是1%

Ng的视频中提到常见的错误使用降维的情况,在这里也贴出来:

使用降维解决过拟合问题

不论什么情况,先用降维处理一下数据,即把降维当做模型训练的必须步骤

你可能感兴趣: 技术文章 图片 SVD
无觅相关文章插件,快速提升流量