[机器学习系统设计(一)]数据导入,预处理与一次二次拟合

目录:

1.数据的读取

2.数据的预处理

3.一次拟合

4.二次拟合

5.分段拟合

6.画图

案例:已收集某个网页每个小时被点击的次数,第一行数据为小时,第二行数据表示点击次数。现在需拟合出点击次数与时间的关系。

1.读取数据

(1)使用SciPy中的genfromtxt()读取数据

data=sp.genfromtxt("web_traffic.tsv",delimiter="\t")

(2)返回数据的长度

print (data.shape)

2.清洗数据

可以看到第二列中包含许多’NaN’值,需要去除这些无效的数据。

(1)返回无效值的个数

print sp.sum(sp.isnan(y))

(2)利用取反抽取有效值

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

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

3.一次拟合

(1)通过polyfit()拟合

fp1=sp.polyfit(x,y,1)

返回:fp1= 2.59619213  989.02487106

因此这条函数被拟合为f(x)= 2.59619213x+989.02487106

(2)通过poly1d()创建模型函数

f1=sp.poly1d(fp1)

4.二次拟合  fp2=sp.polyfit(x,y,2)

5.分段拟合

可以看到数据中间有明显的拐点,利用拐点将数据分成两段,分别拟合

guadian=588   #拐点:4*7*24

xa=x[:guadian]   #取拐点之前的数据

ya=y[:guadian]

xb=x[guadian:]   #去拐点之后的数据

yb=y[guadian:]

#两段数据分别拟合

fa=sp.poly1d(sp.polyfit(xa,ya,1))

fb=sp.poly1d(sp.polyfit(xb,yb,1))

6.画图:以一开始的画散点图为例

plt.scatter(x,y,c=‘b‘,marker=‘o‘)                          #画散点图

plt.title("Web traffic")                #标题

plt.xlabel(‘time‘)                       #x轴标签

plt.ylabel(‘Hits/hour‘)                 #y轴标签

plt.xticks([w*7*24 for w in range(10)],[‘week %i‘%w for w in range(10)])   #x轴刻度值

plt.autoscale(tight=True)

plt.grid()

plt.show()

代码:

# -*- coding: utf-8 -*-

import scipy as sp
import matplotlib.pyplot as plt

#Step 1: 读取数据
#使用SciPy中的genfromtxt()读取数据
data=sp.genfromtxt("web_traffic.tsv",delimiter="\t")  #文件名,分隔符
print (data.shape)    #(743L, 2L) 返回长度

#Step 2: 预处理和清洗数据
x=data[:,0]
y=data[:,1]
sp.sum(sp.isnan(y))  #返回y中无效值nan的总数

x=x[~sp.isnan(y)]    #清洗掉y中的nan值
y=y[~sp.isnan(y)]

#画图
plt.scatter(x,y,c=‘b‘,marker=‘o‘)                          #画散点图
plt.title("Web traffic")                #标题
plt.xlabel(‘time‘)                       #x轴标签
plt.ylabel(‘Hits/hour‘)                 #y轴标签
plt.xticks([w*7*24 for w in range(10)],[‘week %i‘%w for w in range(10)])   #x轴刻度值
plt.autoscale(tight=True)
plt.grid()
plt.show()

#Step 3:直线拟合
fp1,residuals,rank,sv,rcond=sp.polyfit(x,y,1,full=True)
print("模型参数:%s"% fp1)  #2.59619213  989.02487106 即f(x)=2.59x+989
print(residuals)    #3.17389767e+08 返回残差

f1=sp.poly1d(fp1)
fx=sp.linspace(0,x[-1],1000)                       #取x的值。技巧x[-1]
plt.plot(fx,f1(fx),linewidth=4,color=‘r‘)         #f1(fx)为对应的y值
plt.legend(["d=%i"%f1.order],loc="upper left")     #左上角标记

plt.scatter(x,y,c=‘b‘,marker=‘.‘)
plt.title("Web traffic")
plt.xlabel(‘time‘)
plt.ylabel(‘Hits/hour‘)
plt.xticks([w*7*24 for w in range(10)],[‘week %i‘%w for w in range(10)])
plt.autoscale(tight=True)
plt.grid()
plt.show()

#Step 4:二次拟合
fp2=sp.polyfit(x,y,2)  #2表示拟合的次数为二
print("模型参数:s"% fp2)
f2=sp.poly1d(fp2)

fx=sp.linspace(0,x[-1],1000)
plt.plot(fx,f2(fx),linewidth=4,color=‘r‘)
plt.legend(["d=%i"%f2.order],loc="upper left")

plt.scatter(x,y,c=‘b‘,marker=‘.‘)
plt.title("Web traffic")
plt.xlabel(‘time‘)
plt.ylabel(‘Hits/hour‘)
plt.xticks([w*7*24 for w in range(10)],[‘week %i‘%w for w in range(10)])
plt.autoscale(tight=True)
plt.grid()
plt.show()

#Step 5:分段拟合
guadian=588   #拐点:4*7*24
xa=x[:guadian]   #取拐点之前的数据
ya=y[:guadian]
xb=x[guadian:]   #取拐点之后的数据
yb=y[guadian:]

#两段数据分别拟合
fa=sp.poly1d(sp.polyfit(xa,ya,1))
fb=sp.poly1d(sp.polyfit(xb,yb,1))

#画图
fx1=sp.linspace(0,xa[-1],1000)
fx2=sp.linspace(xb[0],xb[-1],1000)
plt.plot(fx1,fa(fx),linewidth=4,color=‘r‘)
plt.plot(fx2,fb(fx),linewidth=4,color=‘r‘)
plt.scatter(x,y,c=‘b‘,marker=‘.‘)
plt.title("Web traffic")
plt.xlabel(‘time‘)
plt.ylabel(‘Hits/hour‘)
plt.xticks([w*7*24 for w in range(10)],[‘week %i‘%w for w in range(10)])
plt.axis([0,750,1000,6000])     #定义x,y轴范围
plt.grid()
plt.show()

运行结果:

时间: 2024-10-27 19:44:33

[机器学习系统设计(一)]数据导入,预处理与一次二次拟合的相关文章

《机器学习系统设计》之数据理解和提炼

前言: 本系列是在作者学习<机器学习系统设计>([美] Willi Richert)过程中的思考与实践,全书通过Python从数据处理,到特征工程,再到模型选择,把机器学习解决问题的过程一一呈现.书中设计的源代码和数据集已上传到我的资源http://download.csdn.net/detail/solomon1558/8971649. 第1章通过一个简单的例子介绍机器学习的基本概念,揭示过拟合的风险,帮助我们增强理解和提炼数据的能力. 1. 背景介绍 假设互联网公司MLAAS为所有Web访

机器学习实战:数据预处理之独热编码(One-Hot Encoding)

问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from Europe", "from US", "from Asia"] ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet

python数据分析入门——数据导入数据预处理基本操作

数据导入到python环境:http://pandas.pydata.org/pandas-docs/stable/io.html(英文版) IO Tools (Text, CSV, HDF5, ...)? The pandas I/O API is a set of top level reader functions accessed like pd.read_csv() that generally return a pandasobject. read_csv read_excel re

【炼数成金 RapidMiner 二 】数据导入、预处理、导出

(1)链接数据库 (2)选择相关数据 (3)导入数据显示 (4)第二种方案 直接打开一个csv文件 (5) 设定存储位置 得到插入csv文件的数据表 (6)元数据视图和"数据视图"中查看数据集.注意是否有任何属性具有缺失或不一致的数据. (7)替换缺失值 结果buying属性下的缺失个数为0 (7)使用过滤器 过滤其他的缺失数据 元数据缺失的数据 被删除 [炼数成金 RapidMiner 二 ]数据导入.预处理.导出

LibRec: 基于机器学习的大数据推荐系统

简介: LibRec 是领先的推荐系统Java开源算法工具库,覆盖了70余个各类型推荐算法,有效解决评分预测和物品推荐两大关键的推荐问题.推荐系统是机器学习和大数据技术的经典实际应用,旨在提供高效准确的个性化物品推荐,是现代Web应用的重要组件. 项目结构清晰,代码风格良好,测试充分,注释与手册完善.目前项目使用GPL3.0协议开源在github中,欢迎大家试用. Librec: http://www.librec.net/ GithubRepo:  https://github.com/guo

《机器学习系统设计》之应用scikit-learn做文本分类(上)

前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理,到特征工程,再到模型选择,把机器学习解决问题的过程一一呈现.书中设计的源代码和数据集已上传到我的资源:http://download.csdn.net/detail/solomon1558/8971649 第3章通过词袋模型+K均值聚类实现相关文本的匹配.本文主要讲解文本预处理部分内容,涉及切分文本.数据清洗.计算TF-IDF值等内容. 1. 统计词语 使用一个

机器学习系统设计--1.4

Building Machine  Learning Systems with Python ------------------- 代码: https://github.com/Leechen2014/1400OS_01_Codes author 振在远方 --------------------- 偶然间得到一本书:<<机器学习系统设计>> , 于是有了想看的冲动. 并且在github上上传了相关代码. 希望通过这本书可以打开通往机器学习的大门. ---来自一个在机器学习道路上

《机器学习系统设计》之应用scikit-learn做文本分类(下)

前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理,到特征工程,再到模型选择,把机器学习解决问题的过程一一呈现.书中设计的源代码和数据集已上传到我的资源:http://download.csdn.net/detail/solomon1558/8971649 第3章通过词袋模型+K均值聚类实现相关文本的匹配.本文主要讲解K-均值聚类相关知识以及在20newsgroup数据集上使用K-均值聚类进行测试.     相关

机器学习系统设计(Building Machine Learning Systems with Python)- Willi Richert Luis Pedro Coelho

机器学习系统设计(Building Machine Learning Systems with Python)- Willi Richert Luis Pedro Coelho 总述 本书是 2014 的,看完以后才发现有第二版的更新,2016.建议阅读最新版,有能力的建议阅读英文版,中文翻译有些地方比较别扭(但英文版的书确实是有些贵). 我读书的目的:泛读主要是想窥视他人思考的方式. 作者写书的目标:面向初学者,但有时间看看也不错.作者说"我希望它能激发你的好奇心,并足以让你保持渴望,不断探索