请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

超参数最优化问题&特征工程问题

图片描述
波波老师您好,我听完4-5,4-6 这两节课,自己又搜了搜资料,结果有俩概念越来越搞不清楚了:特征工程和超参数问题,需要向您请教,我把我问题列举一下:

  1. 如上图所示的一大堆算法,在我理解是辅助我们机器学习算法,以使得我们能训练一下泛化效果最好的模型对吧。请问他们到底属于特征工程方法还是超参数最优化方法?如果是特征工程的话,为什么没提到PCA,如果是超参数最优化的话,为什么没提到您介绍的网格搜索法?
  2. 您讲解的时候说过,超参数之间是有关联的。就您视频讲解中提到的几个超参数来说:如果我一开始 weight=uniform ,那我只要遍历不同的 k 的值就OK了对吧;如果我一开始weight=distance,我不光要管 k,我还要 k 里面套 p,p里面套metric,对吧?
  3. 我提前听了您关于SVM部分的讲解,我实践了一下,我用SVM做了个音频文件多分类,先提取特征,再训练模型,模型的超参数,我就用的默认的:model = svm.SVC(kernel=‘linear’,C=0.01,decision_function_shape=‘ovr’),如果我要用网格搜索的话,就找到最优的kernel下的最优的C就行了对吧,就像 ‘kernels’: [‘linear’], 等等。可我还是觉得“网格搜索”这种暴力遍历很奇怪,好像很低效的样子,因为一个方法可能很多超参数,而且各个超参数之间是有关联的!这样的“控制变量法”感觉有时候要耗时很久,因为我每调一次 kernels,就得重新遍历一次C的各种情况。
  4. 如上所述,我用的默认的:model = svm.SVC(kernel=‘linear’,C=0.01,decision_function_shape=‘ovr’),然后用accuracy_score求出来的准确率特别高,95%了。我觉得很奇怪(因为感觉随便一个默认就准确率这么高(当然,没考虑CV),没有继续优化的空间了好像…额…),是因为我对音频文件的特征提取的好么?
  5. 基于上面的几个问题,对机器学习这类技术产生了一个本质的大困惑:因为随便一个默认就准确率这么高(当然,没考虑CV),我觉得如果我们用机器学习算法尝试做一个project的话,好像我们做的事情没有“机器学习”这个名字显得那么高大上(哈哈。。),因为就那么十几种机器学习算法,都已经被sklearn这种平台老早开发好了,而且考虑了各种情况下的超参数问题,我们能做的,难道就简单学习一下各方法的理论,然后开始一句话调用,然后用暴力遍历的网格搜索方式找一个最优的设置,就完事了??顶多几个热门的机器学习算法都调用实现一下(比如,SVM,KNN, 随机森林都可以解决多分类),比较下他们性能,好像这个project就完事了。。。。【反而感觉上一步对原始数据提取特征,以及多特征融合问题,才是能一显身手,体现点工作量的】

不好意西,一问起来就展开了。。尤其是第5问,真的很困惑。

期待您的回复~谢谢

正在回答

1回答

liuyubobobo 2020-03-09 13:16:34

简单来说,特征工程就是对原始数据进行初始处理,进而提炼出更多特征,或者更有意义的特征的过程,特征工程是对 X 进行处理;


而超参数,指在算法运行前就需要指定的参数。一个算法有什么超参数,和数据无关(和 X 和 y 无关),只和算法本身相关。通常超参数不是计算出来的,而是指定出来的。


1

你列出的算法属于优化算法。什么叫优化算法?就是辅助你求解一个最优值用的。比如在机器学习的过程中,我们通常要求解使得某个损失函数最小的对应的参数,就可以使用优化算法。比如这个课程里就介绍了模拟退火。

在比如求解 TSP 问题(可以在网上搜索一下),就可以用你罗列的这些优化算法中的很多。

优化算法和机器学习没有必然联系。只不过我们在训练机器学习模型的时候,需要优化一个函数,所以会用到优化算法。

优化算法既不是特征工程方法,也不是超参数优化方法。


2

对。


3

网格搜索就是这么低效。这也是很多机器学习算法一算就要算一个礼拜的原因。


4

如果真能达到 95%,确实不需要优化了。

但关键是,这个 95% 是训练数据集上的结果?还是测试数据集上的结果?如果是数据测试集上的结果,是不是因果了验证数据集?否则,大概率的,是过拟合。

解决过拟合是处理机器学习问题的过程中需要解决的重要问题,可以参考这里:http://coding.imooc.com/learn/questiondetail/39781.html


当然,如果真的,对于你要处理的问题,结果就是这么好,那很好啊,你的模型可以直接使用了:)


5

首先,机器学习就是没有那么高大上:)

其次,是的,很多数据工程师,根本不了解机器学习算法的内部原理,就是调包侠。

这就像现在的很多软件工程师也不懂操作系统不懂体系结构不懂编译原理甚至不知道几个算法与数据结构也能拿到不错的薪水:)

为此,我在公众号写过一篇文章,叫《学算法有什么用?没用》:https://mp.weixin.qq.com/s?__biz=MzU4NTIxODYwMQ==&mid=2247483901&idx=1&sn=c6a6e50354f1abbf2109b1d62bcf5237&chksm=fd8caebbcafb27adca8478a851f9ddf82623ba0175dbca3921f9f3cd1df6e431113967baf88b&token=535836254&lang=zh_CN#rd

但是你要明白,这个世界还是需要有人理解底层原理,进而改进底层的。

以这轮人工智能浪潮为例,很大原因是出现了深度学习。而深度学习的出现,可不是调包侠的功劳。


从另一个方面,你的理解非常对,对于大多数数据工程师,甚至是机器学习工程师来说,特征工程是非常非常重要的一环。

可以参考这里:http://coding.imooc.com/learn/questiondetail/99483.html


继续加油!:)

2 回复 有任何疑惑可以回复我~
  • 提问者 儒将肚甫 #1
    谢谢波波老师耐心解答,听您的课程真的很有收获。希望您之后可以推出进阶版的人工智能算法相关的课程~~
    回复 有任何疑惑可以回复我~ 2020-03-10 23:27:49
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信