pyfof를 사용하여 FoF 알고리즘을 테스트하는 방법
12001 단어 Python
FoF 알고리즘이란
알고리즘은 매우 간단하고 매개 변수는 하나이며 그것을 문턱값 r로 한다.
pyfof 설치
pyfofpythn에서 친구 그룹(Friends of Friends cluster finding)을 빠르게 실현하는 프로그램 라이브러리입니다.
설치 시,
pip install pyfof
OK (@Google colab, 2028.19)실행 예
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import pyfof
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
data = np.vstack((np.random.normal(-1,0.2,(nptsperdim,ndim)),\
np.random.normal(1,0.2,(nptsperdim,ndim))))
groups = pyfof.friends_of_friends(data, 0.4)
colors = cm.rainbow(np.linspace(0, 1, len(groups)))
for g,c in zip(groups, colors):
plt.scatter(data[g,0], data[g,1], color=c, s=3)
plt.show()
이렇게 되면,R*-tree
이렇게 예쁘게 두 반으로 나눌 수 있다.
다음은 다른 반을 중간에 두는 게 어때요?
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
data = np.vstack((np.random.normal(-1,0.2,(nptsperdim,ndim)),\
np.random.normal(1,0.2,(nptsperdim,ndim)),\
np.random.normal(0.,0.2,(nptsperdim,ndim))))
groups = pyfof.friends_of_friends(data, 0.4) # 0.4 だと大きすぎで,全部同じクラスに分類されてしまう.
colors = cm.rainbow(np.linspace(0, 1, len(groups)))
for g,c in zip(groups, colors):
plt.scatter(data[g,0], data[g,1], color=c, s=3)
plt.show()
그러면 모두 같은 색깔이다. 즉, 같은 반이 된 것이다.그럼 범위를 조금만 바꿔주세요.
npts = 10000
ndim = 2
nptsperdim = int(npts/ndim)
# ガウシアンのシグマを小さくする.
data = np.vstack((np.random.normal(-1,0.1,(nptsperdim,ndim)),\
np.random.normal(1,0.1,(nptsperdim,ndim)),\
np.random.normal(0.,0.1,(nptsperdim,ndim))))
groups = pyfof.friends_of_friends(data, 0.2) # 0.2して少し基準を小さくする.かつ,上のシグマを小さくした.
colors = cm.rainbow(np.linspace(0, 1, len(groups)))
for g,c in zip(groups, colors):
plt.scatter(data[g,0], data[g,1], color=c, s=3)
plt.show()
보니,고스인의 시그마를 축소하고 판정 기준을 0.4에서 0.2로 축소했기 때문에 꼬박 세 반으로 나뉘었다.
코드도 열람할 수 있다.
Reference
이 문제에 관하여(pyfof를 사용하여 FoF 알고리즘을 테스트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamadasuzaku/items/68a22081e848030bc963텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)