【问题标题】:How to work with probabilistic classification with scikit learn SVC's?如何使用 scikit learn SVC 进行概率分类?
【发布时间】:2016-01-18 11:17:40
【问题描述】:

首先我的数据是这样的:

label|instances(sentences)
5    |1190
4    |839
3    |239
2    |204
1    |127

然后我交叉验证:

from sklearn import cross_validation
kf = cross_validation.KFold(n=len(y),n_folds=10)

for train_index, test_index in kf:
    print "\nTRAIN:\n", train_index, "\n TEST:\n", test_index
    X_train, X_test = X_combined_features[train_index], X_combined_features[test_index]
    y_train, y_test = y[train_index], y[test_index]

documentation我知道可以按如下方式开启概率度量:

svm = SVC(probability=True)

我想使用概率分类和 SVM,所以假设我读取了数据,然后执行以下操作:

from sklearn.svm import SVC
svm = SVC(kernel='linear', probability=True)
svm.fit(reduced_training_matrix, y)
output_proba = svm.predict_proba(reduced_testing_matrix)
print output_proba

然后我得到了这个:

[[ 0.06351278  0.05312154  0.07709772 ...,  0.41958171  0.00076087
   0.00076095]
 [ 0.05813505  0.05373973  0.08617775 ...,  0.47467149  0.00082695
   0.00082701]
 [ 0.05576647  0.04756668  0.08216568 ...,  0.47984425  0.00077685
   0.00077693]
 ..., 
 [ 0.05983482  0.03972051  0.07636607 ...,  0.4853006   0.00070774
   0.00070783]
 [ 0.05813505  0.05373973  0.08617775 ...,  0.47467149  0.00082695
   0.00082701]
 [ 0.05989075  0.04822012  0.07795987 ...,  0.48084117  0.00073095
   0.00073101]]

上述练习引发了几个问题:该数组输出是什么(即它是什么意思?),我是否以正确的方式做事?...如果不是,我应该如何进行才能使用使用 SVC 进行概率分类?

更新:

vector_of_probabilities_for_sample= reduced_training_matrix[j,:]
print vector_of_probabilities_for_sample.toarray()

[[ 0.  0.  0.  0.  0.  0.]]


probability_of_corresponding_class = reduced_training_matrix[j,:]
print probability_of_corresponding_class.toarray()

[[ 0.  0.  0.  0.  0.  0.]]

【问题讨论】:

    标签: numpy machine-learning scipy nlp scikit-learn


    【解决方案1】:

    那个数组输出是什么

    reduced_training_matrix 中每个对应样本的某个标签的概率。这里的每 i 列 - 对应类 svm.classes_[i] 的概率,每 j 行 - 样本 reduced_training_matrix[j,:] 的概率向量。显然每一行之和等于1。

    我做事的方式正确吗?

    是的。

    【讨论】:

    • 感谢您的反馈。我编辑了问题并添加了我如何交叉验证。你认为我交叉验证的方式是正确的吗?...我有疑问,因为我的表现很差。
    • @johndoe,我真的不明白你。你想做什么?交叉验证在哪里?为什么你使用你的样本矩阵,然后将它的行命名为'probability_of_corresponding_class'?
    • 我只想做一个如何使用概率 SVC 分数的示例......但我不理解文档示例。我根据您的回答给出这些名称...您能否提供一个简单的示例...只是为了了解使用上述方法的正确方法?谢谢!
    • @johndoe,但在您之前的示例中一切正常(更新部分除外)。你到底想做什么?交叉验证?但你不需要在 CV 中使用概率。
    • 在机器学习交叉验证中仅用于获得学习模型在总体上的一些近似预测精度。根据这个分数,你可以判断这个模型是否足够准确,或者比较不同模型的 CV 分数来选择最好的一个。所以是的,如果您不想比较模型,则不需要 CV。你可以在这里阅读更多关于简历的信息scikit-learn.org/stable/model_selection.html#model-selection 或者查看简历示例scikit-learn.org/stable/auto_examples/model_selection/…
    猜你喜欢
    • 2017-09-11
    • 2014-04-27
    • 2018-01-24
    • 2015-12-01
    • 2016-05-16
    • 2019-09-01
    • 2017-08-08
    • 2015-03-01
    • 2016-03-17
    相关资源
    最近更新 更多