【问题标题】:Cross validation predictor score the same交叉验证预测器得分相同
【发布时间】:2016-12-11 21:10:39
【问题描述】:

我正在尝试选择具有更好预测分数的数据的 csv 文件。 我正在尝试使用以下代码确定交叉验证分数:

from __future__ import division
import os,csv
from sklearn import cross_validation
import numpy as np
from sklearn import svm
from sklearn import metrics

files = [e for e in os.listdir('.') if e.endswith('.csv')]

csvout = open('xval.csv','wb')
csvwriter=csv.writer(csvout)

for f in files:

    X,Y=[],[]
    feat=f[4:-4]
    print feat

    csvin = open(f,'rb')
    csvread=csv.reader(csvin)
    for row in csvread:
        X.append([row[0]])
        Y.append(1 if row[1]=='True' else 0)

    clf = svm.SVC(kernel='linear', C=1)
    predicted = cross_validation.cross_val_predict(clf, X, Y, cv=3) 
    print metrics.accuracy_score(Y, predicted)

csvout.close()

两个csv如下,a.csv和b.csv:

0.8307059089237866,False
0.07933411654760168,False
0.07933411654760168,False
0.07933411654760168,False
0.07933411654760168,False
0.8050114148789536,False
0.7050883824823811,True
0.07933411654760168,True
0.07933411654760168,True
0.07933411654760168,True
0.07933411654760168,True
0.07933411654760168,True
0.07933411654760168,True
0.07933411654760168,True
0.07933411654760168,True
0.6251499565651232,True

0.3507377775833331,False
0.2609619627153587,False
0.24483806968609972,False
0.7122564948467026,False
0.7172548646226102,False
0.1321163493448647,False
0.023658678331543205,True
0.5954080270729952,True
0.632479304055982,True
0.22412105580276065,True
0.3431509885671966,True
0.5954080270729952,True
0.1137442754294842,True
0.8312144672461341,True
0.1137442754294842,True

但是,我得到了完全相同的预测分数。这怎么可能?

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:

    当前代码将不起作用,因为 cross_val_predict() 函数的变量 CV(折叠数)大于 0 类的样本数(False)。如果将其降低到小于(或等于)6,它将起作用,并且 a.csv 的准确度为 0.6,b.csv 的准确度为 0.625。

    【讨论】:

    • 我实际上使用的是更大的数据集。 “Y”部分始终相同。这就是价值观相同的原因吗
    • 好的。不,这不是原因。如果 predicted 数组相同,则得分将相同。这就是发生在你身上的事。首先尝试打印 predicted 数组。你可能会注意到它是用 1 填充的,这不好。然后尝试在数据集中使用相同数量的 False 和 True,这肯定会改变准确度得分。但是您尝试做的并不是真正相关的,您的 X 数组必须具有多个功能。
    • 谢谢。我现在注意到预测包含相同的值。如何让它多样化?
    • 我之前解释的方式:首先平衡你的数据集,这意味着拥有相同数量的真假样本。然后,您必须向每个样本(在 X 数组中)添加多个特征,而不仅仅是一个。你的价值观是什么(例如:0.3507377775833331)?也许我可以进一步帮助你。
    • 要知道哪个结果最好,你必须训练你的分类器。交叉验证是一种改进训练过程的方法。所以基本上,你的方法“cross_val_predict”训练它。所以你做对了。但是只有一个特征,你的分类器就丢失了,他只是告诉你一切都是真的,而事实并非如此。你需要给他更多的特征来学习如何识别抄袭。
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2019-03-11
    • 2020-03-26
    • 2018-04-10
    • 2017-12-03
    • 2020-04-08
    • 2017-04-13
    • 2019-10-04
    相关资源
    最近更新 更多