Scikit SVM回归预测结果恒定。

3
这是我的数据:(我重置了索引。日期应该作为索引)
          Date         A         B         C         D
0   2013-10-07 -0.002169  0.000000  0.000880 -0.002331
1   2013-10-08 -0.019130 -0.000781 -0.000251 -0.007678
2   2013-10-09 -0.003103  0.000586  0.000251  0.002463
3   2013-10-10  0.000222 -0.000455 -0.002511  0.006278
4   2013-10-11 -0.000667  0.001172  0.001007  0.004524
5   2013-10-15 -0.004893 -0.000715 -0.002137 -0.012329
6   2013-10-16  0.004023  0.001627  0.003276  0.006837
7   2013-10-17  0.044969  0.002923  0.006153  0.022494
8   2013-10-18  0.001278 -0.000648 -0.000749  0.006896
9   2013-10-21 -0.005106 -0.000778 -0.001249 -0.003728
10  2013-10-22  0.016724  0.003114  0.006503  0.020869
11  2013-10-23  0.010054  0.000323  0.001367  0.006243
12  2013-10-24  0.004373 -0.001099 -0.002109  0.001872
13  2013-10-25 -0.002695  0.001230  0.001741  0.001919
14  2013-10-28 -0.007484  0.000065 -0.000372 -0.003351
15  2013-10-29 -0.083787  0.000646  0.001242 -0.038611
16  2013-10-30 -0.015318 -0.000775 -0.001860 -0.008933
17  2013-10-31  0.008173  0.000000 -0.001243  0.003270
18  2013-11-01  0.011239 -0.002198 -0.004728  0.000181
19  2013-11-04 -0.006377  0.000907  0.001750 -0.007510
20  2013-11-05 -0.003896 -0.001100 -0.003494 -0.010495
21  2013-11-06  0.003221  0.002073  0.002880  0.009557
22  2013-11-07 -0.007339  0.001035  0.001748 -0.016102
23  2013-11-08 -0.027264 -0.004134 -0.008725 -0.025816
24  2013-11-12  0.000950 -0.001622 -0.001635 -0.009427
25  2013-11-13  0.016849  0.002404  0.003652  0.015164
26  2013-11-14  0.011435  0.002593  0.003890  0.012978
27  2013-11-15 -0.011537 -0.000323 -0.000875 -0.004545
28  2013-11-18 -0.014006  0.001164  0.001877 -0.006758
29  2013-11-19 -0.009943 -0.001615 -0.002498 -0.009685
30  2013-11-20 -0.009087 -0.000065 -0.003130 -0.001487
31  2013-11-21 -0.009653  0.000259  0.000126 -0.000506
32  2013-11-22 -0.007797  0.000259  0.000000 -0.004374
33  2013-11-25  0.008841  0.000582  0.000879  0.002273
34  2013-11-26 -0.030185  0.001680  0.003262 -0.016692
35  2013-11-27  0.030120 -0.000903 -0.002501  0.015866
36  2013-11-29 -0.006823 -0.000452 -0.000878 -0.001567
37  2013-12-02 -0.019627 -0.002261 -0.004141 -0.016061
38  2013-12-03 -0.007007  0.001295  0.001890  0.001628
39  2013-12-04 -0.004536 -0.002263 -0.006916 -0.001931
40  2013-12-05 -0.014684 -0.001491 -0.002026 -0.014200
41  2013-12-06 -0.009250 -0.001168 -0.001142 -0.003146
42  2013-12-09  0.026971  0.000325  0.001016  0.018498
43  2013-12-10  0.020707  0.002014  0.004188  0.013916
44  2013-12-11 -0.019792 -0.001556 -0.003033 -0.013172
45  2013-12-12  0.004543 -0.001818 -0.002155 -0.004465
46  2013-12-13  0.006030 -0.000065  0.000000 -0.002234
47  2013-12-16 -0.026973  0.000130 -0.000254 -0.008754
48  2013-12-17  0.013912  0.001561  0.002541  0.016070
49  2013-12-18  0.000456 -0.000520 -0.002028  0.009451
50  2013-12-19 -0.014676 -0.003899 -0.005207 -0.015776
51  2013-12-20  0.020544 -0.001109  0.000638  0.016717
52  2013-12-23  0.007549 -0.000849 -0.007655  0.008830
53  2013-12-24 -0.004496 -0.002157 -0.003986 -0.010028
54  2013-12-26  0.000000  0.000000 -0.000516 -0.003166
55  2013-12-27 -0.036126  0.000066 -0.000129 -0.020434
56  2013-12-30 -0.004164  0.001179  0.001292 -0.004986
57  2013-12-31  0.008364 -0.000785 -0.001419  0.009153
58  2014-01-02  0.005702 -0.007858  0.001421  0.009639
59  2014-01-03  0.009794 -0.000990 -0.000258  0.006071
60  2014-01-06  0.008678  0.001321  0.002452  0.010942
61  2014-01-07  0.009615  0.000924  0.001545  0.008863
62  2014-01-08 -0.004010 -0.004087 -0.004884 -0.003096
63  2014-01-09 -0.004529  0.000728  0.001679 -0.005076
64  2014-01-10  0.018200  0.005291  0.007994  0.013189
65  2014-01-13  0.015392  0.001447  0.002302  0.006763
66  2014-01-14 -0.014181 -0.002431 -0.003446 -0.011149
67  2014-01-15 -0.000496 -0.001054 -0.001665 -0.001026
68  2014-01-16  0.006452  0.001318  0.002565  0.002206
69  2014-01-17 -0.001479  0.000658  0.001407 -0.000089
70  2014-01-21  0.015802 -0.000526 -0.000383  0.012028
71  2014-01-22 -0.000486 -0.002172 -0.003323  0.001867
72  2014-01-23  0.013619  0.004684  0.006797  0.009262
73  2014-01-24 -0.001440  0.001051  0.002165 -0.003307
74  2014-01-27 -0.006728 -0.000787 -0.002034 -0.010011
75  2014-01-28  0.000484  0.001444  0.002038  0.004646
76  2014-01-29  0.003385  0.002884  0.004448 -0.003861
77  2014-01-30 -0.001446 -0.000784 -0.001392  0.009083
78  2014-01-31  0.011100  0.001308  0.002408  0.011112
79  2014-02-03  0.005251  0.003005  0.005688 -0.001566
80  2014-02-04  0.012821 -0.000847 -0.002262  0.004361
81  2014-02-05  0.020628 -0.001108 -0.002142  0.006778
82  2014-02-06 -0.005512 -0.000979 -0.002146 -0.007698
83  2014-02-07  0.015242  0.002352  0.002783  0.009203
84  2014-02-10  0.006824 -0.000521 -0.000252  0.006613
85  2014-02-11 -0.007682 -0.002087 -0.002903  0.000172
86  2014-02-12  0.001821 -0.001634 -0.002658  0.001173
87  2014-02-13  0.005455  0.002749  0.004188  0.011299
88  2014-02-14 -0.003617 -0.000718 -0.000885 -0.003636
89  2014-02-18  0.019964  0.002025  0.002656  0.015714
90  2014-02-19 -0.007562 -0.001499 -0.001640 -0.009813
91  2014-02-20 -0.006723 -0.001306 -0.001895 -0.003139
92  2014-02-21 -0.006318  0.000588  0.001013 -0.004718
93  2014-02-24  0.001362 -0.000523 -0.001012  0.006311
94  2014-02-25  0.003628  0.001699  0.002912  0.003420
95  2014-02-26  0.008134  0.001175  0.001893  0.011737
96  2014-02-27  0.003138  0.000912  0.001890  0.000666
97  2014-02-28 -0.004021 -0.000977 -0.001761  0.003881
98  2014-03-03  0.013908  0.001825  0.003653  0.004437
99  2014-03-04 -0.000442 -0.002602 -0.005272  0.000915
100 2014-03-05  0.002656 -0.000261  0.000000  0.004615
101 2014-03-06 -0.004415 -0.001305 -0.002524 -0.003209
102 2014-03-07 -0.024169 -0.003071 -0.003795 -0.021528
103 2014-03-10  0.004317  0.000721  0.000889  0.005172
104 2014-03-11 -0.003620  0.000655  0.001015 -0.002815
105 2014-03-12  0.019074  0.001243  0.002281  0.014510
106 2014-03-13  0.009804  0.000000  0.001897  0.007487
107 2014-03-14 -0.004413  0.000000  0.000000  0.000663
108 2014-03-17 -0.002660 -0.001961 -0.003029 -0.002037
109 2014-03-18  0.006222  0.001048  0.001519  0.006868
110 2014-03-19 -0.025177 -0.006542 -0.008090 -0.018319
111 2014-03-20 -0.005437 -0.002041 -0.000637  0.001723
112 2014-03-21  0.024146 -0.000264  0.000383  0.015379
113 2014-03-24 -0.011566 -0.002112 -0.000637 -0.008398
114 2014-03-25 -0.008551  0.000728 -0.000128 -0.012633
115 2014-03-26 -0.005901  0.001388  0.002679 -0.008931
116 2014-03-27 -0.029224 -0.000066  0.000509 -0.009455
117 2014-03-28 -0.000470 -0.001518 -0.002416 -0.006199
118 2014-03-31  0.011294 -0.000066 -0.000127  0.009387
119 2014-04-01  0.006980 -0.000992 -0.001020  0.001805
120 2014-04-02 -0.006470 -0.002316 -0.003573 -0.003653
121 2014-04-03  0.000465  0.000332  0.000128 -0.005155
122 2014-04-04  0.013947  0.003448  0.005635  0.004609
123 2014-04-07  0.006648  0.001256  0.001528  0.007191
124 2014-04-08  0.005238  0.000462  0.001780  0.005351
125 2014-04-09  0.010874  0.001781  0.001142  0.003315
126 2014-04-10  0.000896  0.002568  0.003930  0.000508
127 2014-04-11  0.002687  0.000394  0.001010  0.002042
128 2014-04-14 -0.007593 -0.001510 -0.001514 -0.002741
129 2014-04-15  0.000000 -0.000789  0.000126  0.002182
130 2014-04-16 -0.004950 -0.001514 -0.001769 -0.000682
131 2014-04-17 -0.010403 -0.003164 -0.005189 -0.004158
132 2014-04-21  0.011426  0.000529 -0.000254  0.003711
133 2014-04-22  0.010393 -0.000991 -0.000891  0.006582
134 2014-04-23  0.000894  0.001588  0.002802  0.000229
135 2014-04-24  0.008490 -0.000066 -0.000127 -0.001095
136 2014-04-25  0.008861  0.000528  0.001143  0.002024
137 2014-04-28 -0.007905  0.000330  0.000381 -0.004773
138 2014-04-29 -0.008411 -0.000660 -0.000888 -0.005804
139 2014-04-30  0.013839  0.002708  0.003554  0.015036
140 2014-05-01  0.006165  0.001251  0.001897  0.006215
141 2014-05-02 -0.014880 -0.000987  0.000126 -0.004709
142 2014-05-05  0.007774  0.000000 -0.000631  0.003170
143 2014-05-06  0.001102  0.000000  0.000505 -0.001438
144 2014-05-07  0.017173  0.001646  0.001894  0.015630
145 2014-05-08 -0.003463  0.001380  0.001890 -0.017465
146 2014-05-09  0.003475 -0.000197 -0.000880  0.006848
147 2014-05-12 -0.006926 -0.001247 -0.002140 -0.003252
148 2014-05-13  0.001744  0.001709  0.002523 -0.000885
149 2014-05-14  0.008703  0.002559  0.004782  0.006951
150 2014-05-15  0.002157  0.001178  0.002505 -0.001368
151 2014-05-16 -0.001507 -0.000392 -0.001124  0.002052
152 2014-05-19  0.006251  0.000458 -0.000375  0.008072
153 2014-05-20 -0.003856  0.001504  0.002252 -0.004290
154 2014-05-21  0.003871 -0.000849 -0.001498  0.004114
155 2014-05-22  0.003856 -0.000980 -0.001500  0.002858
156 2014-05-23  0.006402  0.001112  0.001502  0.008235
157 2014-05-27  0.008906  0.000000  0.001000  0.003922
158 2014-05-28 -0.005885  0.002613  0.004746 -0.004339
159 2014-05-29 -0.003805 -0.000782 -0.000622 -0.003026
160 2014-05-30  0.007216 -0.000456 -0.000871  0.006175
161 2014-06-02 -0.000843 -0.003066 -0.004979 -0.004187
162 2014-06-03 -0.010966 -0.001570 -0.003753 -0.007997
163 2014-06-04 -0.003838 -0.000197 -0.000879 -0.001945
164 2014-06-05  0.011558  0.000787  0.001634  0.006846
165 2014-06-06  0.005501 -0.001179 -0.001255  0.006560
166 2014-06-09  0.002525 -0.001443 -0.001382  0.001106
167 2014-06-10 -0.011335 -0.000985 -0.001384 -0.003785
168 2014-06-11  0.001699  0.000592  0.000504 -0.000878
169 2014-06-12  0.003815  0.001708  0.003778  0.000634
170 2014-06-13  0.000000 -0.001574 -0.002007  0.003792
171 2014-06-16 -0.001267 -0.000328  0.000126 -0.000455
172 2014-06-17 -0.010571 -0.002234 -0.003645 -0.007918
173 2014-06-18  0.002564  0.001449  0.002901  0.001309
174 2014-06-19  0.011509  0.001315  0.001006 -0.000049
175 2014-06-20  0.000000 -0.000460 -0.000628 -0.002273
176 2014-06-23  0.008007 -0.000329  0.000000  0.005504
177 2014-06-24 -0.002090  0.001117  0.002389 -0.002682
178 2014-06-25 -0.004608  0.001379  0.001882 -0.004878
179 2014-06-26 -0.017677  0.001639  0.002254  0.000269
180 2014-06-27 -0.000857  0.000327  0.000125 -0.007244
181 2014-06-30  0.003859  0.000589  0.000625 -0.000522

这是我的代码:
ar = regr_data
y= ar.iloc[:80,0]
x=ar.iloc[:80,1:]
svmf = svm.SVR()
svmf.fit(training_x, training_y)
pred = pd.Series(svmf.predict(ar.iloc[80:,1:]))
result = pd.DataFrame({"Prediction":pred,"actual":np.array(ar.iloc[80:,0])})

SVM预测一个固定的数字-0.002539。我做错了什么吗?我对SVM工作原理知之甚少。我用相同的代码使用LinearRegression时,预测看起来很合理。我很好奇想尝试一下SVM。SVM不能处理这种类型的数据吗?但是一个常数值看起来很奇怪。我应该尝试分类而不是精确预测吗?谢谢。


你必须调整SVM的参数才能使其正常工作。Cgamma是重要的参数。 - Fred Foo
2个回答

1

0

正如@larsmans在评论中所说,当使用RBF SVM时,您应该始终进行C和gamma的网格搜索。

此外,SVR不适用于datetime64[ns]数据类型。请明确转换为dtype np.float64的numpy数组。自纪元以来的纳秒数将按顺序排列1e18,因此您可能需要将浮点日期除以1e18。


我在回归分析中没有使用日期。我将A列作为y,B列、C列和D列作为x。我尝试更改了C和gamma值,但结果相同。请问有哪些好的范围可以搜索?谢谢。 - xiaominw
你能尝试使用 svmf = svm.SVR(kernel='linear', C=c) 并检查一系列的 c 值吗? - eickenberg
我尝试了从1e7到1e-10的值。它们对所有x向量都给出了相同的预测。 - xiaominw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接