ナンセンスな話はあまりしません。コードを見てみましょう。
#! conding:utf-8
def quick_index(array, start, end):
left, right = start, end
key = array[left]while left < right:while left < right and array[right] key:
right -=1
array[left]= array[right]while left < right and array[left]< key:
left +=1
array[right]= array[left]
array[left]= key
return left
def min_num(array, m):
start, end =0,len(array)-1
index =quick_index(array, start, end)while index != m:if index < m:
index =quick_index(array, index+1, end)else:
index =quick_index(array, start, index)print(array[:m])if __name__ =='__main__':
alist =[15,54,26,93,17,77,31,44,55,20]min_num(alist,5)
**補足知識:top-k精度インデックスのpython numpy **
top-k accは、複数分類の場合にkスコアが最も高いラベルが取得され、真の値と一致することを意味します。ラベルが一致する限り、結果はTrueになります。
たとえば、5つのカテゴリを持つ複数分類タスクの場合
a_real =1
a_pred =[0.02,0.23,0.35,0.38,0.02]
# top-1
a_pred_label =3 match = False
# top-3
a_pred_label_list =[1,2,3] match = True
トップ1の精度のために
sklearn.metricsは、スコアを直接計算できる精度メソッドを提供しますが、topk-accの場合は、自分で実装する必要があります。
#5 クラス:0、1、2、3、4 numpyをnpとしてインポート
a_real = np.array([[1],[2],[1],[3]])
# スコアの代わりにランダムな数字を使用する
random_score = np.random.rand((4,5))
a_pred_score = random_score / random_score.sum(axis=1).reshape(random_score.shape[0],1)
k =3 #top-3
# 計算方法は以下のとおりです
max_k_preds = a_pred_score.argsort(axis=1)[:,-k:][:,::-1] #トップを獲得-k label
match_array = np.logical_or.reduce(max_k_preds==a_real, axis=1) #一致する結果を取得する
topk_acc_score = match_array.sum()/ match_array.shape[0]
上記のpythonのtopkアルゴリズムの例は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。
Recommended Posts