标签: svm

在 PyML 中获取多类问题的召回(灵敏度)和精度(PPV)值

我正在使用PyML进行 SVM 分类。但是,我注意到当我使用 LOO 评估多类分类器时,结果对象不会报告灵敏度和 PPV 值。相反,它们是 0.0:

from PyML import *
from PyML.classifiers import multi

mc = multi.OneAgainstRest(SVM())
data = VectorDataSet('iris.data', labelsColumn=-1)
result = mc.loo(data)

result.getSuccessRate()
>>> 0.95333333333333337
result.getPPV()
>>> 0.0
result.getSensitivity()
>>> 0.0
Run Code Online (Sandbox Code Playgroud)

我查看了代码,但无法弄清楚这里出了什么问题。有人有解决方法吗?

python classification machine-learning svm pyml

1
推荐指数
1
解决办法
2598
查看次数

Scikit 学习支持向量机的多类分类

我想知道LinearSVC默认情况下是否支持多类分类还是我们必须OneVsRestClassifier像这样包装它 :

 OneVsRestClassifier(LinearSVC())
Run Code Online (Sandbox Code Playgroud)

machine-learning svm scikits scikit-learn

1
推荐指数
1
解决办法
2267
查看次数

R:带有参数 C 的 ksvm

我想在 ksvm 中调整参数 C。现在我想知道这个 C 是如何定义的。C的定义是

违反约束的成本(默认值:1)这是拉格朗日公式中正则化项的“C”常数。

这是否意味着 C 越大,允许的错误分类越多?

r svm

1
推荐指数
1
解决办法
1807
查看次数

svmLinear 和 svmLinear2 之间的插入符号区别?

我似乎无法找到关于svmLinear和svmLinear2之间的区别如下页面

有什么不同?

r svm r-caret

1
推荐指数
1
解决办法
1499
查看次数

为什么我的 Spark SVM 总是预测相同的标签?

我无法让我的 SVM 预测我期望的 0 和 1。似乎在我训练它并给它更多数据之后,它总是想预测一个 1 或一个 0,但它会预测全 1 或全 0,而不是两者的混合。我想知道你们中是否有人能告诉我我做错了什么。

我搜索过“svm 总是预测相同的值”和类似的问题,对于我们这些机器学习新手来说,这看起来很常见。恐怕我不明白我遇到的答案。

所以我从这个开始,它或多或少是有效的:

from pyspark.mllib.regression import LabeledPoint
cooked_rdd = sc.parallelize([LabeledPoint(0, [0]), LabeledPoint(1, [1])])
from pyspark.mllib.classification import SVMWithSGD
model = SVMWithSGD.train(cooked_rdd)
Run Code Online (Sandbox Code Playgroud)

我说“或多或少”是因为

model.predict([0])
Out[47]: 0
Run Code Online (Sandbox Code Playgroud)

是我所期望的,而且......

model.predict([1])
Out[48]: 1
Run Code Online (Sandbox Code Playgroud)

也是我所期望的,但是......

model.predict([0.000001])
Out[49]: 1
Run Code Online (Sandbox Code Playgroud)

绝对不是我所期望的。我认为无论是什么原因造成的都是我问题的根源。

在这里,我首先处理我的数据......

def cook_data():
  x = random()
  y = random()
  dice = 0.25 + (random() * 0.5)
  if x**2 + y**2 > dice:
    category = 0
  else:
    category = 1
  return LabeledPoint(category, [x, y])

cooked_data = …
Run Code Online (Sandbox Code Playgroud)

python svm apache-spark pyspark apache-spark-mllib

1
推荐指数
1
解决办法
2265
查看次数

Scikit使用SVC学习错误的预测

我正在尝试使用径向核的SVM 预测MNIST(http://pjreddie.com/projects/mnist-in-csv/)数据集。我想训练几个例子(例如1000个)并预测更多例子。问题是,无论我何时进行预测,除非测试集的索引与训练集的索引一致。也就是说,假设我从训练示例中以示例1:1000进行了训练。然后,对于我的测试集的1:1000,预测是正确的(即SVM尽其所能),但是其余部分我得到相同的输出。但是,如果我使用示例2001:3000进行训练,那么只有与测试集中的那些行相对应的测试示例才被正确标记(即,不具有相同的常数)。我完全不知所措,我认为这里存在某种错误,因为与LinearSVC完全相同的代码可以正常工作,尽管显然该方法的准确性较低。

首先,我以示例501:1000的训练数据进行训练:

# dat_train/test are pandas DFs corresponding to both MNIST datasets
dat_train = pd.read_csv('data/mnist_train.csv', header=None)
dat_test = pd.read_csv('data/mnist_train.csv', header=None)

svm = SVC(C=10.0)
idx = range(1000)
#idx = np.random.choice(range(len(dat_train)), size=1000, replace=False)
X_train = dat_train.iloc[idx,1:].reset_index(drop=True).as_matrix()
y_train = dat_train.iloc[idx,0].reset_index(drop=True).as_matrix()
X_test = dat_test.reset_index(drop=True).as_matrix()[:,1:]
y_test = dat_test.reset_index(drop=True).as_matrix()[:,0]
svm.fit(X=X_train[501:1000,:], y=y_train[501:1000])
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到大约一半的预测是错误的

y_pred = svm.predict(X_test[:1000,:])
confusion_matrix(y_test[:1000], y_pred)
Run Code Online (Sandbox Code Playgroud)

都是错误的(即常量)

y_pred = svm.predict(X_test[:500,:])
confusion_matrix(y_test[:500], y_pred)
Run Code Online (Sandbox Code Playgroud)

这是我希望所有测试数据都能看到的

y_pred = svm.predict(X_test[501:1000,:])
confusion_matrix(y_test[501:1000], y_pred)
Run Code Online (Sandbox Code Playgroud)

您可以使用LinearSVC检查以上所有内容是否正确!

python svm svc scikit-learn

1
推荐指数
1
解决办法
1326
查看次数

交叉验证后如何获得支持向量数

这是我使用非线性 SVM 进行数字分类的代码。我应用交叉验证方案来选择超参数cgamma。但是,GridSearch 返回的模型没有n_support_获取支持向量数量的属性。

from sklearn import datasets
from sklearn.cross_validation import train_test_split
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC
from sklearn.cross_validation import ShuffleSplit


# Loading the Digits dataset
digits = datasets.load_digits()

# To apply an classifier on this data, we need to flatten the image, to
# turn the data in a (samples, feature) matrix:
n_samples = len(digits.images)
X = digits.images.reshape((n_samples, -1))
y = digits.target

# Split the dataset …
Run Code Online (Sandbox Code Playgroud)

machine-learning svm scikit-learn cross-validation

1
推荐指数
1
解决办法
1166
查看次数

OneClassSVM scikit 学习

我有两个数据集,trainig 和 test。它们有标签“1”和“0”。我需要在 scikit learn 中使用带有“rbf”内核的“oneClassSVM”算法来评估这些数据集。我加载了训练数据集,但我不知道如何使用测试数据集对其进行评估。下面是我的代码,

from sklearn import svm
import numpy as np

input_file_data = "/home/anuradha/TrainData.csv"
dataset = np.loadtxt(input_file_iris, delimiter=",")

X = dataset[:,0:4]
y = dataset[:,4]

estimator= svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
Run Code Online (Sandbox Code Playgroud)

请有人能帮我解决这个问题吗?

python machine-learning svm scikit-learn

1
推荐指数
1
解决办法
4203
查看次数

在 sklearn 中运行 10 倍交叉验证后如何运行 SVC 分类器?

我对机器学习比较陌生,希望在以下方面得到一些帮助:

我使用 10 倍交叉验证对我的数据运行了支持向量机分类器 (SVC),并计算了准确度得分(约为 89%)。我正在使用 Python 和 scikit-learn 来执行任务。这是一个代码片段:

def get_scores(features,target,classifier):
  X_train, X_test, y_train, y_test =train_test_split(features, target , 
    test_size=0.3)
    scores = cross_val_score(
    classifier,
    X_train,
    y_train,
    cv=10,
    scoring='accuracy',
    n_jobs=-1)
 return(scores)

get_scores(features_from_df,target_from_df,svm.SVC())
Run Code Online (Sandbox Code Playgroud)

现在,我如何使用我的分类器(在运行 10 倍 cv 之后)在 X_test 上对其进行测试并将预测结果与 y_test 进行比较?您可能已经注意到,我在交叉验证过程中只使用了 X_train 和 y_train。

我注意到 sklearn 有 cross_val_predict:http : //scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_predict.html 我应该用 cross_val_predict 替换我的 cross_val_score 吗?仅供参考:我的目标数据列是二值化的(值为 0 和 1)。

如果我的方法是错误的,请告诉我最好的处理方法。

谢谢!

python machine-learning svm cross-validation

1
推荐指数
1
解决办法
9702
查看次数

coef0在svm函数中的作用是什么?

如前所述在这里,我知道,coef0在使用polynomialsigmoid内核功能SVM。但是这个系数的确切影响是什么?

python kernel svm scikit-learn

1
推荐指数
1
解决办法
1441
查看次数