主成分分析 PCA 与奇异值分解 SVD-PCA 对手写数据集的降维 & 用 PCA 做噪音过滤
数据预处理章节一直用的这个数据集
在本个案例中,由于 PCA 也有 random_state 参数,而并未设置,因此结果可能有不同
画累计方差贡献率曲线,找最佳降维后维度的范围
继续缩小最佳维度的范围
再次缩小
查看模型效果
在之前的建模过程中,因为计算量太大,所以我们一直使用随机森林,但事实上,对于这个数据集,KNN 的效果比随机森林更好,KNN 在未调参的状况下已经达到 96%的准确率,而随机森林在未调参前只能达到 93%,这是模型本身的限制带来的。现在我们的特征数量已经降到不足原来的 3%,可以考虑使用 KNN 了
在 k=5 是效果最好,上面我们也跑过交叉验证了,这里不再赘述
可以发现,原本 785 列的特征被我们缩减到 23 列之后,用 KNN 跑出了目前位置这个数据集上最好的结果。再进行更细致的调整,我们也许可以将 KNN 的效果调整到 98%以上。PCA 为我们提供了无限的可能,终于不用再因为数据量太庞大而被迫选择更加复杂的模型了!
用 PCA 做噪音过滤
降维的目的之一就是希望抛弃掉对模型带来负面影响的特征,而我们相信,带有效信息的特征的方差应该是远大于噪音的,所以相比噪音,有效的特征所带的信息应该不会在 PCA 过程中被大量抛弃。inverse_transform 能够在不恢复原始数据的情况下,将降维后的数据返回到原本的高维空间,即是说能够实现”保证维度,但去掉方差很小特征所带的信息“。利用 inverse_transform 的这个性质,我们能够实现噪音过滤。
为数据加上噪音
关于 rng.normal(数据集,方差)
a = rng.randint(0,10,(4,5)) a.sum(axis=0) --- array([15, 12, 15, 16, 28]) rng.normal(a,0).sum(axis=0) # 我们令方差为0,验证上面的想法 --- array([15., 12., 15., 16., 28.])
总结
视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili
版权声明: 本文为 InfoQ 作者【烧灯续昼2002】的原创文章。
原文链接:【http://xie.infoq.cn/article/31b9ef3f132f53bfd94938c50】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论