【问题标题】:Get most informative features from very simple scikit-learn SVM classifier从非常简单的 scikit-learn SVM 分类器中获取信息量最大的特征
【发布时间】:2016-12-29 22:11:39
【问题描述】:

我尝试构建一个非常简单的 SVM 预测器,我可以用我的基本 Python 知识理解它。由于我的代码看起来与 questionquestion 如此不同,我不知道如何在我的示例中找到 SVM 预测的最重要特征。

我有以下包含特性和类(状态)的“样本”:

A B C D E F  status
1 5 2 5 1 3  1
1 2 3 2 2 1  0
3 4 2 3 5 1  1
1 2 2 1 1 4  0

我将功能名称保存为“功能”:

A B C D E F

特征“X”:

1 5 2 5 1 3  
1 2 3 2 2 1 
3 4 2 3 5 1  
1 2 2 1 1 4  

还有状态“y”:

1
0
1
0

然后我从样本中构建 X 和 y 数组,对一半样本进行训练和测试并计算正确的预测。

import pandas as pd
import numpy as np
from sklearn import svm

X = np.array(sample[features].values)
X = preprocessing.scale(X)    
X = np.array(X)
y = sample['status'].values.tolist()
y = np.array(y)

test_size = int(X.shape[0]/2)

clf = svm.SVC(kernel="linear", C= 1)
clf.fit(X[:-test_size],y[:-test_size])

correct_count = 0   

for x in range(1, test_size+1):
    if clf.predict(X[-x].reshape(-1, len(features)))[0] == y[-x]:
        correct_count += 1
accuracy = (float(correct_count)/test_size) * 100.00

我现在的问题是,我不知道如何实现上述问题中的代码,以便我也可以看到哪些是最重要的功能。

如果您能告诉我,我的简单版本是否可以实现,我将不胜感激?如果是的话,任何关于如何做到这一点的提示都会很棒。

【问题讨论】:

    标签: python scikit-learn svm


    【解决方案1】:

    从所有特征集中,产生向量范数平方最小值的变量集必须被依次选择为高重要性变量

    【讨论】:

    • 很遗憾,我不太明白你的意思,因为我的问题是,我怎样才能找到这些变量?
    • 要构建您的训练集 X,您可以使用不同的变量组合为每次迭代运行 SVM 分类器的迭代,并选择产生最佳分类的 X。产生最佳拟合的 X,y 组合是您最好的变量选择。不幸的是,仅使用 SVM(或 SVC)没有直接的方法来确定高度重要的变量集
    • 好的,所以我需要创建一个循环,它会执行以下操作:1. 随机选择功能 2. 运行 svm 3. 使用这些功能保存实现的准确性。然后我循环很多次并尝试找到与最高精度相关的特征?特征之间的交互是不是太高了,我可以这样确定?
    • 是的,这是正确的。单独的 SVM 不用于特征选择。有一些复杂的程序和技术可用于“特征选择”并确定变量之间的相关性,当然您可以实施 PCA 或类似地进行特征工程师。您应该首先选择您的一组重要功能,然后运行 ​​SVM
    • 好的,谢谢您的回复!您能否也告诉我我在上面的问题中链接到的方法是如何工作的?
    猜你喜欢
    • 2012-06-22
    • 2015-07-13
    • 2020-10-31
    • 2018-06-01
    • 1970-01-01
    • 2017-02-11
    • 2015-01-12
    相关资源
    最近更新 更多