이 코드를 사용하여 클러스터의 ARI 둘 사이의 세트를 계산하기 위해 노력하고 있어요 :컴퓨팅 조정 랜드 색인
#computes ARI for this type of clustering
def ARI(table,n):
index = 0
sum_a = 0
sum_b = 0
for i in range(len(table)-1):
for j in range(len(table)-1):
sum_a += choose(table[i][len(table)-1],2)
sum_b += choose(table[len(table)-1][j],2)
index += choose(table[i][j],2)
expected_index = (sum_a*sum_b)
expected_index = expected_index/choose(n,2)
max_index = (sum_a+sum_b)
max_index = max_index/2
return (index - expected_index)/(max_index-expected_index)
#choose to compute rand
def choose(n,r):
f = math.factorial
if (n-r)>=0:
return f(n) // f(r) // f(n-r)
else:
return 0
나는 아직도 (의 범위를 벗어나는 값을 얻을, 내가 제대로 우발 테이블을 만든 가정 - 1,1). 예를 들어
:
비상 테이블 : 내 코드를 실행하면
[1, 0, 0, 0, 0, 0, 0, 1]
[1, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 1, 0, 0, 0, 1]
[0, 1, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 1, 1, 2]
[1, 0, 1, 0, 1, 0, 0, 3]
[0, 0, 0, 0, 0, 0, 1, 1]
[3, 1, 1, 1, 1, 1, 2, 0]
는 -1.6470588235294115
의 ARI를 얻을 수 있습니다. 이 코드에 버그가 있습니까? 또한 여기에
내가 비상 행렬을 계산하고 방법입니다
table = [[0 for _ in range(len(subjects)+1)]for _ in range(len(subjects)+1)]
#comparing all clusters
for i in range(len(clusters)):
index_count = 0
for subject, orgininsts in orig_clusters.items():
madeinsts = clusters[i].instances
intersect_count = 0
#comparing all instances between the 2 clusters
for orginst in orgininsts:
for madeinst in makeinsts:
if orginst == madeinst:
intersect_count += 1
table[index_count][i] = intersect_count
index_count += 1
for i in range(len(table)-1):
a = 0
b = 0
for j in range(len(table)-1):
a += table[i][j]
b += table[j][i]
table[i][len(table)-1] = a
table[len(table)-1][i] = b
clusters
은 해당 클러스터에 포함 된 인스턴스의 목록입니다 속성 instances
을 가지고 클러스터 객체의 목록입니다. orig_clusters
은 클러스터 레이블을 나타내는 키가있는 dictonary이며 값은 해당 클러스터에 포함 된 인스턴스의 목록입니다. 이 코드에 버그가 있습니까?
감사합니다. 완전성을 위해,'table'의 마지막 행과 열은 나머지 행과 열의 합계입니다. 그래서 내가 실제로하고 싶었던 것은'table [ len (table) -1]'[len (table) -1]''을 호출하고 마지막 두 열을 사용하여'sum_a'와'sum_b'를 계산합니다. 마지막 열과 행을 지우고'ARI 테이블)'이 작동하고 마지막 행과 열을 만들 필요가 없습니다. – tharvey
오 - 나는 그것을 보지 못했습니다. 이 경우 루프를 하나 또는 여러 번 반복하면 제 편집을 볼 수 있습니다 :) – erocoar