2014-07-15 3 views
-1

sklearn이 New York = 1 Boston = 2 Chicago = 3과 같이 숫자로 나타내는 범주 형 변수를 처리하는 방법에 대해 궁금합니다. 파이썬은 이것이 범주 형인지 아니면 순서대로 숫자로 취급하는지 알고 있습니까? 이 문제에 대해 게시글 here에 대해 논의했습니다. 그것이 옳은지 아닌지 나는 모른다.Sklearn의 숫자 카테고리 변수

또한 나는 그런 라이브러리를 sklearn에 적용 할 때이 두 형식의 차이 일 것입니다 무엇

[1,0,0] 
[0,1,0] 
[0,0,1] 

으로 희소 행렬 형식으로 그들 모두를 변경해야하는지 여부를 몰라?

sklearn이 범주 형 변수를 제대로 처리 할 수없는 경우 R은이를 무시할 것입니까?

감사합니다.

업데이트 : @larsmans에서 권장하는 중복 질문을보고 있지만, 실제로 sklearn이 범주 변수를 잘 처리 할 수 ​​있다고 대답 in this post의 측면에서 내 질문에 대답하지 않았다

어떻게합니까 R에있는 패키지와 비교해보십시오. 이전에 일부 게시물을 보았지만 큰 데이터 세트에서는 문제가 없지만 작은 데이터 세트에는 영향을 미칩니다. @larsmans에서 트리 알고리즘을 제외하고 다른 메소드는 수치적인 범주 형 변수를 더미로 전송해야합니다. 실제로 각 변수에 대해 3000 개 이상의 범주가 있습니다. DictVectorizer를 사용하여 스파 스 매트릭스로 변경하는 것이 효율적이라고 생각하지 않거나 oneHotEncoder가 효율적인 방법입니다. 이것은 당신이 좋은 생각하지 않을 수 있습니다 일반 수의 멀티 클래스 범주 변수를 표현하기 위해

DictVectorizer을 필요처럼

+0

안녕하세요 @larsmans 내 갱신 – MYjx

답변

2

보인다. 가장 좋은 방법은 n-class 범주 변수를 n 개의 boolean 변수로 변환하는 것입니다. 예제에서 "== New York", "== Boston"및 "== Chicago"를 표시하기 위해 3 개의 새로운 부울 변수를 만들어야합니다.

from sklearn.feature_extraction import DictVectorizer 
v = DictVectorizer(sparse = True) 


D = [{"Value" : 100, "City": "New York"}, 
    {"Value" : 70, "City": "Boston"}, 
    {"Value" : 99, "City": "Chicago"}, 
    ] 

X = v.fit_transform(D) 
print v.get_feature_names() 
print X 

출력 :

['City=Boston', 'City=Chicago', 'City=New York', 'Value'] 
[[ 0. 0. 1. 100.] 
[ 1. 0. 0. 70.] 
[ 0. 1. 0. 99.]] 
+0

를 참조하십시오 실제로 내 변수가 나는 그렇게 – MYjx

+0

@MYjx을 수행하는 효율적인 될 것 유무를 알 수없는 3000 개 이상의 카테고리를 가지고, 스파 스 매트릭스를 사용하여 기능을 저장하도록 선택할 수 있습니다. 높은 카디널리티는 샘플 크기가 압도적이지 않은 한 문제가 될 수 없습니다. – JimmyK

+0

thx! 실제로는 4000 레코드 만 있습니다. 너무 많은 변수가있어 df가 너무 작 으면 두려워합니다. – MYjx