python – Sklearn SVM:SVR和SVC,为每个输入获得相同的预测
作者:互联网
这是代码粘贴:SVM sample code
我查看了这个问题的几个其他答案……似乎问题的这个特定迭代有点不同.
首先,我的输入被标准化,我每点有五个输入.这些值都是合理的大小(健康的0.5s和0.7s等 – 很少接近零或接近1个数字).
我有大约70个输入对应于他们的70 y输入. y输入也被标准化(它们是每个时间步之后我的函数的百分比变化).
我初始化我的SVR(和SVC),训练它们,然后用30个样本外输入测试它们……并获得每个输入的完全相同的预测(并且输入正在以合理的量变化 – 0.3,0.6 ,0.5等).我认为分类器(至少)会有一些区别……
这是我得到的代码:
# train svr
my_svr = svm.SVR()
my_svr.fit(x_training,y_trainr)
# train svc
my_svc = svm.SVC()
my_svc.fit(x_training,y_trainc)
# predict regression
p_regression = my_svr.predict(x_test)
p_r_series = pd.Series(index=y_testing.index,data=p_regression)
# predict classification
p_classification = my_svc.predict(x_test)
p_c_series = pd.Series(index=y_testing_classification.index,data=p_classification)
以下是我输入的示例:
x_training = [[ 1.52068627e-04 8.66880301e-01 5.08504362e-01 9.48082047e-01
7.01156322e-01],
[ 6.68130520e-01 9.07506250e-01 5.07182647e-01 8.11290634e-01
6.67756208e-01],
... x 70 ]
y_trainr = [-0.00723209 -0.01788079 0.00741741 -0.00200805 -0.00737761 0.00202704 ...]
y_trainc = [ 0. 0. 1. 0. 0. 1. 1. 0. ...]
并且x_test矩阵(5×30)在输入的幅度和方差方面类似于x_training矩阵……对于y_testr和y_testc是相同的.
目前,所有测试的预测完全相同(回归为0.00596,分类为1).
如何让SVR和SVC函数吐出相关的预测?或者至少基于输入的不同预测……
至少,分类器应该能够做出选择.我的意思是,即使我没有为回归提供足够的维度……
解决方法:
尝试从默认值增加C.看来你是不合适的.
my_svc = svm.SVC(probability=True, C=1000)
my_svc.fit(x_training,y_trainc)
p_classification = my_svc.predict(x_test)
p_classification然后变成:
array([ 1., 0., 1., 0., 1., 1., 1., 1., 1., 1., 0., 0., 0.,
1., 0., 0., 0., 0., 0., 1., 1., 0., 1., 1., 1., 1.,
1., 1., 1., 1.])
对于SVR案例,您还需要减少epsilon.
my_svr = svm.SVR(C=1000, epsilon=0.0001)
my_svr.fit(x_training,y_trainr)
p_regression = my_svr.predict(x_test)
p_regression然后变成:
array([-0.00430622, 0.00022762, 0.00595002, -0.02037147, -0.0003767 ,
0.00212401, 0.00018503, -0.00245148, -0.00109994, -0.00728342,
-0.00603862, -0.00321413, -0.00922082, -0.00129351, 0.00086844,
0.00380351, -0.0209799 , 0.00495681, 0.0070937 , 0.00525708,
-0.00777854, 0.00346639, 0.0070703 , -0.00082952, 0.00246366,
0.03007465, 0.01172834, 0.0135077 , 0.00883518, 0.00399232])
您应该使用交叉验证调整C参数,以便能够在最重要的指标上发挥最佳性能.你可能想看看GridSearchCV来帮助你做到这一点.
标签:python,scikit-learn,sklearn-pandas 来源: https://codeday.me/bug/20191007/1868284.html