聚類精確度(cluster accuracy,ac)用於比較獲得標籤和資料提供的真實標籤:
a c=
∑i=1
nδ(s
i,ma
p(ri
))
nac = \frac^\delta(s_i , map(r_i))}
ac=n∑i
=1n
δ(si
,ma
p(ri
))
其中:r
ir_i
ri為聚類後的標籤。s
is_i
si為真實標籤。n
nn為資料總的個數。δ
\delta
δ表示指示函式,具體如下:
δ (x
,y)=
1 & if x=y \\ 0 & otherwise \end
δ(x,y)
={10
ifx
=yot
herw
ise
而式中的map則表示最佳類標的重現分配,以確保統計的正確。一般的該最佳重分配可以通過匈牙利演算法(kuhn-munkres or hungarian algorithm)實現,從而在多項式時間內求解該任務(標籤)分配問題。
需要numpy和sklearn庫。利用sklearn呼叫匈牙利演算法
也可以直接呼叫scikit-learn庫中的函式來計算metrics.accuracy_score(y_true, y_pred)
import numpy as np
from sklearn import metrics
defacc
(y_true, y_pred)
:"""
calculate clustering accuracy. require scikit-learn installed
# arguments
y: true labels, numpy.array with shape `(n_samples,)`
y_pred: predicted labels, numpy.array with shape `(n_samples,)`
# return
accuracy, in [0,1]
"""y_true = y_true.astype(np.int64)
assert y_pred.size == y_true.size
d =max(y_pred.
max(
), y_true.
max())
+1w = np.zeros(
(d, d)
, dtype=np.int64)
for i in
range
(y_pred.size)
: w[y_pred[i]
, y_true[i]]+=
1from sklearn.utils.linear_assignment_ import linear_assignment
ind = linear_assignment(w.
max(
)- w)
return
sum(
[w[i, j]
for i, j in ind])*
1.0/ y_pred.size
if __name__ ==
'__main__'
:# a為真實值、b,c,d為等效果的**值 即: func(a,b)=func(a,c); func(b,d)=func(c,d);
a = np.array([1
,1,1
,1,1
,1,2
,2,2
,2,2
,2,3
,3,3
,3,3
])b = np.array([1
,2,1
,1,1
,1,1
,2,2
,2,2
,3,1
,1,3
,3,3
])c = np.array([2
,1,2
,2,2
,2,2
,1,1
,1,1
,3,2
,2,3
,3,3
])# 將b中的 1 與 2 互換
d = np.array([1
,3,1
,1,1
,1,1
,3,3
,3,3
,2,1
,1,2
,2,2
])# 將b中的 2 與 3 互換
# 測試
print
(acc(a, b)
)# 0.7058823529411765
print
(acc(a, c)
)# 0.7058823529411765
print
(metrics.accuracy_score(a, b)
)# 0.7058823529411765
print
(acc(b, d)
)# 1.0
print
(acc(c, d)
)# 1.0
BC高精確度函式使用。
bc是binary calculator的縮寫。bc 函式的引數都是運算元加上乙個可選的 int scale 比如string bcadd string left operand,string right operand int scale 如果scale沒有提供,就用bcscale的預設值。這裡大...
關於C timer 時間精確度的問題
我想用精確的時間計算,需要精確到毫秒級別,執行後發下有誤差。請教高人怎麼實現。c code?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 staticsystem.diagnostics.stopwatch stw newsystem.d...
精確度,召回率,真陽性,假陽性
已知如圖 金標準 標準集 演算法 集 驗證存在 t 驗證不存在 f 合計 存在 p 為正,真實為正 tp 為正,真實為負 fp p 為正樣本 不存在 n 為負,真實為正 fn 為負,真實為負 tn n 為負樣本 合計t 驗證為正樣本 f 驗證為負樣本 所有樣本數 p n或者t f 簡化後 標準集測試...