[PYTHON] 사용자 정의 메트릭을 사용하여 Sklearn kNN 사용
PYTHON사용자 정의 메트릭을 사용하여 Sklearn kNN 사용
현재 주어진 포인트에 대해 가장 가까운 k 개의 이웃을 찾기 위해 kNN 알고리즘을 사용할 필요가있는 프로젝트를 수행하고 있습니다. 예를 들어, Python을 사용하여 sk, 작업을 수행하기위한 sklearn 패키지를 만들지 만 사전 정의 된 메트릭은 기본값이 아닙니다. 측정 항목 그래서 여기에 여기에서 찾을 수있는 sklearn의 문서에서 사용자 정의 된 메트릭을 사용해야합니다.
sklearn kNN의 최신 버전이 사용자 정의 메트릭을 지원하는 것으로 보이지만이를 사용하는 방법을 찾을 수 없습니다.
import sklearn
from sklearn.neighbors import NearestNeighbors
import numpy as np
from sklearn.neighbors import DistanceMetric
from sklearn.neighbors.ball_tree import BallTree
BallTree.valid_metrics
mydist = max (x-y)라는 메트릭을 정의한 다음 DistanceMetric.get_metric을 사용하여 DistanceMetric 객체로 만듭니다.
dt=DistanceMetric.get_metric('pyfunc',func=mydist)
문서에서이 줄은 다음과 같아야합니다.
nbrs = NearestNeighbors(n_neighbors=4, algorithm='auto',metric='pyfunc').fit(A)
distances, indices = nbrs.kneighbors(A)
그러나 dt를 어디에 넣을 수 있습니까? 감사
해결법
-
==============================
1.메트릭을 메트릭 매개 변수로, 추가 메트릭 인수를 키워드 매개 변수로 NN 생성자에 전달합니다.
메트릭을 메트릭 매개 변수로, 추가 메트릭 인수를 키워드 매개 변수로 NN 생성자에 전달합니다.
>>> def mydist(x, y): ... return np.sum((x-y)**2) ... >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) >>> nbrs = NearestNeighbors(n_neighbors=4, algorithm='ball_tree', ... metric='pyfunc', func=mydist) >>> nbrs.fit(X) NearestNeighbors(algorithm='ball_tree', leaf_size=30, metric='pyfunc', n_neighbors=4, radius=1.0) >>> nbrs.kneighbors(X) (array([[ 0., 1., 5., 8.], [ 0., 1., 2., 13.], [ 0., 2., 5., 25.], [ 0., 1., 5., 8.], [ 0., 1., 2., 13.], [ 0., 2., 5., 25.]]), array([[0, 1, 2, 3], [1, 0, 2, 3], [2, 1, 0, 3], [3, 4, 5, 0], [4, 3, 5, 0], [5, 4, 3, 0]]))
-
==============================
2.이전 답변에 작은 추가. 추가 인수를 사용하는 사용자 정의 메트릭을 사용하는 방법
이전 답변에 작은 추가. 추가 인수를 사용하는 사용자 정의 메트릭을 사용하는 방법
>>> def mydist(x, y, **kwargs): ... return np.sum((x-y)**kwargs["metric_params"]["power"]) ... >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) >>> Y = np.array([-1, -1, -2, 1, 1, 2]) >>> nbrs = KNeighborsClassifier(n_neighbors=4, algorithm='ball_tree', ... metric=mydist, metric_params={"power": 2}) >>> nbrs.fit(X, Y) KNeighborsClassifier(algorithm='ball_tree', leaf_size=30, metric=<function mydist at 0x7fd259c9cf50>, n_neighbors=4, p=2, weights='uniform') >>> nbrs.kneighbors(X) (array([[ 0., 1., 5., 8.], [ 0., 1., 2., 13.], [ 0., 2., 5., 25.], [ 0., 1., 5., 8.], [ 0., 1., 2., 13.], [ 0., 2., 5., 25.]]), array([[0, 1, 2, 3], [1, 0, 2, 3], [2, 1, 0, 3], [3, 4, 5, 0], [4, 3, 5, 0], [5, 4, 3, 0]]))
from https://stackoverflow.com/questions/21052509/sklearn-knn-usage-with-a-user-defined-metric by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 어떻게 numpy 배열을 "확장"할 수 있습니까? (0) | 2018.10.27 |
---|---|
[PYTHON] Python + Selenium + PhantomJS에서 PDF로 렌더링 (0) | 2018.10.27 |
[PYTHON] PANDAS의 SQL과 유사한 창 기능 : Python Pandas Dataframe의 행 번호 매기기 (0) | 2018.10.27 |
[PYTHON] 파이썬에서 크로스 플랫폼 콘솔 앱용 저주 라이브러리 (0) | 2018.10.27 |
[PYTHON] Scikit-Learn에서 의사 결정 트리 시각화 (0) | 2018.10.27 |