案例丨机器学习概念纵览:从多元拟合神经网络到深度学习

举报
资源描述
案 例I机器学习概念纵览:从多元拟合,神经网络到深度学习笔者自大学以来一直断断续续的学过机器学习啊、自然语言处理啊等等方面的内容,相信基本上每个本科生或者研究生都会接触过这方面,毕竟是一个如此大的Fl a g。不过同样的,在机器学习,或者更大的一个概念,数据科学这个领域中,同样是学了忘忘了学。不可否认,数学是机器学习的一个基石,但是也是无数人,包括笔者学习机器学习的一个高的门槛,毕竟数学差。而在这篇文章中,原作者并没有讲很多的数学方面的东西,而是以一个有趣实用的方式来介绍机器学习。另一方面,其实很多数学原理也是很有意思的,笔者记得当年看完数学之美有一个不小的感触,就是知道了 T F T D F 的计算公式是怎么来的W h a t i s M a c h i n e L e a r n i n g:M a c h i n e L e a r n i n g 的概念与算法介绍估计你已经厌烦了听身边人高谈阔论什么机器学习、深度学习但是自己摸不着头脑,这篇文章就由浅入深高屋建甑地给你介绍一下机器学习的方方面面。本文的主旨即是让每个对机器学习的人都有所得,因此你也不能指望在这篇文章中学到太多高深的东西。言归正传,我们先来看看到底什么是机器学习:M a c h i n e l e a r n i n g i s t h e i d e a t h a t t h e r e a r e g e n e r i c a l g o r i t h m s t h a tc a n t e l l y o u s o m e t h i n g i n t e r e s t i n g a b o u t a s e t o f d a t a w i t h o u t y o u h a v i n gt o w r i t e a n y c u s t o m c o d e s p e c i f i c t o t h e p r o b l e m.In s t e a d o f w r i t i n g c o d e,y o u f e e d d a t a t o t h e g e n e r i c a l g o r i t h m a n d i t b u i l d s i t s o w n l o g i c b a s e do n t h e d a t a.笔者在这里放了原作者的英文描述,以帮助更好地理解。M a c h i n e L e a r n i n g即是指能够帮你从数据中寻找到感兴趣的部分而不需要编写特定的问题解决方案的通用算法的集合。通用的算法可以根据你不同的输入数据来自动地构建面向数据集合最优的处理逻辑。举例而言,算法中一个大的分类即分类算法,它可以将数据分类到不同的组合中。而可以用来识别手写数字的算法自然也能用来识别垃圾邮件,只不过对于数据特征的提取方法不同。相同的算法输入不同的数据就能够用来处理不同的分类逻辑。“Ma c h i n e l e a r n i n g i s a n u m b r e l l a t e r m c o v e r i n g l o t s o f t h e s e ki n d so f g e n e r i c a l g o r i t h m s.T w o ki n d s o f Ma c h i n e Le a r n i n g Al g o r i t h m s:两类机器学习算法粗浅的划分,可以认为机器学习攘括的算法主要分为有监督学习与无监督学习,概念不难,但是很重要。S u p e r v i s e d Le a r n i n g:有监督学习假设你是一位成功的房地产中介,你的事业正在蒸蒸日上,现在打算雇佣更多的中介来帮你一起工作。不过问题来了,你可以一眼看出某个房子到底估值集合,而你的实习生们可没你这个本事。为了帮你的实习生尽快适应这份工作,你打算写个小的AP P来帮他们根据房子的尺寸、邻居以及之前卖的类似的屋子的价格来评估这个屋子值多少钱。因此你翻阅了之前的资料,总结成了下表:BedroomsSq.feetNeighborhoodSale price32000Normaltown$250,0002800Hipsterton$300,0002850Normaltown$150,0001550Normaltown$78,00042000Skid Row$150,000利用这些数据,我们希望最后的程序能够帮我们自动预测一个新的屋子大概能卖到多少钱:BedroomsSq.feetNeighborhoodSale price32000Hipsterton?解决这个问题的算法呢就是叫做监督学习,你已知一些历史数据,可以在这些历史数据的基础上构造出大概的处理逻辑。在将这些训练数据用于算法训练之后,通用的算法可以根据这个具体的场景得出最优的参数,有点像下面这张图里描述的一个简单的智力题:Math Quiz#1-Teachers Answer Key1)24 5=35)622=102)52 8=26)311 =23)22 1=37)534=114)42 2=68)181 =7这个例子里,你能够知道根据左边的数字的不同推导出不同的右边的数字,那么你脑子里就自然而然生成了一个处理该问题的具体的逻辑。在监督学习里,你则是让机器帮你推导出这种关系,一旦知道了处理特定系列问题的数学方法,其他类似的问题也就都能迎刃而解。U n s u p e r v i s e d L e a r n i n g:无监督学习我们再回到最初的那个问题,如果你现在不知道每个房间的售价,而只知道房间大小、尺寸以及临近的地方,那咋办呢?这个时候,就是无监督学习派上用场的时候了。BedroomsSq.feetNeighborhood32000Normaltown2800Hipsterton2850Normaltown1550Normaltown42000Skid Row这种问题有点类似于某人给了你一长串的数字然后跟你说,我不知道每个数字到底啥意思,不过你看看能不能通过某种模式或者分类或者啥玩意找出它们之间是不是有啥关系。那么对于你的实习生来说,这种类型的数据有啥意义呢?你虽然不能知道每个屋子的价格,但是你可以把这些屋子划分到不同的市场区间里,然后你大概能发现购买靠近大学城旁边的屋子的人们更喜欢更多的小卧室户型,而靠近城郊的更喜欢三个左右的卧室。知道不同地方的购买者的喜好可以帮助你进行更精确的市场定位。另外你也可以利用无监督学习发现些特殊的房产,譬如一栋大厦,和其他你售卖的屋子差别很大,销售策略也不同,不过呢却能让你收获更多的佣金。本文下面会更多的关注于有监督学习,不过千万不能觉得无监督学习就无关紧要了。实际上,在大数据时代,无监督学习反而越来越重要,因为它不需要标注很多的测试数据。这里的算法分类还是很粗浅的,如果要了解更多的细致的分类可以参考:维基百科笔者的数据科学与机器学习算法分类House Price Estimation With Supervised Learning:利用监督学习进行房屋价格估计作为高等智慧生物,人类可以自动地从环境与经历中进行学习,所谓熟读唐诗三百首,不会做诗也会吟,你房子卖多了那自然而然看到了某个屋子也就能知道价格以及该卖给啥样的人了。这 个Strong_AI项目也就是希望能够将人类的这种能力复制到计算机上。不过目前的机器学习算法还没这么智能,它们只能面向一些特定的有一定限制的问题。因此,Learning这个概念,在这里更应该描述为:基于某些测试数据找出解决某个问题的等式,笔者也喜欢描述为对于数据的非线性拟合。希望五十年后看到这篇文章的人,能够推翻这个论述。Lets Write the Program基本的思想很好理解,下面就开始简单的实战咯。这里假设你还没写过任何机器学习的算法,那么直观的来说,我们可以编写一些简单的条件判断语句来进行房屋价格预测,譬如:def estimate_house_sales_price(num_of_bedrooms,sqft,neighborhood):price=0#俺们这嘎达,房子基本上每平方200price_per_sqft=200if neighborhood=hipsterton”:#市中心会贵一点price_per_sqft=400elif neighborhood=skid row”:#郊区便宜点price_per_sqft=100#可以根据单价*房子大小得出一个基本价格price=price_per_sqft*sqft#基于房间数做点调整if num_of_bedrooms=0:#没房间的便宜点price=price-20000else:#房间越多一般越值钱price=price+(num_of_bedrooms*1000)return price这就是典型的简答的基于经验的条件式判断,你也能通过这种方法得出一个较好地模型。不过如果数据多了或者价格发生较大波动的时候,你就有心无力了。而应用机器学习算法则是让计算机去帮你总结出这个规律,大概如下所示:def estimate_house_sales_price(num_of_bedrooms,sqft,neighborhood):price=return price通俗的理解,价格好比一锅炖汤,而卧室的数量、客厅面积以及邻近的街区就是食材,计算机帮你自动地根据不同的食材炖出不同的汤来。如果你是喜欢数学的,那就好比有三个自变量的方程,代码表述的话大概是下面这个样子:def estimate_house_sales_price(num_of_bedrooms,sqft,neighborhood):price=0#a little pinch of thisprice+=num_of_bedrooms*.841231951398213#and a big pinch of thatprice+=sqft*1231.1231231#maybe a handful of thisprice+=neighborhood*2.3242341421#and finally,just a little extra salt for good measureprice+=201.23432095return price注意,上面那些譬如.841.这样奇怪的数据,它们就是被称为权重,只要我们能根据数据寻找出最合适的权重,那我们的函数就能较好地预测出房屋的价格。Weights首先,我们用一个比较机械式的方法来寻找最佳的权重。Step 1首先将所有的权重设置为1:def estimate_house_sales_price(num_of_bedrooms,sqft,neighborhood):price=0#a little pinch of thisprice+二 num_of_bedrooms*1.0#and a big pinch of thatprice+=sqft*1.0#maybe a handful of thisprice+二 neighborhood*1.0#and finally,just a little extra salt for good measureprice+=1.0return priceStep 2拿已知的数据来跑一波,看看预测出来的值和真实值之间有多少差距,大概效果如下所示:BedroomsSq.feetNeighborhoodSale priceMy Guess32000Normaltown$250,000$178,0002800Hipsterton$300,000$371,0002850Normaltown$150,000$148,0001550Normaltown$78,000$101,00042000Skid Row$150,000$121,000可以看出这个差距还是很大的啊,不过不要担心,获
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 大杂烩/其它


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号