Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么sklearn.svm.svc的predict_proba函数给出的概率大于1?_Python_Scikit Learn_Svm_Svc - Fatal编程技术网

Python 为什么sklearn.svm.svc的predict_proba函数给出的概率大于1?

Python 为什么sklearn.svm.svc的predict_proba函数给出的概率大于1?,python,scikit-learn,svm,svc,Python,Scikit Learn,Svm,Svc,我有一个sklearn.svm.svc(RBF内核)模型,在两个类上训练,每个类包含140个样本。当我尝试预测时,概率设置为true,这两类的预测概率是不同的 对于某些测试样本,它给出的概率大于1 还有一个不到一个 e、 g('sample-1':1.55478334,'sample-2': 0.999984) 在某些情况下,它给出的两个概率都小于一 e、 g (“样本-1”:0.418229494776875,“样本-2”: 0.5817703505223113) 我的模型是否运行良好,或者我

我有一个sklearn.svm.svc(RBF内核)模型,在两个类上训练,每个类包含140个样本。当我尝试预测时,概率设置为true,这两类的预测概率是不同的

  • 对于某些测试样本,它给出的概率大于1
    还有一个不到一个

    e、 g('sample-1':1.55478334,'sample-2': 0.999984)

  • 在某些情况下,它给出的两个概率都小于一

    e、 g (“样本-1”:0.418229494776875,“样本-2”: 0.5817703505223113)

  • 我的模型是否运行良好,或者我的培训或测试中是否存在一些错误。

    我的代码如下:

    #Training code      
            tcdf512_d1=np.empty(280,(18)),dtype=float)
                lables=np.empty((0))
                model512_d1=SVC(probability=True)
                for img,img2 in map(None,catA,catB):
                    if img!=None:
                        tcdf512_d1[k]=img(18 features i.e. skewness,variance, standard deviation etc)
                        k+=1
                        lables=np.append(lables,'Cat-VI')
                        pass
                    if img2!=None:
                        tcdf512_d1[k]=img2(18 features i.e. skewness,variance, standard deviation etc)
                        k+=1
                        lables=np.append(lables,'Cat-VII')
                        pass
                    if k%50==0:
                        print (k)
    
                print ("LBP Calculated")
                print (time.strftime('%d/%m/%Y %H:%M:%S'))
                model512_d1.fit(tcdf512_d1,lables)
                tcdf512_d1=None
                lables=None
                k=None
                print ("Model Trained")
                print (time.strftime('%d/%m/%Y %H:%M:%S'))
                joblib.dump(model512_d1,"Cat/momentsCat_6-7_128_d1.pkl",compress=3)
                print ("Model Saved")
                print (time.strftime('%d/%m/%Y %H:%M:%S'))
                model512_d1=None
    #Testing Code
    
        size=128
        Cat_I_II       =  joblib.load("Cat/momentsCat_6-7_128_d1.pkl")
        name1="VII"
        print (name1)
        images_address="Catagory/Testbg/"+name1+"/"
        name1="Cat-"+str(name1)
        test_images = cvutils.imlist(images_address)
    
        count =images_address.rfind("/")+1
        results1=[]
        print (len(test_images))
        print ("Start Time ")
        print (time.strftime('%d/%m/%Y %H:%M:%S'))
        j=float(len(test_images))
        k=0
    #    testdata=[]
        for img3 in test_images:
            results1.append("Image : "+str(img3[count:]))
            results1.append("\n")
        varientarray=[]        
            array=[]
            array.append(img3(18 features i.e. skewness,variance, standard deviation etc))
            print array
            prediction = Cat_I_II.predict(array)[0]
            prob=Cat_I_II.predict_proba(array)[0]
            prob_per_class_dictionary = dict(zip(Cat_I_II.classes_, prob))
            print(prediction,prob_per_class_dictionary)
            results1.append("Result of Cat_I_II is : "+str(prediction) +"\t"+str(prob_per_class_dictionary))
            varientarray.append(prediction)
    
            print (k)
            print ("Final Result of image "+str(i[count:]) + " is : "+str(collections.Counter(varientarray).most_common(1)[0][0]))
            results1.append("Final Result of image "+str(i[count:]) + " is : "+str(collections.Counter(varientarray).most_common(1)[0][0]))
    
            if str(i[count:i.index('0')])==collections.Counter(varientarray).most_common(1)[0][0]:
                j-=1
            gc.collect()
            k+=1
        k=float(j*100/len(test_images))
        Accuracy=float((len(test_images)-j)*100/len(test_images))
        print (j)
        print (k)
        print (Accuracy)
        with open("CatResults/_Finalresults.txt", 'a') as f:
            f.write(str("The accuracy for "+str(name1)+" is :"+str(Accuracy)) +"\n")
        results1.append("Incorrect Results are :"+str(j))
        results1.append("The percentage of incorrect result is :"+str(k))
        results1.append("The accuracy is :"+str(Accuracy))
        with open("CatResults/Cat-"+str(name1)+"resultsp2.txt", 'w') as f:
            for s in results1:
                f.write(str(s) +"\n")
        print ("End Time")
        print(time.strftime('%d/%m/%Y %H:%M:%S'))
    
    我的结果片段如下


    请注意这些概率中的
    e-06
    e-08
    。这相当于科学记数法中的10^(-08)。所以你所想的以上1个概率是非常非常非常小的

    例如:

    2.798594e-06 = 0.000002798594
    
    同样地

    7.7173288137e-08 = 0.000000077173288137
    
    所以当你把这些值加起来,你会得到1。如果不是1,那么它将是0.9999999。由于显示结果的四舍五入,这是预期的结果

    因此,
    predict\u proba
    结果并不矛盾。他们实际上是正确的

    至于为什么预测结果与最高预测概率不匹配,这在文档中有描述,并且是由于算法内部的预期行为。请查看文档:-

    概率估计值可能与分数不一致 感觉到分数的“argmax”可能不是 概率。(例如,在二元分类中,样本可能是
    由predict标记为属于概率的类,请注意这些概率中的
    e-06
    e-08
    。这相当于科学记数法中的10^(-08)。因此,您所考虑的上述1个概率非常小

    例如:

    2.798594e-06 = 0.000002798594
    
    同样地

    7.7173288137e-08 = 0.000000077173288137
    
    因此,当你将这些值相加时,你将得到1。如果不是1,那么它将类似于0.9999999…这是由于显示结果的四舍五入

    因此,
    predict\u proba
    结果并不矛盾。它们实际上是正确的

    现在,关于预测结果与最高预测概率不匹配的原因,文档中对此进行了描述,这是算法内部的预期行为。请查看文档:-

    概率估计值可能与分数不一致 感觉到分数的“argmax”可能不是 概率。(例如,在二元分类中,样本可能是
    由predict标记为属于具有概率的类,这是舍入错误吗?请添加一些示例的实际输出。不要在您的措辞中操纵它。看起来简单舍入已关闭。还请显示您使用的代码。(从声明SVC到概率)感谢Kumar建议编辑,并添加了编辑,这不是舍入错误机器给出的结果,我很困惑为什么请重新阅读帖子,舍入错误?请添加一些示例的实际输出。不要在您的措辞中操纵它。看起来简单舍入已关闭。还请显示您使用的代码。(从宣布SVC到概率)感谢Kumar建议编辑,并添加了编辑,这不是舍入错误机器给出的结果,我很困惑为什么请重新阅读PostThank,Vivek Kumar,它解决了我的问题。谢谢,Vivek Kumar,它解决了我的问题。