工控网首页
>

应用设计

>

机器学习算法

机器学习算法

2013/12/10 12:08:40

首先介绍下什么是KNN,为什么不是CNN、DNN之类的呢?KNN的全名是K-th Nearest Neighbor,中文意思是第K位最接近的邻居。什么是“第k位最接近的邻居”呢?假设在一个广场上,有100个朋友,每位朋友都是你的邻居,最接近你的邻居,就是“第一位距离最近的邻居”了,比第一位稍微远一点的邻居,就是“第二位距离最近的邻居”了,以此类推,第10位距离最近的邻居,就是k=10的时候了。        KNN是一种机器学习算法,,机器学习就是让机器接收外界输入的资料以后,依照某种算法(一些步骤的集合),训练出一种模型,这个模型是一种从资料学习出来的东西,有了这个模型,机器看到新的资料的时候,不会空空如也,而是有某种程度的经验和智慧,可以了解新的资料了。        在这个过程中,有两种训练的方法:监督式和非监督式的学习。所谓监督式的学习,是指在训练机器学出一个模型的之前,会先有一段训练的时间,在这段时间里面,每一笔资料会有一个正确答案,机器学习以后,会根据答案调整自己学习的方法。举例来说:我们学习数学的时候,可能会练习一些题目,练习以后,会对一下答案,如果算错了,就会调整自己的计算方式,或是检查有没有粗心算错的地方。机器学习里面的监督式学习正是如此,训练之后,才开始有预测的阶段,这个时候输入机器的资料没有正确答案,机器必须根据他之前学习的模型来判断,预测新的资料应该输出哪一个正确答案,而不像再训练阶段的时候,输入的资料会有人类提供的正确答案了。        另外一种非监督式的学习,则是连训练的阶段都没有。我们只给予机器简单的学习方法,或是一个简单的价值观,然后就开始把资料输入机器,让机器自行判断正确答案。举例来说:我们还没上小学之前,已经有了一些基本的说话能力。我们从婴儿开始哑哑学语,我们并不晓得,什么是主词、动词、受词。我们可能连注音符号都不晓得。但是我们的父母一直跟我们讲话,我们有一天就突然蹦出一些词,第一句可能是「妈妈」!第二句可能是「爸爸」!之后可能开始简单的对话,最后在上小学之前,我们至少会问简单的问题,老师讲的句子也都听的懂,才有办法起立、立正、敬礼,还有学习注音符号,练习写字了。非监督式的学习就是类似如此,我们给机器资料,简单的规则和价值观,剩下的就交给机器一边学习一边预测正确答案是什么了。        下面来看一个实例,如图所示。我们的目标是要机器学会怎样子分出红点和蓝点。        每个点在平面上有个位置,分别用(x,y)来代表,举个例子来说:红点代表女生的大头照,蓝点代表男生的大头照,x轴代表照片中头发的长度,y轴代表照片中脸面积的大小。现在机器已经知道某些点是男生的大头照(蓝色的点)、某些是女生的大头照(红色的点)。当一张新的大头照输入机器以后(图片里面打问号没有颜色的点),KNN算法就先计算这个点,和其他已经知道男生或女生的资料点之间的距离(图里面画了几条线代表在计算距离)。今天KNN的K如果设定成1,也就是(1-NN)的话,代表机器会找第一位距离最近的点,然后看这个点是男生(图中蓝色点)或是女生(图中红色点)。如果这个点是男生,那么我们也预测刚才打问号的这个点(新的资料点)是男生的大头照。之后这个问号点就变成蓝色的,然后继续反覆同样的动作在下一个新输入的资料点,预测新的问号点是男生或是女生。如果k=3,也就是使用3-NN学习,情况会变成怎样子呢?机器同样先计算图中打问号的点和各个颜色的点的距离,接着选出前三名距离最近的点,然后看看里面红色的点比较多(2个以上的点是红色)还是蓝色的点比较多(2个以上的点是蓝色),如果蓝色点比较多,就判断这个新问号点,是男生的大头照了。以此类推,会有5-NN,7-NN,9-NN学习法,端看问题的需要而定。        KNN学习法就是如此简单。然而KNN也有他困难的地方。首先是每个机器学习法都要面对的问题,就是选择特征,用刚才的例子,我们用头发长度和脸大小的面积来让机器学习,如果遇到留长发的男生或是轮廓比较大的女生,可能就判断不大出来:或是说,如果我们改用肤色来判断,比较白的是女生,比较黑的是男生,万一这个规则拿来判断欧洲人,可能也不大行。        另一个困难则是距离的订定。刚才的例子中,头发长度如果用公分来算,差距1公分的头发长度,可能有办法分辨男女。如果是用头发的颜色来判断的话,那么颜色的「距离」就不知道要怎么定了,或许可以定成光线频率的距离,那机器还可以学习,不然「红色」和「黑色」两种颜色之间的距离,可能就不知道要怎么定了。        这上面讲解的我都同意,但是作者在文后特意修正,KNN是一种监督式机器学习算法。这在我看来,这个修正不是太过于正确。在某些情况下,KNN可以说是一种监督式学习算法,然后在另外一些情况下却不尽然。举个例子来说,对于一系列没有分类的数据集来说,如何应用KNN算法对其进行分类呢?        我的思路是:首先输入第一个数据,然后将其判为一类,接着输入第二个数据,如果他们之间的相似性度量满足一定的条件,即measurement

投诉建议

提交

查看更多评论
其他资讯

查看更多

助力企业恢复“战斗状态”:MyMRO我的万物集·固安捷升级开工场景方案

车规MOSFET技术确保功率开关管的可靠性和强电流处理能力

未来十年, 化工企业应如何提高资源效率及减少运营中的碳足迹?

2023年制造业“开门红”,抢滩大湾区市场锁定DMP工博会

2023钢铁展洽会4月全新起航 将在日照触发更多商机