숫자가 아닌 데이터로 KNeighborClassifier
을 트레이닝하려고하는데 샘플간에 유사성 점수를 계산할 수있는 사용자 지정 메트릭을 제공하고 있습니다.숫자가 아닌 데이터가있는 KNeighborClassifier가 실패합니다.
from sklearn.neighbors import KNeighborsClassifier
#Compute the "ASCII" distance:
def my_metric(a,b):
return ord(a)-ord(b)
#Samples and labels
X = [["a"],["b"], ["c"],["m"], ["z"]]
#S=Start of the alphabet, M=Middle, E=end
y = ["S", "S", "S", "M", "E"]
model = KNeighborsClassifier(metric=my_metric)
model.fit(X,y)
X_test = [["e"],["f"],["w"]]
y_test = [["S"],["M"],["E"]]
model.score(X_test, y_test)
나는 다음과 같은 오류 얻을 :
Traceback (most recent call last):
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/IPython/core/interactiveshell.py", line 2862, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-20-e339c96eea22>", line 1, in <module>
model.score(X_test, y_test)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/base.py", line 350, in score
return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/neighbors/classification.py", line 145, in predict
neigh_dist, neigh_ind = self.kneighbors(X)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/neighbors/base.py", line 361, in kneighbors
**self.effective_metric_params_)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 1247, in pairwise_distances
return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 1090, in _parallel_pairwise
return func(X, Y, **kwds)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 1104, in _pairwise_callable
X, Y = check_pairwise_arrays(X, Y)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 110, in check_pairwise_arrays
warn_on_dtype=warn_on_dtype, estimator=estimator)
File "/home/marcofavorito/virtualenvs/nlp/lib/python3.5/site-packages/sklearn/utils/validation.py", line 402, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: could not convert string to float: 'e'
내가 아주 쉽게 알고리즘을 구현할 수 추측을하지만, sklearn
분류의 모든 기능이없는. 몇 가지 옵션이 없어 졌어? 아니면 단순히 샘플을 수레로 번역하지 않으면 모델을 훈련 할 수 없습니까?
N.B. 그 문제는 문자 대신 숫자를 넣으면 쉽게 해결할 수 있습니다. 그러나 비 수치 데이터를 다루는 또 다른 문제를 해결할 필요가 있으며 이전에 말했듯이 수레로의 간단한 매핑을 찾을 수없는 경우가 있습니다.
나는 하나를 떠날 줄 알았습니다. 중요한 지적! 이 정보를 가져 주셔서 감사합니다. 메트릭 속성 :) –