0

大家好,所有机器学习专家,我对机器学习主题很幼稚。我的数据有六个特征(6 个常规属性)和 2 个标签(1 个特殊属性)(真假)(希望我使用了正确的术语)。我想结合那些必须由 SVM 训练的功能。数据看起来像这样:-

ZDis       ZAnch     ZSurf     Zval     ZDom     ZEntropy  Top5
0.48659   -0.20412  1.19243   0.15374  0.59667   1.34151   False
-0.10067  4.89898   -0.73677  0.22506  0.59667   1.34151   True
2.24837   -0.20412  -2.02291  0.22455  0.59667   1.34151   False
0.48659   -0.20412  1.19243   -0.06352 0.59667   1.34151   False
-0.68793  -0.20412  1.19243   0.12405  0.59667   1.34151   False
-2.02698  -0.40825  1.86371   0.07348  1.3272    -0.1242   False
-0.1807   2.44949   0.17865   0.07345  0.9401    0.1505    False
1.66557   2.44949   -1.50641  0.07381  0.9401    1.30135   False
1.11169   -0.40825  0.34716   0.07381  0.9401    -0.20225  True
1.5337    -0.40825  -0.01393  0.07381  -0.9954   0.53144   False
-0.01945  -0.48348  -1.16128  0.11035  2.02339   0.90237   False
-1.52944   3.23556  0.23428   0.11093  1.22613   -0.12973  False
0.43354   -0.48348  -2.20795  0.11093  1.22613   2.25734   False
2.84953   -0.48348  -2.20795  0.11093  1.49189   3.07609   True

所以我想在这里做 total = X1*ZDis+X2*ZAnch+X3*ZSurf+X4*Zval+X5*ZDom+X6*ZEntropy 其中 X1..X6 是应该来自 SVM 的加权值。我使用 rapidminner 为我的 40 个训练集示例获取此权重值,结果如下:-

Total number of Support Vectors: 40
Bias (offset): -1.055
w[ZDis] = 0.076
w[ZAnch] = -0.058
w[ZSurf] = 0.057
w[Zval] = 0.010
w[ZDom] = 0.073
w[ZEntropy] = 0.077

我不确定我是否采取了正确的方法,所以我需要你的帮助。提前致谢。另外,如果有人指导我如何在 python 中编写有关此 SVM 问题的代码,这对我也有帮助。

谢谢帕拉布


在收到您的反馈后,我再次对我的问题进行了一些分析,其中我有 277 个数据集,8 个是正面的,269 个是负面的,有 8 个特征,所以它清楚地向我展示了它的不平衡数据集。正如我之前所说,我想通过 SVM 权重对我使用 SVM 的所有特征给予同等重视,然后我想这样做( w1*x1+w2*x2+...+w8*x8),这将帮助我从数据集中提取真实结果。数据如下:-

`NameOfMotif eval_Zscore dis_Zscore abind_Zscore surf_Zscore pfam_Zscore ptm_Zscore coil_Zscore entropy_Zscore TrueVsFalse
ptk_9 0.77428 0.2387 -0.39736 1.48274 0.61237 -0.21822 0.49111 0.44599 False
ptk_8 0.77494 -0.97317 -0.39736 -0.27357 -1.63299 -0.21822 0.6181 -0.04028 False
ptk_3 0.77591 1.45058 -0.39736 -0.1139 0.61237 4.58258 0.74509 -0.85069 True
ptk_6 0.77583 -2.18505 -0.39736 -0.27357 0.61237 -0.21822 -0.3343 -0.92281 False
ptk_22 0.55932 1.45058 -0.39736 0.70216 0.61237 -0.21822 1.25303 -2.17556 False
ptk_23 0.51159 -0.97317 -0.39736 1.05697 -1.63299 -0.21822 1.25303 0.77021 False
ptk_20 0.62907 0.2387 -0.39736 1.05697 0.61237 -0.21822 -0.22848 -1.21702 False
..............................................................................
scf-trcp1_1 0.17425 2.23675 -0.92125 -0.03478 1.20877 5.13288 1.31262 2.27655 True
scf-trcp1_3 0.17425 -1.068 -0.92125 -0.82472 -2.43745 -0.43743 0.48341 -0.59339 False
scf-trcp1_5 0.17425 0.41914 0.24523 -1.05041 0.23644 -0.43743 -0.02919 1.68523 False
scf-trcp1_7 0.17425 -1.63453 -0.92125 -1.25354 -1.82975 -0.43743 -2.0193 0.95051 False`

我的 svm 输出是

kernel type polynomial
cross fold validation =5
c=100000.0
kernal degree = 1.0E-4
L-pos =2.0
L-neg =2.0
PerformanceVector:
accuracy: 84.60% +/- 23.58% (mikro: 84.48%)
ConfusionMatrix:
True:   False   True
False:  228 2
True:   41  6
precision: 31.08% +/- 25.51% (mikro: 12.77%) (positive class: True)
ConfusionMatrix:
True:   False   True
False:  228 2
True:   41  6
recall: 70.00% +/- 40.00% (mikro: 75.00%) (positive class: True)
ConfusionMatrix:
True:   False   True
False:  228 2
True:   41  6
AUC (optimistic): 0.793 +/- 0.184 (mikro: 0.793) (positive class: True)
AUC: 0.793 +/- 0.184 (mikro: 0.793) (positive class: True)
AUC (pessimistic): 0.793 +/- 0.184 (mikro: 0.793) (positive class: True)

我的问题在这里,我的方法现在足够好了吗?我用来优化 SVM 的所有参数都很好吗?我在这个问题上非常天真!谢谢帕拉布

4

2 回答 2

0

您提到通过保留 5 条记录,您获得了 5 个错误分类,其中 4 个正确,1 个错误。这不足以知道模型是否好用。正如前面的答案所说,通过交叉验证(RapidMiner 算子称为 X-Validation)来估计 SVM 在看不见的数据上的性能。这将使您了解模型是否具有任何价值。要将参数调整到 SVM 算子以改进模型,请使用 Loop Parameters 算子并将其与交叉验证相结合以获得估计的性能。

于 2013-10-05T14:27:57.280 回答
0

您正在使用线性模型,假设存在一组参数,只需计算sign( w1*x1+w2*x2+...+w5*x5 - b). 对于低维空间,这种假设很少出现。在您的特定示例中,您只有 5 个维度和非常小的训练集。女巫这么小的数据 - 任何机器学习方法几乎都不会产生好的结果,因为它们都是统计方法。很难谈论 30 个元素的统计数据。

对于问题:

  • 为了在 python 中尝试这个,看看scikit-learn
  • 要测试您的模型执行交叉验证 - 将您的数据分成例如 5 个块(每个 7 个示例),然后SVM在 4 个这样的块(28 分)上训练您并测试剩余的 1 个块(7 分),重复 5 次,因此每个块仅使用一次作为测试。计算结果准确度的平均值
  • 要处理低维非线性可分数据,请尝试使用其他一些内核,例如多项式(度数较小),或者如果它不起作用 - RBF。
  • 请记住,SVM 是一个参数模型。您必须选择正确的参数才能获得良好的结果。线性 SVM 需要C参数 - 越大C,您就越“强制”SVM 正确分类数据(最小化错误分类的数量)。使用内核时 - 你会得到另一个参数(所以除了C你得到d多项式和gammarbf 之外)。可以使用网格搜索来选择最佳参数(scikit-learn 有例程可以自动执行此操作,请阅读文档)
  • 数据标准化 - 众所周知,许多 ML 模型(包括 SVM)可能在每个特征具有不同规模的数据上表现不佳 - 似乎是你的情况(Zval 似乎比 Zentropy 小得多) - 避免特征偏差,您应该将它们重新调整为例如 [-1,1] 间隔,或进行归一化,以便每个都具有均值 0 和方差 1
于 2013-10-02T06:03:53.220 回答