• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Feb 8th, 2019 141 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. import seaborn as sns
2. import pandas as pd
3. import numpy as np
4.
5.
6.
7. dom    = range(0,11)
8. H      = 8
9.
10. ## Noiseless paths
11. # Upward exponential --> 'Real' increase
12. f1  = lambda x : 10 + np.exp(0.33*x) / 3
13. y1  = [f1(x) for x in dom]
14.
15. # Downward exponential --> 'Real' decrease
16. f2  = lambda x : 10 - np.exp(0.33*x) / 3
17. y2  = [f2(x) for x in dom]
18.
19. # Upward exponential --> 'Fake' increase
20. f3  = lambda x : 10 + (-(x-5)**2 + 5**2) / 9
21. y3  = [f3(x) for x in dom]
22.
23. # Downward exponential --> 'Fake' increase
24. f4  = lambda x : 10 - (-(x-5)**2 + 5**2) / 9
25. y4  = [f4(x) for x in dom]
26.
27.
28. ## Noisy Paths
29. sigma = 0.75
30. y1_ = [f1(x) + np.random.randn()*sigma for x in dom]
31. y2_ = [f2(x) + np.random.randn()*sigma for x in dom]
32. y3_ = [f3(x) + np.random.randn()*sigma for x in dom]
33. y4_ = [f4(x) + np.random.randn()*sigma for x in dom]
34.
35.
36. # Plots
37. fig, (ax1,ax2) = plt.subplots(1,2, figsize=(14,5))
38. colors = ['g', 'r', 'orange', 'lightgreen']
39.
40. ax1.set_title("Noiseless")
41. ax1.axhline(10, color='k');
42. ax1.axvline( H, color='k',linestyle=':');
43. ax1.plot(dom,y1, marker='o', color=colors[0], label='Real Increase');
44. ax1.plot(dom,y3, marker='o', color=colors[2], label='Fake Increase');
45. ax1.plot(dom,y2, marker='o', color=colors[1], label='Real Decrease');
46. ax1.plot(dom,y4, marker='o', color=colors[3], label='Fake Decrease');
47. ax1.legend(frameon=True);
48.
49. ax2.set_title("Noisy")
50. ax2.axhline(10, color='k');
51. ax2.axvline( 8, color='k',linestyle=':');
52. ax2.plot(dom,y1_, marker='o', color=colors[0], label='Real Increase');
53. ax2.plot(dom,y3_, marker='o', color=colors[2], label='Fake Increase');
54. ax2.plot(dom,y2_, marker='o', color=colors[1], label='Real Decrease');
55. ax2.plot(dom,y4_, marker='o', color=colors[3], label='Fake Decrease');
56. ax2.legend(frameon=True);
57.
58. plt.tight_layout();
59. plt.savefig("noiseless_and_noisy.png");
60.
61.
62. # Simulated noisy data
63. N = 100
64. y = []
65. for i in range(N):
66.     y1  = [f1(x) + np.random.randn()*sigma for x in dom] + [100]; y.append(y1)
67.     y2  = [f2(x) + np.random.randn()*sigma for x in dom] + [200]; y.append(y2)
68.     y3  = [f3(x) + np.random.randn()*sigma for x in dom] + [300]; y.append(y3)
69.     y4  = [f4(x) + np.random.randn()*sigma for x in dom] + [400]; y.append(y4)
70.
71. ds = pd.DataFrame(y) / 100
72. ds.rename({11:'c'}, axis=1, inplace=True)
73. ds['y'] = ds[10] - ds[7]
74.
75.
76. # Train, validation and test
77. N     = len(ds)
78. N1    = int(N * 0.6)
79. N2    = int(N * 0.8)
80.
81. train = ds.iloc[:N1]
82. vali  = ds.iloc[N1:N2]
83. test  = ds.iloc[N2:]
84.
85. lags  = np.arange(0,11)
86.
87. # For Random Forest
88. train_X_RF = train[lags[:H]].values
89. train_y_RF = train['y'].values
90. vali_X_RF  = vali [lags[:H]].values
91. vali_y_RF  = vali ['y'].values
92. test_X_RF  = test [lags[:H]].values
93. test_y_RF  = test ['y'].values
94.
95. # For LSTM
96. train_X_LS = train[lags[:H]].values.reshape(len(train), H, 1)
97. train_y_LS = train[['y']].values
98. vali_X_LS  = vali [lags[:H]].values.reshape(len(vali ), H, 1)
99. vali_y_LS  = vali [['y']].values
100. test_X_LS  = test [lags[:H]].values.reshape(len(test ), H, 1)
101. test_y_LS  = test [['y']].values
102.
103. # Copy the test set (predictions will be added here)
104. te = ds.iloc[N2:].copy()
105.
106.
107. # Train the Random Forest Model
108. RF = RandomForestRegressor(random_state=0, n_estimators=20)
109. RF.fit(train_X_RF, train_y_RF);
110.
111. # Out-of-sample Prediction (Random Forest)
112. te['RF'] = RF.predict(test_X_RF)
113.
114. # Train the LSTM Model
115. model = Sequential()
116. model.add(LSTM((1), batch_input_shape=(None, H, 1), return_sequences=True))
119. history = model.fit(train_X_LS, train_y_LS, epochs=100, validation_data=(vali_X_LS, vali_y_LS), verbose=0)
120.
121. # Out-of-sample Prediction (LSTM)
122. te['LSTM'] = model.predict(test_X_LS)
123.
124.
125. # Plot Results
126. fig, (ax1,ax2) = plt.subplots(1,2, figsize=(15,5), sharey=True)
127.
128. ax1.set_title("Random Forest")
129. (te[te['c']==1]*100).plot.scatter('RF', 'y', ax=ax1, color=colors[0], s=50, alpha=0.75);
130. (te[te['c']==2]*100).plot.scatter('RF', 'y', ax=ax1, color=colors[1], s=50, alpha=0.75);
131. (te[te['c']==3]*100).plot.scatter('RF', 'y', ax=ax1, color=colors[2], s=50, alpha=0.75);
132. (te[te['c']==4]*100).plot.scatter('RF', 'y', ax=ax1, color=colors[3], s=50, alpha=0.75);
133. ax1.xaxis.set_label_text("Prediction");
134. ax1.yaxis.set_label_text("Target");
135.
136. ax2.set_title("LSTM")
137. (te[te['c']==1]*100).plot.scatter('LSTM', 'y', ax=ax2, color=colors[0], s=50, alpha=0.75);
138. (te[te['c']==2]*100).plot.scatter('LSTM', 'y', ax=ax2, color=colors[1], s=50, alpha=0.75);
139. (te[te['c']==3]*100).plot.scatter('LSTM', 'y', ax=ax2, color=colors[2], s=50, alpha=0.75);
140. (te[te['c']==4]*100).plot.scatter('LSTM', 'y', ax=ax2, color=colors[3], s=50, alpha=0.75);
141. ax2.xaxis.set_label_text("Prediction");
142. ax2.yaxis.set_label_text("Target");
143.
144. plt.tight_layout();
145.
146. plt.savefig("experimental_results.png");
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Top