摘要: 本文讲述了如何用Python实现Andrew Ng经典机器学习课程。

几个月前,我在Coursera(免费大型公开在线课程项目)上完成Andrew Ng机器学习的MOOC教学。对于任何一个想进入人工智能和机器学习世界的人来说,这都是一个很好的入门课程,但其中的项目是用Octave语言编写的。我一直想知道这门课如果用Python的话该有多么神奇,最终我决定重做一遍,这次用Python来完成。

在这一系列的博文中,我打算用Python编写程序。这么做有以下几个原因:

1、这会帮助那些想要Python版本课程的人;

2.、对于有些R语言爱好者来说,他们也愿意学习熟悉的那些算法的Python实现,那会受益匪浅;

基础知识

强烈建议你先看第1周的视频讲座,之后就应该对Python的体系结构有基本的了解。

在这一节中,我们将研究最简单的机器学习算法。

仅有一个变量的线性回归

首先是关于场景的描述。在这里,我们将仅用一个变量来执行线性回归以预测一个食品货车的收益。假设你是一家餐厅的CEO,正在考虑在每个不同的城市开设一家分店,并且在各个城市都有货车,你可以从这些分店获得收益和顾客的相关数据。

ex1data1.txt文件包含了我们线性回归练习的数据集。第一列表示城市的人口,第二列是该城市的食品货车的收益。如果收益为负则表示亏损。

首先,与执行任何机器学习任务一样,我们需要导入一些库

读取数据并进行可视化

在开始任何任务之前,通过可视化数据来理解数据通常来说是非常有用的。对于这个数据集,可以利用散点图来可视化数据,然而它只有两个属性(收益和用户)。

(在现实生活中我们遇到的许多问题都是多维的,不能仅仅用二维图来表示。要创建多维的表达方式,必须要灵活地运用各种表现形式,如色彩、形状、深度等。)

这里我们使用了pandas的read_csv函数来读取以逗号分隔的一组值。此外,我们还使用了head函数来查看数据的前几行。

添加拦截项

在下面的代码中,我们给数据添加另一个维度以适应拦截项(这么做的原因已在视频中进行了解释)。我们还将参数theta初始化为0,并把学习率alpha初始化为0.01。

使用np.newaxis可以将一维数组(shape: N elements)转换为行向量(shape: N rows, 1 column)或列向量(shape: 1 row, N columns)。在这里,我们将X和y重新排列到列向量里。

下一步,我们将计算成本和梯度下降,Andrew Ng在视频讲座中很好地讲解了这一操作过程。这里我仅提供Andrew Ng在讲座中使用的基于Python的伪代码。

成本计算

你应该期望看到成本的计算结果是32.07。

用梯度下降法求最优参数

期望的theta值的范围是[-3.6303, 1.1664]。

我们现在有了优化的theta值,利用上面的theta值来计算:

上面的输出应该会给你一个比32.07更好的结果:4.483。

绘制最佳拟合线图

让我们用扩展线性回归的思路来处理多个独立的变量。

多元线性回归

情景描述:

假设你正在出售房子,你想知道近期比较好的市场价格。一个方式是首先收集最近房子买卖的信息,并创建一个房子价格模型。你的任务是基于其它的变量来预测房价:

文件ex1data2.txt包含一组俄勒冈州波特兰市的房子价格数据。第一列是房子的面积,第二列是卧室的数量,第三列是房子的价格。

在前一节中你已经创建了必要的基础环境,这些基础环境也可以很方便地应用在本节中。在这里,将使用我们在上一节中所给的公式进行计算。

正如在上面看到的那样,我们正在处理的不止是一个独立变量(你在前一节中所学习的概念也适用于这里)。

特征标准化

通过观察这些数据,我们注意到房子的面积大约是卧室数量的1000倍。当特征量级不同的时候,首先执行特征比例缩放操作可以使梯度下降收敛地更快。

我们的任务是:

从数据集中减去每个特征的平均值;

在减去平均值之后,再按各自的“标准偏差”缩放(分配)特征值;

增加拦截项和初始化参数

成本计算

你应该期望看到一个输出的成本是65591548106.45744。

用梯度下降法求最优参数

你的最优参数应该是 [[334302.06399328],[ 99411.44947359], [3267.01285407]]。

我们现在有了优化过的theta值,使用上面输出的theta值。

这应该会输出一个比65591548106.45744好很多的值:2105448288.6292474。

现在你已经学会如何用一个或多个独立变量执行线性回归了。

本文作者:【方向】

本文为云栖社区原创内容,未经允许不得转载。

python开发精典课程_Andrew Ng经典机器学习课程的Python实现(第1部分)相关推荐

  1. 使用python下载网易云课堂中Andrew Ng的机器学习课程

    看了网易云课堂上stanford大学教授Andrew Ng的机器学习课程,觉得很不错,就想下载下来,正好也在学习python,所以就有了这么一段代码.参考了博客http://blog.csdn.net ...

  2. Python开发工程师必知十大机器学习库

    Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,再加上其简单.易学.速度快.开源免费.可移植性.可扩展性以及面向对象的特点,Python成为2017年最受欢迎的最受欢迎的编程 ...

  3. python编程入门电子书下载-最经典的25本Python编程开发电子书(附下载地址)!...

    如果,有人想转行程序猿,而让给出"如何切入编程"的建议的话,许多人一定毫不犹豫地向他推荐"Python"! 没错,就是这样一只Python,它让众多程序开发者, ...

  4. python开发工程师面试题-分析经典Python开发工程师面试题

    你知道吗?实际上Python早在20世纪90年代初就已经诞生,可是火爆时间却并不长,就小编本人来说,也是前几年才了解到它.据统计,目前Python开发人员的薪资待遇为10K以上,这样的诱惑很难让人拒绝 ...

  5. 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...

    AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于全国计算机等级(NCRE)体系调整"的通知,决定自2018年3月起,在全 ...

  6. python开发工具排名-7款公认比较出色的Python IDE,你值得拥有!

    Python作为一款比较"简洁"的编程语言,它拥有很多性价比高的性能,造就了它现在比较火热的局面,很多人都来学习Python.Python 的学习过程少不了 IDE 或者代码编辑器 ...

  7. python开发面试问题及答案_前50个Python面试问题(最受欢迎)

    热门Python面试问答 下面列出的是关于Python编程语言的最常见面试问题和答案. 让我们探索!! #1)Python可以用于Web客户端和Web服务器端编程吗?哪一个最适合Python? 答案: ...

  8. python开发面试问题及答案_集锦 | 53个Python面试问题 答案打包带走

    作者丨Chris来源丨AI科技大本营(ID:rgznai100)链接丨https://towardsdatascience.com/53-python-interview-questions-and- ...

  9. python开发app的软件_python可以写APP吗(python能做手机软件吗)

    一枚程序媛程序媛2 人赞同了该文章用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲这里介绍几款可以在手机上编程的a ...

最新文章

  1. linux vim怎么回退,[Linux] Vim 撤销 回退 操作
  2. 计算机网络:九大命令!解决网络故障新思路
  3. 计算机游戏50关,YELLOW游戏全50关攻略
  4. trie树 mysql_Trie树详解(转)
  5. java 导出bcp文件格式_使用BCP导出导入数据
  6. Rust中mut, , mut的区别
  7. POJ1958 Strange Towers of Hanoi [递推]
  8. Sublime 自定义格式化快捷键
  9. WebNN 人物检测、人脸识别、超分辨率、图像字幕、情感分析、噪声抑制
  10. MySQl 安装失败 Starting Server启动失败,发生系统错误 1067, 进程意外终止. 解决方法...
  11. poj 1077 Eight(bfs,dbfs, A*)
  12. 拼多多API接口:item_search - 根据关键词取商品列表
  13. mame模拟器版大家来找碴外挂,python源码
  14. canvas 实现截图功能——截取图片的一部分
  15. 时间计算题100道_数学大作战!小学13000道计算题+20000道口算题立即领!
  16. Jetty插件运行报500错误
  17. 认识ZBrush? 4R7视图区
  18. 使用路由器上网微信qq绝地求生腾讯系打开慢或打不开的问题
  19. 正则表达式内的常用的函数 2
  20. 去除电脑弹窗广告的方法

热门文章

  1. 全面挖掘Java Excel API 使用方法
  2. 【原创】Mysql客户端如何处理中文
  3. WebKitGTK+ 编译
  4. 分析arm linux启动打印信息
  5. ERROR: Could not find a version that satisfies the requirement absl (from versions: none) ERROR: No
  6. Gstreamer1.16.2与Glib2 signals关键字冲突解决(十一)
  7. SpringBoot之打包错误
  8. tensorflow之exponential_decay
  9. Onvif之wsdl地址
  10. 人脸方向学习(七):Face Recognition-CosFace 解读