`
网哟游啊
  • 浏览: 1197 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

机器学习其实比你想的更简单

 
阅读更多

很多人觉得机器学习高不可攀,认为这是一门只有少数专业学者才了解的神秘技术。

毕竟,你是在让运行在二进制世界里的机器得出它自己对现实世界的认识。你正在教它们如何思考。然而,本文几乎不是你所认为的晦涩难懂、复杂而充满数学公式的文章。正如所有帮助我们认识世界的基本常识一样(例如:牛顿运动定律、工作需要去完成、供需关系等等),机器学习最佳的方法和概念也应该是简洁明了的。可惜的是,绝大多数关于机器学习的文献都充斥着复杂难懂的符号、艰涩晦暗的数学公式和不必要的废话。正是这给机器学习简单基础的思想围上了一堵厚厚的墙。

​现在看一个实际的例子,我们需要在一篇文章的末尾增加一个“你可能喜欢”的推荐功能,那么我们该如何实现呢?

 

为了实现这个想法,我们有一个简单的解决方案:

  • 1.获得当前文章的标题并将其分割成独立的单词(译者注:原文是英文,只需要依据空格分割即可,中文分词需要用到分词器)
  • 2.获取除当前文章以外的所有文章
  • 3.将这些文章依据其内容与当前文章标题的重合程度进行排序
1
2
3
4
5
6
7
8
9
def similar_posts(post)
  title_keywords = post.title.split(' ')
  Post.all.to_a.sort |post1, post2|
    post1_title_intersection = post1.body.split(' ') & title_keywords
    post2_title_intersection = post2.body.split(' ') & title_keywords
 
    post2_title_intersection.length <=> post1_title_intersection.length
  end[0..9]
end

采用这种方法去找出与博文“支持团队如何提高产品质量”相似的文章,我们由此得到下列相关度前十的文章:

  • 如何着手实施一个经过验证的方案
  • 了解你的客户是如何做决策的
  • 设计首次运行界面以取悦你的用户
  • 如何招聘设计师
  • 图标设计的探讨
  • 对歌手Ryan的采访
  • 通过内部交流对客户进行积极支持
  • 为什么成为第一并不重要
  • 对Joshua Porter的采访
  • 客户留存、群组分析与可视化

正如你所看到的,标杆文章是关于如何有效率地进行团队支持,而这与客户群组分析、讨论设计的优点都没有太大的关系,其实我们还可以采取更好的方法。

现在,我们尝试用一种真正意义上的机器学习方法来解决这个问题。分两步进行:

  1. 将文章用数学的形式表示;
  2. 用K均值(K-means)聚类算法对上述数据点进行聚类分析。

1.将文章用数学的形式表示

如果我们可以将文章以数学的形式展示,那么可以根据文章之前的相似程度作图,并识别出不同簇群:

如上图所示,将每篇文章映射成坐标系上的一个坐标点并不难,可以通过如下两步实现:

  1. 找出每篇文章中的所有单词;
  2. 为每篇文章建立一个数组,数组中的元素为0或者1,用于表示某单词在该文章中是否出现了,每篇文章数组元素的顺序都是一样的,只是其值有差异。

Ruby代码如下:

1
2
3
4
5
6
7
8
9
10
11
@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]

当然,我们现在没法使用简单的工具像二维坐标系一样展示这个六维度的坐标点,但是这其中涉及的基本概念,例如两点之间的距离都是互通的,可以通过二维推广到更高维度(因此使用二维的例子来说明问题还是行得通的)。

2.用K均值(K-means)聚类算法对数据点进行聚类分析

现在我们得到了一系列文章的坐标,可以尝试找出相似文章的群簇。这里我们采用使用一个相当简单聚类算法-K均值算法,概括起来有五个步骤:

  1. 设定一个数K,它表示群簇中对象的数目;
  2. 从所有数据对象中随机选择K个对象作为初始的K个群簇中心;
  3. 遍历所有对象,分别将它们指派到离自己最近的一个群簇中;
  4. 更新群簇中心,即计算每个群簇中对象的均值,并将均值作为该群簇的新中心;
  5. 重复3、4步骤,直到每个群簇中心不再变化。

我们接下来用图的形式形象化地展示这些步骤。首先我们从一系列文章坐标中随机选择两个点(K=2):

我们将每篇文章指派到离它最近的群簇中:

我们计算各个群簇中所有对象的坐标均值,作为该群簇新的中心。

这样我们就完成了第一次的数据迭代,现在我们将文章根据新的群簇中心重新指派到对应的群簇中去。

至此,我们找到了每篇文章对应的群簇!很明显,即使继续进行迭代群簇中心不会改变,每篇文章对应的群簇也不会改变了。

上述过程的Ruby代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@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

下面是由这个方法得到的与博文“支持团队如何提高产品质量”相似性排在前十位的文章:

  • 你对此更了解了还是你更聪明了
  • 客户反馈的三个准则
  • 从客户获取你所要的信息
  • 产品交付只是一个开始
  • 你觉得功能扩展看起来像什么
  • 了解你的用户群
  • 在正确的信息和正确的时间下转换客户
  • 与你的客户沟通
  • 你的应用有消息推送安排吗
  • 你有试着与客户沟通吗

结果不言自明。

我们仅仅用了不到40行的代码以及简单的算法介绍就实现了这个想法,然而如果你看学术论文你永远不会知道这本该有多简单。下面是一篇介绍K均值算法论文的摘要(并不知道K均值算法是谁提出的,但这是首次提出“K均值”这个术语的文章)。

如果你喜欢以数学符号去表达思想,毫无疑问学术论文是很有用处的。然而,其实有更多优质的资源可以替换掉这些繁杂数学公式,它们更实际、更平易近人。

试一试

如何为你的项目管理应用推荐标签?如何设计你的客户支持工具?或者是社交网络中用户如何分组?这些都可以通过简答的代码、简单的算法来实现,是练习的好机会!所以,如果你认为项目中面临的问题可以通过机器学习来解决,那为什么还要犹豫呢?

机器学习其实比你想象得更简单!

分享到:
评论

相关推荐

    机器学习模型部署的两种方式

    例如,一个简单的机器学习模型,如XGBoost,可能被封装在一个Flask应用程序中,但这种部署方式过于简单,经常被诟病。 更现代的部署方式往往利用了更为高级的架构,例如使用微服务来支持机器学习模型。在微服务架构...

    机器学习算法PPT.rar

    《机器学习算法详解》 在当今的信息时代,数据量爆炸性增长,如何从中挖掘出有价值的信息,成为了一项至关重要的...机器学习不仅是一门技术,更是一种思维方式,它使我们能够从数据中发现世界的模式,推动科技进步。

    基于机器学习的基础算法研究综述.pdf

    K最近邻算法(KNN)是比较成熟的算法,也是最简单的机器学习算法之一,该方法可以用于分类和回归。KNN的基本思想是:对于一个新的输入项,通过计算它与训练集中的每个样本的距离,选择K个最近邻,然后根据这K个最近...

    机器学习笔记

    《机器学习笔记》是基于Andrew Ng的机器学习课程编写的,包含了作者的个人理解和实践心得。这份笔记深入浅出地探讨了多个机器学习的核心概念和技术,旨在帮助读者掌握这一领域的关键知识。 首先,我们从“线性回归...

    哈工大机器学习课件-5

    【哈工大机器学习课件-5:逻辑回归】 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的统计学习方法,特别是在二分类问题中。它虽然名字中含有“回归”,但其实是一种判别模型,用于预测离散的目标变量...

    机器学习中线性模型的PPT与实现代码

    线性模型是机器学习领域中最基础且广泛应用的算法之一,其简洁、易于理解和高效的特点使得它在各种数据预测任务中占据重要地位。本资源包含了一份关于线性模型的PPT和使用Python实现线性模型的代码,对于学习和实践...

    机器学习-聚类kmeans实现

    在机器学习领域,聚类是一种无监督学习方法,主要用于数据的分类和组织,不依赖于预先标记的数据。其中,K-Means是最为常见的聚类算法之一,它以简单、高效而著称。本篇文章将深入探讨K-Means算法的基本原理、改进...

    用各种机器学习对中文微博进行情感分析【毕业设计源码】.zip

    用各种机器学习对中文微博进行情感分析【毕业设计源码】 项目介绍 1、用FastText在语料库上训练并生成词向量, 该任务语料库较小, 用fastText可以增加n-gram特征, 比传统word2vec要好 2、训练集10000条语料, 测试集...

    陈强《机器学习及Python应用》全数据集、课件及勘误表 非电子书,不涉及版权问题

    《机器学习及Python应用》是陈强教授的一门课程,涵盖了广泛的机器学习理论与实践,以及如何使用Python这一强大的编程语言来实现这些方法。这个压缩包包含的数据集、课件和勘误表为学习者提供了丰富的资源,可以深入...

    机器学习算法-基于机器学习回归算法实现的波士顿房屋租赁价格预测.zip

    在机器学习领域,回归分析是一种预测性建模技术,它被广泛应用于预测连续数值型的目标变量。本项目“机器学习算法-基于机器学习回归算法实现的波士顿房屋租赁价格预测”聚焦于如何运用回归算法来预测房屋的租金价格...

    机器学习算法基础-逻辑回归

    逻辑回归是一种广泛应用于分类问题的统计学方法,尤其在机器学习领域中占据着重要的地位。它不仅简单易懂,而且计算效率高,适用于处理中等规模的数据集。本课程将深入探讨逻辑回归的基础知识,包括其原理、实现过程...

    机器学习与机器人_38

    机器学习与机器人_38 机器学习与机器人_38是指通过强化学习和机器人技术实现智能机器人的开发。该领域旨在解决机器人在未知环境中的决策问题,通过学习和优化机器人的行为策略来实现机器人的智能化。 强化学习是...

    机器学习玩吃豆人.zip

    《机器学习玩吃豆人》 在当今的AI领域,机器学习已经成为了一项核心技术,它不仅在复杂的图像识别、自然语言处理等领域大放异彩,甚至已经渗透到我们的娱乐生活中,比如让计算机玩游戏。"机器学习玩吃豆人"就是一个...

    机器学习和大数据-2015年夏季百题讲座

    此次讲座虽然自称为“很粗浅”,但其实涵盖了大数据和机器学习的基础理论以及实用案例,非常适合初学者入门和中级学习者巩固知识。 首先,讲座介绍了大数据的定义和特点。大数据(Big Data)是指那些传统数据处理...

    机器学习练习线性回归代码

    线性回归是机器学习中最基础且重要的算法之一,它...通过这个"机器学习练习线性回归代码"的实践,你不仅能掌握线性回归的基本操作,还能了解到其在逻辑回归中的应用,这将为你在人工智能和数据挖掘领域打下坚实基础。

    人工智能领域的机器学习算法研究综述

    机器学习(Machine Learning, ML)作为人工智能的一个重要分支,是一门多领域的交叉学科,其研究范围广泛,包括高等数学、统计学、概率论等。机器学习致力于使计算机通过模拟人类学习行为,来获得新的知识,并利用已...

    经典机器学习算法实现.zip

    在IT领域,机器学习是数据分析的一个重要分支,它允许计算机系统通过经验来改善其性能,而无需显式编程。...通过学习和实践这些代码,你可以深入理解机器学习的核心思想,并能应用于实际的数据分析项目。

    回归、分类与聚类:三大方向剖解机器学习算法的优缺点

    回归、分类与聚类:三大方向剖解机器学习算法的优缺点 机器学习是现代计算机科学中最重要的技术之一,它...因此,我们需要根据具体的问题来选择适合的算法,并对算法的优缺点进行了解,以便更好地应用机器学习算法。

Global site tag (gtag.js) - Google Analytics