当前位置: 首页 > 知识库问答 >
问题:

SkLearning SVM:SVR和SVC,对每个输入获得相同的预测

亢正德
2023-03-14

下面是一个粘贴的代码:SVM示例代码

我查了这个问题的其他几个答案。。。这个问题的具体迭代似乎有点不同。

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

我有大约70 x输入对应于他们的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_检验矩阵(5x30)在输入量和方差方面与x_训练矩阵相似。。。同样适用于y\u testry\u testc

目前,所有测试的预测都完全相同(回归为0.00596,分类为1…)

如何让SVR和SVC函数吐出相关预测?或者至少根据输入做出不同的预测...

至少,分类器应该能够做出选择。我的意思是,即使我没有为回归提供足够的维度。。。

共有3个答案

阎懿轩
2023-03-14

在我的例子中,我需要使用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])
马欣荣
2023-03-14

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

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

葛越
2023-03-14

尝试增加你的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.])

对于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来帮助您做到这一点。

 类似资料:
  • 我有一个平面文件阅读器类,它从dat文件中读取,创建存储在其唯一arraylist中的person、customer和product对象,我必须将其用于getInvoice方法。当从invoice dat文件中输入新属性时,我只为从invoice dat文件中读取的产品创建一个新的产品列表。这似乎运行良好,但是每个发票对象上的一些产品属性正在被更改。 当用product arraylist作为字段

  • 问题内容: 在表单上,​​我有一个select和两个输入字段。这些元素垂直对齐。不幸的是,我无法获得这些元素相等的宽度。 这是我的代码: 对于上面的示例,select元素的最佳宽度是198或199 px(当然我尝试了193 px,但差异很大)。我认为,这取决于分辨率,取决于各种计算机和浏览器,因为这些元素的宽度不相等(有时我认为差异约为1或2像素)。我试图在div或表行中设置这些元素,但这无济于事

  • 我已经使用登录API在Jmeter中进行了测试。 为此,我通过了以下请求: 帖子网址:......POST数据参数:"电子邮件地址":"a@gmail.com","密码":"ad332017" 对于上述要求,我得到两种不同的答复。 邮递员:我收到回复,状态代码200 OK(这也是预期的) 在Jmeter上,我得到响应:响应代码:307响应消息:临时重定向。 谁能帮我解决这个问题?

  • 问题内容: 假设我的表包含以下内容: 每次通过while循环。我想获取价格值的总和,但ID中的每个不同值仅获取一次 因此,以上述示例为例,我将得到类似以下内容的信息: 补充一下,我可能偶然发现了类似的帖子。问题是其他职位使用Oracle,另一方面我正在使用MySQL。 问题答案: 你需要和

  • 你好,我需要在一个输入中用类名total对同一类输入的值求和。 可能的 这里有一把工作小提琴

  • 我有以下数据帧(示例): 我想计算每组n行相对于条件行的斜率(指示符==true)。这意味着它应该返回一个列“斜率”,其中斜率在条件行之前和之后,该行的斜率应该为0。除此之外,我想返回一个名为“id”的列,它实际上是表示条件行之前(负)或之后(正)斜率的值的组id。这是所需的输出: 以下是A组的一些解释: 第0,1和2行是斜率为(x=[-3,-2,-1], y=[2,1,1])=-0.5的条件行(