Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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 将概率与scikit学习中的标签相连接_Python_Numpy_Scikit Learn - Fatal编程技术网

Python 将概率与scikit学习中的标签相连接

Python 将概率与scikit学习中的标签相连接,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我正在训练scikit learn的邻居.KNeighborsClassifier模型对象以预测多类分类问题。我已经预测了最可能的类,但是现在我想提取使用predict\u proba函数预测的第二个最可能的类。但是,函数的输出只给出一个原始numpy数组,它应该按字典顺序排序。然而,当我仔细观察数据,看看概率是否按字母顺序排列,但似乎不是这样 from sklearn import neighbors knn_classifier = neighbors.KNeighborsClassifi

我正在训练scikit learn的
邻居.KNeighborsClassifier
模型对象以预测多类分类问题。我已经预测了最可能的类,但是现在我想提取使用
predict\u proba
函数预测的第二个最可能的类。但是,函数的输出只给出一个原始numpy数组,它应该按字典顺序排序。然而,当我仔细观察数据,看看概率是否按字母顺序排列,但似乎不是这样

from sklearn import neighbors
knn_classifier  = neighbors.KNeighborsClassifier(n_neighbors = NUM_NEIGHBORS, weights = 'distance', metric ='haversine' )
knn_classifier.fit(knn_data, response)

unique_levels =  response.unique()
unique_levels.sort()
print unique_levels
    ['Canada' 'DCarea' 'NYarea' 'bostonArea' 'caribbean' 'eastAsia' 'florida'
     'hawaii' 'italy' 'midwest' 'nevada' 'newEngland' 'northernEurope'
     'northern_california' 'northern_france' 'notFound' 'otherSouthernEurope'
     'pacificNW' 'pennArea' 'south' 'southAmerica' 'southeastAsiaAus'
     'southern_california' 'spain' 'texas' 'unitedKingdom' 'west']

knn_preds = knn_classifier.predict(knn_data)
knn_probs = knn_classifier.predict_proba(knn_data)

knn_preds[0:10]
    array(['DCarea', 'NYarea', 'DCarea', 'Canada', 'midwest', 'unitedKingdom',
           'midwest', 'NYarea', 'NYarea', 'south'], dtype=object)

knn_probs[0]
    array([ 0.    ,  0.0667,  0.2667,  0.0333,  0.1   ,  0.    ,  0.    ,
            0.    ,  0.    ,  0.0667,  0.1   ,  0.    ,  0.    ,  0.0667,
            0.    ,  0.    ,  0.    ,  0.0333,  0.    ,  0.1   ,  0.    ,
            0.    ,  0.1333,  0.    ,  0.    ,  0.    ,  0.0333])

knn_probs[1]
    array([ 0.   ,  0.   ,  0.25 ,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ,
            0.   ,  0.125,  0.125,  0.   ,  0.   ,  0.25 ,  0.   ,  0.   ,
            0.   ,  0.125,  0.   ,  0.   ,  0.   ,  0.   ,  0.125,  0.   ,
            0.   ,  0.   ,  0.   ])

如果概率是按字典顺序排列的,我希望
knn_probs[0]
中的第二个键具有最高的概率,因为
'DCarea'
是获胜的类,它按字典顺序排在第二位(如上所述)。但是,最大值是列表中的第三项。有什么好处

我相信概率顺序遵循
knn\u分类器.classes\uu中提取标签的顺序。您可以
zip
一起预测概率向量,排序并获取第二个

classes\uu=np.array(['a','b','c'])
prob_vec=np.数组([0.6,0,0.4])

sec_class,sec_prob=list(排序(zip(class,prob_vec),key=lambda k:-k[1]))[1]

你有没有弄明白这一点?我猜你在用熊猫;你有没有试过绕过Pandas,只使用numpy数组和Python列表?我建议把这个问题转移到stats或data science上。当你说“类是按字典顺序排序的”时,是我一个人的问题还是文档完全错了?