Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sklearn SVM:SVR和SVC,对每个输入都得到相同的预测_Python_Scikit Learn_Sklearn Pandas - Fatal编程技术网

Python Sklearn SVM:SVR和SVC,对每个输入都得到相同的预测

Python Sklearn SVM:SVR和SVC,对每个输入都得到相同的预测,python,scikit-learn,sklearn-pandas,Python,Scikit Learn,Sklearn Pandas,下面是代码的粘贴: 我检查了这个问题的其他几个答案…看起来这个问题的具体迭代有点不同 首先,我的输入是标准化的,每个点有五个输入。这些值的大小都是合理的(正常的0.5s和0.7s等——几乎没有接近0或接近1的数字) 我有大约70 x输入对应于他们的70 y输入。y输入也被规范化(它们是每个时间步后my函数的百分比变化) 我初始化我的SVR(和SVC),对它们进行训练,然后用30个样本输入中的数据对它们进行测试……然后对每个输入进行完全相同的预测(并且输入的变化量是合理的——0.3、0.6、0.5

下面是代码的粘贴:

我检查了这个问题的其他几个答案…看起来这个问题的具体迭代有点不同

首先,我的输入是标准化的,每个点有五个输入。这些值的大小都是合理的(正常的0.5s和0.7s等——几乎没有接近0或接近1的数字)

我有大约70 x输入对应于他们的70 y输入。y输入也被规范化(它们是每个时间步后my函数的百分比变化)

我初始化我的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_检验
矩阵(5x30)在输入的大小和方差方面与
x_训练
矩阵类似……与
y_检验
y_检验
相同

目前,所有测试的预测都完全相同(回归为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_分类变成:

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.])
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])
对于
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_回归变成:

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.])
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
来帮助您完成这项工作。

我也遇到了同样的问题,但原因完全不同,因此寻找解决方案的地方也完全不同


如果您的预测输入因任何原因缩放不正确,您可能会遇到与此处相同的症状。这可能是因为在以后的预测中忘记(或错误编码)输入值的缩放,或是由于输入顺序错误。

在我的情况下,我需要使用sklearn包中的StandardScaler缩放数据

此外,我还必须独立缩放每一组特征,在我的例子中,两种类型的距离分别缩放

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(X[:,0:10])
X[:,0:10] = ss.transform(X[:,0:10])
ss = StandardScaler()
ss.fit(X[:,10:20])
X[:,10:20] = ss.transform(X[:,10:20])

您需要提供一个自包含、可运行的示例,其中包含实际演示问题的示例数据。好的。一秒钟(或者10分钟=)@BrenBarn有一个指向代码粘贴库的链接。我包括了全部数据…@bordeo,你能帮我解决这个问题吗,亲爱的?好的……太棒了,谢谢——分类成功了。SVR仍在运行…但看起来我没有做错任何事情,所以这应该让我走上正确的轨道。你认为scipy的最小化会成功吗?不管怎样,你知道PCA吗?跑步会改善情况吗?(我想我需要两倍的训练数据…这可能会让我在时间上倒退太远…)刚刚为SVR案例添加了一个编辑。PCA可能帮不了你。首先尝试使用
GridSearchCV
调整参数,然后您可以决定是否需要更多数据。实际上,查看更多数据是否有用的一个好方法是绘制一条学习曲线,在该曲线中您可以改变数据量,并测量训练和CV损失。哦。另外,由于您使用的是内核,您可能还需要调优
gamma
。这种影响可能相当戏剧性。