2014-12-20 1 views
0

나는 (이 비록 같은파이썬에서 제대로 해시 기능을 사용하는 방법에

x = np.array([3,2,0,4,5,2,1...]) #the dimension of the vectors is above 50000 
y = np.array([1,3,4,2,4,1,4...]) 

내가하고 싶은 것은이 벡터의 차원을 줄이기 위해 해싱 기능을 사용하는 것입니다 같은 차원의 다양한 배열을 가지고 충돌이 될 것입니다.) 그런 다음 더 낮은 치수 벡터가 분류기에 사용될 수 있습니다. 내가 시도 무엇

는, 그러나

from sklearn.feature_extraction import FeatureHasher 
hasher = FeatureHasher() 
hash_vector = hasher.transform(x) 

입니다 FeatureHasher 직접 사용할 수 없습니다 것 같다 그리고 내가 다음에 어떻게해야 원활하게 해싱 기능을 수행하기 위해, AttributeError: 'matrix' object has no attribute 'items'

따라서 말한다? 내가 누락 된 것이 있으면 알려주실 수 있습니까? 또는 기능 해싱을보다 효과적으로 수행 할 수있는 다른 방법이 있습니까?

답변

1

transform 메서드에 대한 인수는 반복 가능한의 샘플이어야하며 단일 샘플이 아니어야합니다 (http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.FeatureHasher.html 참조).

는하지만, 코드에 더 문제가있다 : 당신은 심부름 군을 구축 input_type을 통과하지 않는, 그래서 dict을 디폴트의 - "사전 (FEATURE_NAME, 값)를 통해"(필요 어디서 items :-)에 대한 .

어쨌든 입력 유형이 없으면 해시가 transform에 전달하려는 것으로 보이는 "이름 지정되지 않은"기능을 허용 할 수는 없지만 기능 해싱이 작동하지 않는 것입니다.

당신은 ... 당신의 답변을

+0

감사 등 http://scipy-lectures.github.io/advanced/scikit-learn/#dimension-reduction-with-principal-component-analysis 등의 차원 축소에 서로 다른 접근 방식을 고려할 수 있습니다. 만약 당신이 feature hashing을 사용하기를 원한다면, 나는 feature name을'transform' 메쏘드에 넘겨야 만합니다, 그렇죠? 기능 이름이 필요한 이유는 무엇입니까? – allenwang

+0

예, 기능 해싱에서 해시되는 기능입니다. 기능 이름이없고 기능 해시가 없습니다! 자세한 내용은 http://en.wikipedia.org/wiki/Feature_hashing –

+0

안녕하세요, 선생님, 친절한 답변을 주셔서 대단히 감사합니다. 나는 또 다른 질문이있다. 'scikit'에서는 텍스트 분류에 기능 해싱을 사용할 수 있다고합니다. 그러나 트레이닝 벡터의 차원을 줄이기 위해 피쳐 해싱을 사용하면 정확도가 떨어질 것입니다. 맞습니까? 너의 도움이 정말로 필요해. – allenwang

관련 문제