【发布时间】:2018-07-23 18:42:09
【问题描述】:
我正在学习“使用 Python 构建机器学习系统(第 2 次)”。 我在第一章的答案部分有一个愚蠢的怀疑。 根据这本书和我的观察,我总是将二阶多项式作为最佳拟合曲线。 每当我用训练数据集训练我的系统时,对于不同的多项式函数,我都会得到不同的测试错误。 因此我的方程参数也不同。 但令人惊讶的是,我每次在 9.19-9.99 范围内都会得到大致相同的答案。 我的最终假设函数每次都有不同的参数,但我得到的答案大致相同。 谁能告诉我背后的原因? [仅供参考:我正在寻找 y=100000 的答案] 我正在分享代码示例和每次迭代的输出。
以下是错误和相应的答案:
- https://i.stack.imgur.com/alVzU.png
- https://i.stack.imgur.com/JVGSm.png
- https://i.stack.imgur.com/RB53X.png
提前致谢!
def error(f, x, y):
return sp.sum((f(x)-y)**2)
import scipy as sp
import matplotlib.pyplot as mp
data=sp.genfromtxt("web_traffic.tsv",delimiter="\t")
x=data[:,0]
y=data[:,1]
x=x[~sp.isnan(y)]
y=y[~sp.isnan(y)]
mp.scatter(x,y,s=10)
mp.title("web traffic over the month")
mp.xlabel("week")
mp.ylabel("hits/hour")
mp.xticks([w*24*7 for w in range(10)],["week %i"%i for i in range(10)])
mp.autoscale(enable=True,tight=True)
mp.grid(color='b',linestyle='-',linewidth=1)
mp.show()
infletion=int(3.5*7*24)
xa=x[infletion:]
ya=y[infletion:]
f1=sp.poly1d(sp.polyfit(xa,ya,1))
f2=sp.poly1d(sp.polyfit(xa,ya,2))
f3=sp.poly1d(sp.polyfit(xa,ya,3))
print(error(f1,xa,ya))
print(error(f2,xa,ya))
print(error(f3,xa,ya))
fx=sp.linspace(0,xa[-1],1000)
mp.plot(fx,f1(fx),linewidth=1)
mp.plot(fx,f2(fx),linewidth=2)
mp.plot(fx,f3(fx),linewidth=3)
frac=0.3
partition=int(frac*len(xa))
shuffled=sp.random.permutation(list(range(len(xa))))
test=sorted(shuffled[:partition])
train=sorted(shuffled[partition:])
fbt1=sp.poly1d(sp.polyfit(xa[train],ya[train],1))
fbt2=sp.poly1d(sp.polyfit(xa[train],ya[train],2))
fbt3=sp.poly1d(sp.polyfit(xa[train],ya[train],3))
fbt4=sp.poly1d(sp.polyfit(xa[train],ya[train],4))
print ("error in fbt1:%f"%error(fbt1,xa[test],ya[test]))
print ("error in fbt2:%f"%error(fbt2,xa[test],ya[test]))
print ("error in fbt3:%f"%error(fbt3,xa[test],ya[test]))
from scipy.optimize import fsolve
print (fbt2)
print (fbt2-100000)
maxreach=fsolve(fbt2-100000,x0=800)/(7*24)
print ("ans:%f"%maxreach)
【问题讨论】:
标签: python python-3.x machine-learning linear-regression web-traffic