我正在使用scikit中的sklearn.svm.svc来学习二进制分类.我正在使用它的predict_proba()函数来获得概率估计.谁能告诉我predict_proba()如何在内部计算概率?
我使用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是决策分数.
或者,我可以使用其他选项来分类,以便有效地执行此操作吗?
谢谢.
我如何知道样本的概率属于由支持向量机中的Scikit-Learn的predict()函数预测的类?
>>>print clf.predict([fv])
[5]
Run Code Online (Sandbox Code Playgroud)
有什么功能吗?
我开始学习Scikit-learn ...
>>> import sklearn
>>> sklearn.__version__
'0.13.1'
>>> from sklearn import svm
>>> model = svm.SVC(probability=True)
>>> X = [[1,2,3], [2,3,4]] # feature vectors
>>> Y = ['apple', 'orange'] # classes
>>> model.fit(X, Y)
>>> model.predict_proba([1,2,3])
array([[ 0.39097541, 0.60902459]])
Run Code Online (Sandbox Code Playgroud)
我怎么知道哪个班级应该是哪个?
我写了这段代码,想获得分类的概率。
from sklearn import svm
X = [[0, 0], [10, 10],[20,30],[30,30],[40, 30], [80,60], [80,50]]
y = [0, 1, 2, 3, 4, 5, 6]
clf = svm.SVC()
clf.probability=True
clf.fit(X, y)
prob = clf.predict_proba([[10, 10]])
print prob
Run Code Online (Sandbox Code Playgroud)
我得到了这个输出:
[[0.15376986 0.07691205 0.15388546 0.15389275 0.15386348 0.15383004 0.15384636]]
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为概率应该是
[0 1 0 0 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)
(注意必须预测类别的样本与第二个样本相同)同样,该类别获得的概率最低。
使用案例:
我有一个小数据集,每个类中有大约3-10个样本.我使用sklearn SVC分类那些RBF内核.我需要预测的信心以及预测的类.我使用了SVC的predict_proba方法.我得到了奇怪的结果.我搜索了一下,发现它只适用于较大的数据集.
在堆栈上发现这个问题Scikit-learn predict_proba给出了错误的答案.
该问题的作者通过将数据集相乘来验证这一点,从而复制数据集.
我的问题:
1)如果我将我的数据集乘以100,每个样本100次,它会增加"predict_proba"的"正确性".会有什么副作用?过拟合?
2)还有其他方法可以计算出分类器的置信度吗?就像超飞机的距离一样?
3)对于这个小样本,SVM是推荐的算法还是我应该选择别的?
python artificial-intelligence machine-learning svm scikit-learn