我正在使用scikit中的sklearn.svm.svc来学习二进制分类.我正在使用它的predict_proba()函数来获得概率估计.谁能告诉我predict_proba()如何在内部计算概率?
我发现SVM(支持向量机)问题的扩展确实提高了它的性能......我已经读过这样的解释:
"缩放的主要优点是避免在较大数值范围内的属性占主导地位较小数值范围内的属性."
不幸的是,这对我没有帮助......有人可以给我一个更好的解释吗?先感谢您!
我正在用Python构建一些预测模型,并且一直在使用scikits learn的SVM实现.它真的很棒,易于使用,而且速度相对较快.
不幸的是,我开始受到运行时的限制.我在一个大约4 - 5000的完整数据集上运行一个rbf SVM,具有650个功能.每次运行大约需要一分钟.但是通过5倍交叉验证+网格搜索(使用粗到细搜索),对于我手头的任务来说,它有点不可行.那么一般来说,人们对可以在Python中使用的最快SVM实现方面有什么建议吗?那或者任何加速我建模的方法?
我听说过LIBSVM的GPU实现,看起来它可以工作.我不知道Python中可用的任何其他GPU SVM实现,但它肯定会对其他人开放.此外,使用GPU会显着增加运行时间吗?
我还听说有一些方法可以通过在scikits中使用线性SVM +特征映射来近似rbf SVM.不确定人们对这种方法的看法.同样,使用这种方法的任何人都是运行时间的显着增加吗?
提高程序速度的所有想法都是最受欢迎的.
我正在寻找一个理想情况下具有以下功能的库:
我希望这是用C++编写的,因为我对这种语言最熟悉,但如果图书馆值得,我也会使用任何其他语言.我用Google搜索并发现了一些,但我没有时间尝试全部,所以我想听听其他人的经历.如果您对推荐的图书馆有一些经验,请回答.
PS:我也可以使用不同的库来进行聚类和SVM.
我知道SVM被认为是'ANN杀手',因为它们会自动选择表示复杂性并找到全局最优(这里有一些SVM称赞引用).
但这里我还不清楚 - 所有这些优势主张只针对2级决策问题的情况还是更进一步?(我认为它们适用于非线性可分类,否则没有人会关心)
所以我想要澄清一些案例的样本:
我不希望有人回答所有这些lil'子问题,而是在实践中给出SVM优于常见ANN等价物(例如FFBP,循环BP,Boltzmann机器,SOM等)的一般界限.并且优选地,理论上也是如此.
SVM和神经网络有什么区别?线性svm是否与NN相同,并且对于非线性可分离问题,NN使用添加隐藏层而SVM使用不断变化的空间维度?
我使用scikit learn(LinearSVC)的线性SVM来解决二进制分类问题.我知道LinearSVC可以给我预测标签和决策分数,但我想要概率估计(对标签的信心).我想继续使用LinearSVC因为速度(与具有线性内核的sklearn.svm.SVC相比)使用逻辑函数将决策分数转换为概率是否合理?
import sklearn.svm as suppmach
# Fit model:
svmmodel=suppmach.LinearSVC(penalty='l1',C=1)
predicted_test= svmmodel.predict(x_test)
predicted_test_scores= svmmodel.decision_function(x_test)
Run Code Online (Sandbox Code Playgroud)
我想检查将概率估计简单地作为[1 /(1 + exp(-x))]来检查是否有意义,其中x是决策分数.
或者,我可以使用其他选项来分类,以便有效地执行此操作吗?
谢谢.
我有一个情感分析的任务,使用本该即时通讯语料库的意见有5类(very neg,neg,neu,pos,very pos),从1到5,所以我做的分类如下:
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True,
sublinear_tf=False, ngram_range=(2,2))
from sklearn.cross_validation import train_test_split, cross_val_score
import pandas as pd
df = pd.read_csv('/corpus.csv',
header=0, sep=',', names=['id', 'content', 'label'])
X = tfidf_vect.fit_transform(df['content'].values)
y = df['label'].values
from sklearn import cross_validation
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,
y, test_size=0.33)
from sklearn.svm import SVC
svm_1 = SVC(kernel='linear')
svm_1.fit(X, y)
svm_1_prediction = svm_1.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
然后根据指标我获得了以下混淆矩阵和分类报告,如下:
print '\nClasification report:\n', classification_report(y_test, …Run Code Online (Sandbox Code Playgroud) 在特定的应用程序中,我需要机器学习(我知道我在本科课程中学到的东西).我使用支持向量机并解决了问题.它的工作正常.
现在我需要改进系统.这里的问题是
我每周都会获得额外的培训示例.现在,系统开始使用更新的示例(旧示例+新示例)进行新的培训.我想让它增量学习.使用以前的知识(而不是前面的例子)和新的例子来获得新的模型(知识)
我的训练样例有3个班级.因此,每个训练样例都适合这三个类中的一个.我想要"未知"类的功能.任何不适合这3个类的东西都必须标记为"未知".但我不能将"未知"视为一个新类,并为此提供示例.
假设,实现了"未知"类.当类是"未知"时,应用程序的用户输入他认为该类可能的内容.现在,我需要将用户输入合并到学习中.我也不知道怎么做.如果用户输入一个新类(即一个尚未在训练集中的类),它会有什么不同吗?
我是否需要选择新算法或支持向量机可以执行此操作?
PS:我正在使用libsvm实现SVM.