ANN(人工神经网络)和SVM(支持向量机)是监督机器学习和分类的两种流行策略.通常不清楚哪种方法对特定项目更好,而且我确定答案总是"它取决于".通常,使用两者的组合以及贝叶斯分类.
有关ANN与SVM的问题已经在Stackoverflow上提出了这些问题:
在这个问题中,我想具体了解人工神经网络(特别是多层感知器)的哪些方面可能需要在SVM上使用?我问的原因是因为很容易回答相反的问题:支持向量机通常优于人工神经网络,因为它们避免了人工神经网络的两个主要缺点:
(1)人工神经网络通常会集中在局部最小值而不是全局最小值,这意味着它们有时基本上"错过了大局"(或者错过了树木的森林)
(2)如果训练时间过长,人工神经网络常常过度拟合,这意味着对于任何给定的模式,人工神经网络可能会开始将噪声视为模式的一部分.
SVM不会遇到这两个问题中的任何一个.然而,并不是很明显SVM应该是人工神经网络的完全替代品.那么人工神经网络对SVM有哪些具体优势可能使其适用于某些情况?我已经列出了SVM相对于ANN的特定优势,现在我想看一下ANN优势列表(如果有的话).
我在阅读图像,提取训练功能以及使用SVM在OpenCV中测试新图像时遇到困难.有人可以指点我一个很棒的链接吗?我看过OpenCV支持向量机简介.但它对阅读图像没有帮助,我不知道如何合并它.
我的目标是对图像中的像素进行分类.这些像素属于曲线.我理解形成训练矩阵(例如,图像A 1,1 1,2 1,3 1,4 1,5 2,1 2,2 2,3 2,4 2,5 3,1 3,2 3, 3 3,4 3,5
我将我的训练矩阵形成为[3] [2] = {{1,1} {1,2} {1,3} {1,4} {1,5} {2,1} .. {} }
但是,我对标签有点迷惑.根据我的理解,我必须指定训练矩阵中哪一行(图像)对应,这对应于曲线或非曲线.但是,如果有一些属于曲线的像素和一些不属于曲线的像素,我如何标记训练矩阵行(图像).例如,我的训练矩阵是[3] [2] = {{1,1} {1,2} {1,3} {1,4} {1,5} {2,1} .. {}} ,像素{1,1}和{1,4}属于曲线但其余部分不属于曲线.
我试图理解decision_function和predict之间的关系,它们是SVC的实例方法(http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html).到目前为止,我已经收集到决策函数返回类之间的成对分数.我的印象是预测选择最大化其成对分数的类,但我测试了它并得到了不同的结果.这是我用来尝试理解两者之间关系的代码.首先我生成了成对分数矩阵,然后我打印出了具有最大配对分数的类,该分数与clf.predict预测的类不同.
result = clf.decision_function(vector)[0]
counter = 0
num_classes = len(clf.classes_)
pairwise_scores = np.zeros((num_classes, num_classes))
for r in xrange(num_classes):
for j in xrange(r + 1, num_classes):
pairwise_scores[r][j] = result[counter]
pairwise_scores[j][r] = -result[counter]
counter += 1
index = np.argmax(pairwise_scores)
class = index_star / num_classes
print class
print clf.predict(vector)[0]
Run Code Online (Sandbox Code Playgroud)
有谁知道这些预测和决策功能之间的关系?
在每本书和例子中,它们总是只显示二进制分类(两个类),新的向量可以属于任何一个类.
这里的问题是我有4个类(c1,c2,c3,c4).我已经训练了4个班级的数据.
对于新的向量,输出应该是
C1 80%(获胜者)
c2 10%
c3 6%
c4 4%
这该怎么做?我打算使用libsvm(因为它最受欢迎).我不太了解它.如果你们中的任何人以前使用它,请告诉我我应该使用的具体命令.
我目前正在开发一个项目,一个简单的情绪分析器,这样在不同的情况下会有2个和3个类.我正在使用一个非常丰富的独特单词(大约200.000)的语料库.我用袋的词方法用于特征选择和以减少的数量独特特征,进行消除由于一个进行阈值的出现频率.在最后一组的功能包括围绕20.000的功能,这实际上是一个90%的下降,但还不够用于测试预测的预期准确性.我正在使用LibSVM和SVM-light进行训练和预测(线性和RBF内核)以及Python和Bash.
到目前为止观察到的最高精度约为75%,我至少需要90%.这是二进制分类的情况.对于多级培训,准确率降至约60%.在这两种情况下我都需要至少90%,并且无法计算如何增加它:通过优化训练参数或通过优化特征选择?
我读过有关文本分类中特征选择的文章,我发现使用了三种不同的方法,它们之间实际上有明显的相关性.这些方法如下:
第一种方法已经是我使用的方法,但我非常简单地使用它,需要指导以更好地使用它以获得足够高的准确度.我也缺乏IG和CHI实际实施的知识,并寻求任何帮助以这种方式指导我.
非常感谢,如果您需要任何其他信息以获得帮助,请告诉我们.
@larsmans:频率阈值 …
我一直在努力掌握支持向量机的基础知识,并下载和阅读了许多在线文章.但仍然无法掌握它.
我想知道,如果有的话
或者你可以想到的东西,这将使我能够轻松学习SVM基础知识.
PS:我以某种方式设法学习PCA(主成分分析).顺便说一句,你们猜想我正在研究机器学习.
在python中使用以下代码用于svm:
from sklearn import datasets
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf = OneVsRestClassifier(SVC(kernel='linear', probability=True, class_weight='auto'))
clf.fit(X, y)
proba = clf.predict_proba(X)
Run Code Online (Sandbox Code Playgroud)
但这需要花费大量时间.
实际数据维度:
train-set (1422392,29)
test-set (233081,29)
Run Code Online (Sandbox Code Playgroud)
我怎样才能加快速度(平行或其他方式)?请帮忙.我已经尝试过PCA和下采样.
我有6节课.编辑:发现http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html 但我希望进行概率估计,而且对于svm来说似乎并非如此.
编辑:
from sklearn import datasets
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC,LinearSVC
from sklearn.linear_model import SGDClassifier
import joblib
import numpy as np
from sklearn import grid_search
import multiprocessing
import numpy as np
import math
def …Run Code Online (Sandbox Code Playgroud) 我目前正在设计文本文章的推荐系统("有趣"或"不感兴趣"的二进制案例).我的一个规格是它应该不断更新以适应不断变化的趋势.
据我所知,最好的方法是利用支持增量/ 在线学习的机器学习算法.
像Perceptron和Winnow这样的算法支持在线学习,但我不完全确定支持向量机.scikit-learn python库是否支持在线学习?如果是,支持向量机是否可以使用它的算法之一?
我显然没有完全依赖于使用支持向量机,但由于它们的全面性能,它们通常是用于二进制分类的算法.我愿意改变最终最适合的东西.