sklearn.svm在建立好模型后怎么使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sklearn.svm在建立好模型后怎么使用相关的知识,希望对你有一定的参考价值。

参考技术A from sklearn import externals
externals.joblib.dump(clf,'文件名') #clf是fit好的模型,文件名是保存在本地的文件
clf=externals.joblib.load(‘文件名’) #这样就又把本地的模型载入,可以使用了
参考技术B SVM既可以用来分类,就是SVC;又可以用来预测,或者成为回归,就是SVR。sklearn中的svm模块中也集成了SVR类。 我们也使用一个小例子说明SVR怎么用。 X = [[0, 0], [1, 1]] y = [0.5, 1.5] clf = svm.SVR() clf.fit(X, y) result = clf.predict([2, 2]) print result

ROC下的sklearn svm area小于0.5用于训练数据

【中文标题】ROC下的sklearn svm area小于0.5用于训练数据【英文标题】:sklearn svm area under ROC less than 0.5 for training data 【发布时间】:2014-03-02 11:56:07 【问题描述】:

我正在使用 sklearn v 0.13.1 svm 来尝试解决二进制分类问题。我使用 kfold 交叉验证并计算 roc 曲线 (roc_auc) 下的面积来测试我的模型的质量。但是,对于某些折叠,roc_auc 小于 0.5,即使对于训练数据也是如此。这不应该是不可能的吗?算法不应该总是有可能在它正在训练的数据上至少达到 0.5 吗?

这是我的代码:

classifier = svm.SVC(kernel='poly', degree=3, probability=True, max_iter=100000)
kf = cross_validation.KFold(len(myData), n_folds=3, indices=False)
for train, test in kf:
    Fit = classifier.fit(myData[train], classVector[train])

    probas_ = Fit.predict_proba(myData[test])
    fpr, tpr, thresholds = roc_curve(classVector[test], probas_[:,1])
    roc_auc = auc(fpr, tpr)

    probas_ = Fit.predict_proba(myData[train])
    fpr2, tpr2, thresholds2 = roc_curve(classVector[train], probas_[:,1])
    roc_auc2 = auc(fpr2, tpr2)

    print "Training auc: ", roc_auc2, " Testing auc: ", roc_auc

输出如下:

    Training auc: 0.423920939062  Testing auc: 0.388436883629
    Training auc: 0.525472613736  Testing auc: 0.565581854043
    Training auc: 0.470917930528  Testing auc: 0.259344660194

曲线下面积小于0.5的结果有意义吗?原则上,如果训练值和测试值都

【问题讨论】:

【参考方案1】:

确实,您可以颠倒您的预测,这就是您的 AUROC 小于 0.5 的原因。这样做通常不是问题,只需确保保持一致并且始终或从不反转它们。确保在训练集和测试集上都这样做。

这个问题的原因可能是classifier.fitroc_curve 函数误解了你传递的classVector。解决这个问题可能更好 - 阅读他们的文档以了解他们确切期望的数据。特别是,您没有指定哪个标签是正面的。查看roc_curve 的pos_label 参数并确保正确指定y_true

然而,令人担忧的是,你的一些 AUROC 在训练集上 > 0.5,而且大多数都接近它。这可能意味着您的分类器的性能并不比随机分类器好多少。

【讨论】:

您好,非常感谢您的回复。我尝试使用 pos_label,但它并没有解决问题。如果我使用 pos_label=1 我会得到上面显示的输出。如果我使用 pos_label=0 我会得到反转的输出(即 1 - 显示的值),这是我所期望的。我的 y_true 都是 0 或 1 并与正确的事件相关联。 svm 是否有另一种混淆方式?我已经阅读了文档,但找不到任何迹象表明有办法让 roc_auc 可能是从数据的奇怪相关性到非最佳内核的使用。没有最少的可重现代码是不可能的。 @user3276811 我在使用 LogisticRegression 时遇到了类似的问题。你找到 AUC @jibounet 如果您希望有机会获得超出我在这里所写内容的答案,请使用可重复的示例编辑问题。 ***.com/help/mcve

以上是关于sklearn.svm在建立好模型后怎么使用的主要内容,如果未能解决你的问题,请参考以下文章

sklearn SVM(支持向量机)模型使用RandomSearchCV获取最优参数及可视化

ModuleNotFoundError:没有名为“sklearn.svm._classes”的模块

Keras 神经网络和 SKlearn SVM.SVC

ROC下的sklearn svm area小于0.5用于训练数据

参数“coef0”是不是表示 sklearn.svm.SVC 方法中的特定系数?

sklearn:评估 LinearSVC AUC