很多人觉得机器学习高不可攀,认为这是一门只有少数专业学者才了解的神秘技术。
桥西网站建设公司创新互联,桥西网站设计制作,有大型网站制作公司丰富经验。已为桥西上1000+提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的桥西做网站的公司定做!
毕竟,你是在让运行在二进制世界里的机器得出它自己对现实世界的认识。你正在教它们如何思考。然而,本文几乎不是你所认为的晦涩难懂、复杂而充满数 学公式的文章。正如所有帮助我们认识世界的基本常识一样(例如:牛顿运动定律、工作需要去完成、供需关系等等),机器学习***的方法和概念也应该是简洁明 了的。可惜的是,绝大多数关于机器学习的文献都充斥着复杂难懂的符号、艰涩晦暗的数学公式和不必要的废话。正是这给机器学习简单基础的思想围上了一堵厚厚 的墙。
现在看一个实际的例子,我们需要在一篇文章的末尾增加一个“你可能喜欢”的推荐功能,那么我们该如何实现呢?
为了实现这个想法,我们有一个简单的解决方案:
- def similar_posts(post)
- title_keywords = post.title.split(' ')
- Post.all.to_a.sort |post1, post2|
- post1post1_title_intersection = post1.body.split(' ') & title_keywords
- post2post2_title_intersection = post2.body.split(' ') & title_keywords
- post2_title_intersection.length <=> post1_title_intersection.length
- end[0..9]
- end
采用这种方法去找出与博文“支持团队如何提高产品质量”相似的文章,我们由此得到下列相关度前十的文章:
正如你所看到的,标杆文章是关于如何有效率地进行团队支持,而这与客户群组分析、讨论设计的优点都没有太大的关系,其实我们还可以采取更好的方法。
现在,我们尝试用一种真正意义上的机器学习方法来解决这个问题。分两步进行:
1.将文章用数学的形式表示
如果我们可以将文章以数学的形式展示,那么可以根据文章之前的相似程度作图,并识别出不同簇群:
如上图所示,将每篇文章映射成坐标系上的一个坐标点并不难,可以通过如下两步实现:
Ruby代码如下:
- @posts = Post.all
- @words = @posts.map do |p|
- p.body.split(' ')
- end.flatten.uniq
- @vectors = @posts.map do |p|
- @words.map do |w|
- p.body.include?(w) ? 1 : 0
- end
- end
假设@words 的值为:
[“你好”,”内部”,”内部交流”,”读者”,”博客”,”发布”]
如果某篇文章的内容是“你好 博客 发布 读者”,那么其对应的数组即为:
[1,0,0,1,1,1]
当然,我们现在没法使用简单的工具像二维坐标系一样展示这个六维度的坐标点,但是这其中涉及的基本概念,例如两点之间的距离都是互通的,可以通过二维推广到更高维度(因此使用二维的例子来说明问题还是行得通的)。
#p#
2.用K均值(K-means)聚类算法对数据点进行聚类分析
现在我们得到了一系列文章的坐标,可以尝试找出相似文章的群簇。这里我们采用使用一个相当简单聚类算法-K均值算法,概括起来有五个步骤:
我们接下来用图的形式形象化地展示这些步骤。首先我们从一系列文章坐标中随机选择两个点(K=2):
我们将每篇文章指派到离它最近的群簇中:
我们计算各个群簇中所有对象的坐标均值,作为该群簇新的中心。
这样我们就完成了***次的数据迭代,现在我们将文章根据新的群簇中心重新指派到对应的群簇中去。
至此,我们找到了每篇文章对应的群簇!很明显,即使继续进行迭代群簇中心不会改变,每篇文章对应的群簇也不会改变了。
上述过程的Ruby代码如下:
- @cluster_centers = [rand_point(), rand_point()]
- 15.times do
- @clusters = [[], []]
- @posts.each do |post|
- min_distance, min_point = nil, nil
- @cluster_centers.each.with_index do |center, i|
- if distance(center, post) < min_distance
- min_distance = distance(center, post)
- min_point = i
- end
- end
- @clusters[min_point] << post
- end
- @cluster_centers = @clusters.map do |post|
- average(posts)
- end
- end
下面是由这个方法得到的与博文“支持团队如何提高产品质量”相似性排在前十位的文章:
如果你喜欢以数学符号去表达思想,毫无疑问学术论文是很有用处的。然而,其实有更多优质的资源可以替换掉这些繁杂数学公式,它们更实际、更平易近人。
试一试
如何为你的项目管理应用推荐标签?如何设计你的客户支持工具?或者是社交网络中用户如何分组?这些都可以通过简答的代码、简单的算法来实现,是练习的好机会!所以,如果你认为项目中面临的问题可以通过机器学习来解决,那为什么还要犹豫呢?
机器学习其实比你想象得更简单!
原文链接:http://blog.jobbole.com/53546/
标题名称:机器学习其实比你想的更简单
文章出自:http://www.gawzjz.com/qtweb2/news36/5936.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联