0

0

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

php中文网

php中文网

发布时间:2016-07-13 10:39:00

|

1029人浏览过

|

来源于php中文网

原创

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载

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

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

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

 

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

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

   

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

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

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

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

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

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

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

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

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

Ruby代码如下:
 

  1. @posts = Post.all
  2.  
  3. @words = @posts.map do |p|
  4.   p.body.split(' ')
  5. end.flatten.uniq
  6.  
  7. @vectors = @posts.map do |p|
  8.   @words.map do |w|
  9.     p.body.include?(w) ? 1 : 0
  10.   end
  11. 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. @cluster_centers = [rand_point(), rand_point()]
  2.  
  3. 15.times do
  4.   @clusters = [[], []]
  5.  
  6.   @posts.each do |post|
  7.     min_distance, min_point = nil, nil
  8.  
  9.     @cluster_centers.each.with_index do |center, i|
  10.       if distance(center, post)
  11.         min_distance = distance(center, post)
  12.         min_point = i
  13.       end
  14.     end
  15.  
  16.     @clusters[min_point]
  17.   end
  18.  
  19.   @cluster_centers = @clusters.map do |post|
  20.     average(posts)
  21.   end
  22. end
     

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

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

结果不言自明。

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

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

  • Wiki百科(例如:潜在语义索引,聚类分析)
  • 开源机器学习库的源代码(例如: Scipy’s K-Means,Scikit’s DBSCAN)
  • 以程序员的角度编写的书籍(例如:集体智慧编程,黑客机器学习)
  • 可汗学院

试一试

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

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



原文链接: Intercom   翻译: 伯乐在线 - zhibinzeng
译文链接: http://blog.jobbole.com/53546/


======================================================
PPC微信平台开通啦!
微信搜索“PHPChina”,点击关注按钮,即可获得PPC为您推送的最新最专业的业界信息,更有更多专题栏目为您献上
【PPC挖掘】: 不定时为您献上经典产品与产品人的故事。
【PPC外文】: 每日分享一篇外文翻译文章
【PPCoder】: 每日集中回复关注用户的提问

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/735054.htmlTechArticle很多人觉得机器学习高不可攀,认为这是一门只有少数专业学者才了解的神秘技术。 毕竟,你是在让运行在二进制世界里的机器得出它自己...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XML教程
XML教程

共142课时 | 8.2万人学习

光速学会docker容器
光速学会docker容器

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号