码迷,mamicode.com
首页 > 其他好文 > 详细

第一章 一个极小的机器学习应用 构建第一个模型

时间:2016-04-18 22:24:54      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

误差计算

使用预测值到真实值距离的平方来计算误差

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

从一条简单的直线开始

scipy中的polyfit(多项式拟合)函数用户解决这个问题。

给定数据x和y,以及期望的多项式的阶(直线的阶是1)可以找到一个模型,能够最小化之前定义的误差函数

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

该函数会把拟合函数所使用的参数返回,即fp1=

[ 2.59619213 989.02487106];把full设置为true可以获得更多逼近过程的背景信息。

在这里我们对残差感兴趣,即近似误差

# 散点坐标图
plt.scatter(x, y)
# x坐标
plt.xlabel(Time)
plt.ylabel(Hits/hour)
# tick 标记号于
plt.xticks([w*7*24 for w in range(10)],
           [week %i%w for w in range(10)])
# 自动测量/规模 tight=紧
plt.autoscale(tight=True)

fp1, residuals, rank, sv, rcond = sp.polyfit(x, y, 1, full=True)
print fp1
# 根据参数创建模型
f1 = sp.poly1d(fp1)


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

print error(f1, x, y)

# 生成x值用于作图
fx = sp.linspace(0, x[-1], 1000)
plt .plot(fx, f1(fx), linewidth=4)
plt.legend(["d=%i" % f1.order], loc="upper left")


# 2阶多项式
f2p = sp.polyfit(x, y, 2)
f2 = sp.poly1d(f2p)
print error(f2, x, y)

plt .plot(fx, f2(fx), linewidth=4)
plt.legend(["d=%i" % f1.order,"d=%i" % f2.order], loc="upper left")
# 开启网格
plt.grid()
# 显示图表
plt.show()

 

技术分享

 

第一章 一个极小的机器学习应用 构建第一个模型

标签:

原文地址:http://www.cnblogs.com/evoler/p/5405883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!