热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《机器学习系统设计》学习笔记(2)

一个真实的例子:根据一家公司服务器过去的访问量来预测未来的访问量。具体步骤:1.读取数据:服务器的访问量被记录成一个csv文件web_traffic.csv,格式如下:12272

一个真实的例子:根据一家公司服务器过去的访问量来预测未来的访问量。

具体步骤:

1.读取数据:

服务器的访问量被记录成一个csv文件web_traffic.csv,格式如下:

1 2272
2 nan
3 1386
4 1365
5 1488
6 1337
7 1883
8 2283
9 1335
10 1025
11 1139
12 1477

数据中第一列是小时数,第二列是那个小时访问的访问量。使用scipy这个工具将它读入一个scipy自定义的用于科学计算的数组(代码如下):

import scipy as sp
data = sp.genfromtxt("web_traffic.tsv",delimiter=\'\t\')
print data[:10]

上述代码包含打印数据前十行的逻辑,其结果如下。

[[ 1.00000000e+00 2.27200000e+03]
[ 2.00000000e+00 nan]
[ 3.00000000e+00 1.38600000e+03]
[ 4.00000000e+00 1.36500000e+03]
[ 5.00000000e+00 1.48800000e+03]
[ 6.00000000e+00 1.33700000e+03]
[ 7.00000000e+00 1.88300000e+03]
[ 8.00000000e+00 2.28300000e+03]
[ 9.00000000e+00 1.33500000e+03]
[ 1.00000000e+01 1.02500000e+03]]

关于对科学数组的操作,可以参考如下网页:http://wiki.scipy.org/Tentative_NumPy_Tutorial

2.做数据清洗和预处理

我们发现这些数据项中有一些无效的值,瞧见数据中被标红的nan么?这代表了无效信息。我们统计一下样例数据集中无效数据的个数

x = data[:,1]
y = data[:,1]
sp.sum(sp.isnan(y))

我们得到结果为8,也就是8个无效数据,而数据集的个数是743,可以忍。我们把它洗掉。btw,numpy工具还是很方便的。

x = x[~sp.isnan(y)]
y = y[~sp.isnan(y)]

为了得到更加直观的印象,我们将它可视化。这时候就使用到了图形工具Matplotlib. 第一次使用,和Matlib很像,当年可是用Matlib画了不少图。

 

我们看到,很明显趋势是个上升趋势,但怎么做出预测呢?

使用Matplotlib画图的教程如下:http://matplotlib.org/users/pyplot_tutorial.html  

我这里上不去,只能用代理上,怀疑被墙了,有同学说不是。如果你跟我遇到同样问题,可以试试代理。先不F 我们的GFW了。 pyplot包的用法见下面链接:http://matplotlib.org/api/pyplot_api.html 同样自己想办法。

 

3.使用正确的模型和学习方法

我们不知道模型是什么,我们要找到它,并且用拟合出来的模型来预测未来!

从上面的图,我第一个印象是我本科时代学的一门课:数值逼近。数值逼近的核心就是根据现有数据找到规律,也就是拟合函数。读下去发现,书中的例子就是一种典型的数值逼近方法,但是记得当时的课程没有迭代和学习这个概念。继续往下看。

 

假定这个函数为f,那么怎么判定这个函数是一个较好的模型呢?常见的做法就是看样本数据与函数之间的误差和有多大,为了避免负数,一般会用方差。这样就定义了一个函数:

def error(f,x,y):
    return sp.sum((f(x)-y)**2)

 

f是什么样子的呢?,最简单的就是一次函数 我们f定义为 f(x) = ax +b 现在的工作就是要确定a和b是什么了。SciPy中有个ployfit函数,可以让我们走捷径。它能够找出a和b,使得上面定义的error返回最小值(也就是对数据最拟合)

   fp1, residuals, rank, sv, rcOnd= sp.polyfit(x,y,1,full =True)
   print fp1

其中fp1是一个二维数组,里边有a和b的值

打印出来的值为[2.59619213  989.02487106]

我们得到了线性函数 f(x)= 2.59619213x + 989.02487106

它的误差有多大呢?还记得那个error函数么?

我们用如下代码构造一个这样的函数:

f1 = sp.poly1d(fp1)
print (error(f1,x,y))

我们得到了一个结果:317389767.34 结果好不好呢?先不说。画张图看看。加入如下代码:

fx = sp.linspace(0,x[-1],1000) #生成X来作图
    plt.plot(fx,f1(fx),linewidth=4) #画出曲线
    plt.legend(["d=%i" % f1.order],loc ="upper left") #角标

得到的图如下:

很明显从图里边看出来,从第四周开始,这条直线显然代表不了那些数据点了。317389767.34这个值好不好呢?因为全是做的拟合,肯定都有误差。我们先拿这个数保底,看看能不能找到更好的模型吧。从这里看,显然一次线性函数不是描述模型的好选择。后面就是尝试不同的迭代方法了。 How? 下节继续吧。

 

btw,要是上大学的时候有这本书该多好!现在的小朋友们真是幸福。想学东西会有这么多好资源。

 


推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
author-avatar
mobiledu2502873827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有