|
| 1 | +import scipy as sp |
| 2 | +import matplotlib.pyplot as plt |
| 3 | +import error as err |
| 4 | + |
| 5 | +#################################### |
| 6 | + |
| 7 | +inflection = (int)(3.5 * 7 * 24) # 変化点 |
| 8 | +print("Inflection %d" % inflection) |
| 9 | + |
| 10 | +data = sp.genfromtxt("./data/web_traffic.tsv", delimiter="\t") |
| 11 | +print(data.shape) |
| 12 | +x = data[:,0] |
| 13 | +y = data[:,1] |
| 14 | + |
| 15 | +xa = x[:inflection] |
| 16 | +ya = y[:inflection] |
| 17 | + |
| 18 | +xb = x[inflection:] |
| 19 | +yb = y[inflection:] |
| 20 | + |
| 21 | +frac = 0.3 # テストに用いるデータの割合 |
| 22 | +split_idx = int(frac * len(xb)) |
| 23 | +# 全データの30%をランダムに選び出す |
| 24 | +#shuffled = sp.random.permutation(list(range(len(xb)))) |
| 25 | +shuffled = sp.random.permutation(range(len(xb))) |
| 26 | +test = sorted(shuffled[:split_idx]) |
| 27 | +train = sorted(shuffled[split_idx:]) |
| 28 | + |
| 29 | +# それぞれ訓練データを用いて訓練を行う |
| 30 | +fbt1 = sp.poly1d(sp.polyfit(xb[train], yb[train], 1)) |
| 31 | +fbt2 = sp.poly1d(sp.polyfit(xb[train], yb[train], 2)) |
| 32 | +fbt3 = sp.poly1d(sp.polyfit(xb[train], yb[train], 3)) |
| 33 | +fbt10 = sp.poly1d(sp.polyfit(xb[train], yb[train], 10)) |
| 34 | +fbt100 = sp.poly1d(sp.polyfit(xb[train], yb[train], 100)) |
| 35 | + |
| 36 | +for f in [fbt1, fbt2, fbt3, fbt10, fbt100]: |
| 37 | + print("Error d=%i: %f" % (f.order, err.error(f, xb[test], yb[test]))) |
| 38 | + |
| 39 | +exit() |
| 40 | + |
| 41 | +fpa = sp.polyfit(xa, ya, 1) |
| 42 | +fpb = sp.polyfit(xb, yb, 1) |
| 43 | +fa = sp.poly1d(fpa) |
| 44 | +fb = sp.poly1d(fpb) |
| 45 | + |
| 46 | +fa_error = err.error(fa, xa, ya) |
| 47 | +fb_error = err.error(fb, xb, yb) |
| 48 | + |
| 49 | +print("Error inflection=%s" % "{:,f}".format(fa_error + fb_error)) |
| 50 | + |
| 51 | +# プロット |
| 52 | +fx = sp.linspace(0, x[-1], 1000) |
| 53 | + |
| 54 | +# 直線 |
| 55 | +plt.plot(fx, fa(fx), linewidth=4) |
| 56 | +plt.plot(fx, fb(fx), linewidth=4) |
| 57 | + |
| 58 | +# 分布 |
| 59 | +plt.scatter(x, y) |
| 60 | + |
| 61 | +#plt.legend(["d=%i" % f1.order], loc="upper left") |
| 62 | +plt.xlabel("Time") |
| 63 | +plt.ylabel("Hits/hour") |
| 64 | +plt.xticks([w*7*24 for w in range(10)], ['week %i' % w for w in range(10)]) |
| 65 | +plt.autoscale(tight=True) |
| 66 | +plt.grid() |
| 67 | +plt.ylim([0, 6500]) |
| 68 | +plt.show() |
| 69 | + |
0 commit comments