将概率与scikitlearn中的标签联系起来

2024-09-27 07:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在训练scikit-learnneighbors.KNeighborsClassifier模型对象来预测多类分类问题。我已经预测了最有可能的类,但是现在我想提取使用predict_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'是获胜的类,并且它是按字典顺序排在第二位的(如上所述)。但是,最大值是列表中的第三个项。什么给予?在


Tags: data字典顺序neighbors概率arraypredictunique
1条回答
网友
1楼 · 发布于 2024-09-27 07:21:09

我相信概率顺序遵循knn_classifier.classes_中提取标签的顺序。你可以zip和{}一起预测概率向量,排序并取第二个。在

classes_ = np.array(['a','b','c']) prob_vec = np.array([0.6, 0, 0.4]) sec_class, sec_prob = list(sorted(zip(classes_, prob_vec), key=lambda k: -k[1]))[1]

相关问题 更多 >

    热门问题