【问题标题】:Getting Weird Results From Sklearn SVM Models从 Sklearn SVM 模型中得到奇怪的结果
【发布时间】:2013-03-29 18:50:07
【问题描述】:

我正在尝试从 scikit-learn 训练支持向量机,但我似乎没有得到任何结果,我想知道是否有任何 svm 或 scikit learn 专家知道原因。这是我正在运行的示例。我有一些手写的数字数据,我想训练一个分类器来区分“a”和“b”。我使用的数据在这里,因此您也可以对其进行测试。这两个文件,培训文件和测试文件都在该存档中。任何帮助理解结果(支持向量机说一切都是'a')将不胜感激。

这是我的脚本:

#!/usr/bin/env python

import os
import re
from sklearn import svm

def get_record(line):
    match = re.search("^(\S+) (\d+)", line)
    label = match.group(1)
    vector = list(match.group(2))
    vector = [int(x) for x in vector]
    return label, vector

def train_classifier():
    classifier = svm.SVC()
    data = open("sd19-train-binary.txt", "r")
    labels = []
    training_data = [] 
    i = 0
    for line in data:
        label, vector = get_record(line) 
        if label == 'a' or label == 'b': 
            labels.append(label)
            training_data.append(vector)
            i += 1
            if i > 100:
                break
    classifier.fit(training_data, labels) 
    return classifier

def test_classifier(classifier):
    data = open("sd19-test-binary.txt", "r")
    i = 0
    for line in data:
        label, vector = get_record(line)
        if label == 'a' or label == 'b':
            print label, classifier.predict(vector)
            i += 1
            if i > 100:
                break

def main():
    classifier = train_classifier()
    test_classifier(classifier)


main()

【问题讨论】:

  • training_data 中是否包含任何元素?看起来re.search("^(\S+) (\d+)", line) 中可能存在问题 - 正则表达式可能应该是 r"^(\S+) (\d+)"
  • 是的。如果您愿意,可以尝试代码并打印值。
  • 您没有链接到任何数据文件。

标签: python svm image-recognition scikit-learn


【解决方案1】:

默认情况下,SVC 使用 RBF 内核。如果不设置/交叉验证 gamma 和 C,您将无法获得有意义的结果。

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 2013-05-18
    • 2010-10-20
    • 2022-01-25
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多