2016-12-31 9 views
-1

안녕하세요이 분류를 수행 할 sklearn 함께 일하고, 나는 레이블의 다음 배포 한 :다음 SVC에 대한 최적의 클래스 가중치 매개 변수는 무엇입니까?

명확하게 눈에 띄는
label : 0 frecuency : 119 
label : 1 frecuency : 1615 
label : 2 frecuency : 197 
label : 3 frecuency : 70 
label : 4 frecuency : 203 
label : 5 frecuency : 137 
label : 6 frecuency : 18 
label : 7 frecuency : 142 
label : 8 frecuency : 15 
label : 9 frecuency : 182 
label : 10 frecuency : 986 
label : 12 frecuency : 73 
label : 13 frecuency : 27 
label : 14 frecuency : 81 
label : 15 frecuency : 168 
label : 18 frecuency : 107 
label : 21 frecuency : 125 
label : 22 frecuency : 172 
label : 23 frecuency : 3870 
label : 25 frecuency : 2321 
label : 26 frecuency : 25 
label : 27 frecuency : 314 
label : 28 frecuency : 76 
label : 29 frecuency : 116 

한 가지 내가 불균형 데이터 세트로 작업하고 있다는 것입니다 나는 많은 레이블이 나는 많은 0을 얻고있다

   precision recall f1-score support 

      0  0.00  0.00  0.00  31 
      1  0.61  0.23  0.34  528 
      2  0.00  0.00  0.00  70 
      3  0.67  0.06  0.11  32 
      4  0.00  0.00  0.00  62 
      5  0.78  0.82  0.80  39 
      6  0.00  0.00  0.00   3 
      7  0.00  0.00  0.00  46 
      8  0.00  0.00  0.00   5 
      9  0.00  0.00  0.00  62 
     10  0.14  0.01  0.02  313 
     12  0.00  0.00  0.00  30 
     13  0.31  0.57  0.40   7 
     14  0.00  0.00  0.00  35 
     15  0.00  0.00  0.00  56 
     18  0.00  0.00  0.00  35 
     21  0.00  0.00  0.00  39 
     22  0.00  0.00  0.00  66 
     23  0.41  0.74  0.53  1278 
     25  0.28  0.39  0.33  758 
     26  0.50  0.25  0.33   8 
     27  0.29  0.02  0.03  115 
     28  1.00  0.61  0.76  23 
     29  0.00  0.00  0.00  42 

avg/total  0.33  0.39  0.32  3683 

을하고 SVC는 여러 클래스에서 내가 사용하고있는 하이퍼 파라미터를 학습 할 수 없습니다 다음과 같이 클래스 25,23,1,10, 나는 훈련 후 나쁜 결과를 얻고있다 다음과 같습니다 :

01 237,971,845,922,718,718,093,210

나는 다음과 같이 내가 각 클래스에 대한 가중치 하나 개 사전을 지은이 문제를 극복하기 위해 :

weight={} 
for i,v in enumerate(uniqLabels): 
     weight[v]=labels_cluster.count(uniqLabels[i])/len(labels_cluster) 

for i,v in weight.items(): 
     print(i,v) 
print(weight) 

이들은으로 나눈 숫자와 출력, 난 그냥 determinated 라벨의 요소의 수를 복용하고 있습니다 설정 레이블에있는 요소의 총,이 숫자의 합은 1 : 다음과 같이

0 0.010664037996236221 
1 0.14472622994892015 
2 0.01765391164082803 
3 0.006272963527197778 
4 0.018191594228873554 
5 0.012277085760372793 
6 0.0016130477641365713 
7 0.012725154583744062 
8 0.0013442064701138096 
9 0.01630970517071422 
10 0.0883591719688144 
12 0.0065418048212205395 
13 0.002419571646204857 
14 0.007258714938614571 
15 0.015055112465274667 
18 0.009588672820145173 
21 0.011201720584281746 
22 0.015413567523971682 
23 0.34680526928936284 
25 0.20799354780894344 
26 0.0022403441168563493 
27 0.028138722107715744 
28 0.006810646115243301 
29 0.01039519670221346 

가중치의 사전 다시 시도 :

from sklearn import svm 
clf2= svm.SVC(kernel='linear',class_weight=weight) 
,

내가 가지고 :

   precision recall f1-score support 

      0  0.00  0.00  0.00  31 
      1  0.90  0.19  0.31  528 
      2  0.00  0.00  0.00  70 
      3  0.00  0.00  0.00  32 
      4  0.00  0.00  0.00  62 
      5  0.00  0.00  0.00  39 
      6  0.00  0.00  0.00   3 
      7  0.00  0.00  0.00  46 
      8  0.00  0.00  0.00   5 
      9  0.00  0.00  0.00  62 
     10  0.00  0.00  0.00  313 
     12  0.00  0.00  0.00  30 
     13  0.00  0.00  0.00   7 
     14  0.00  0.00  0.00  35 
     15  0.00  0.00  0.00  56 
     18  0.00  0.00  0.00  35 
     21  0.00  0.00  0.00  39 
     22  0.00  0.00  0.00  66 
     23  0.36  0.99  0.52  1278 
     25  0.46  0.01  0.02  758 
     26  0.00  0.00  0.00   8 
     27  0.00  0.00  0.00  115 
     28  0.00  0.00  0.00  23 
     29  0.00  0.00  0.00  42 

avg/total  0.35  0.37  0.23  3683 

내가 정말 자동으로 각 클래스의 무게를 조정하고 SVC에서 그것을 표현하는 제안을 주셔서 감사합니다 좋은 결과를 얻고 있지 않다 때문에, 나는 돈이 너무 모든 불균형 문제를 다루는 많은 expierience이 제안은 잘 받았습니다.

답변

1

당신이해야 할 일과 반대되는 것처럼 보입니다. 특히, 소규모 클래스에 더 높은 가중치를 두어 클래스에 대한 학습 중에 분류 자에게 불이익이 더 많이 발생하도록하는 것이 좋습니다. 시작할 때 좋은 점은 class_weight="balanced"입니다.

+0

예 나는 당신의 의견에 동의한다. 나의 접근 방식과 반대 다. 데이터의 실제 상황을 그 숫자로 반영하고 싶었는데, 이제는 그 숫자를 사용하여 그 반대를 달성하는 새로운 규칙을 구성해야한다고 생각한다. 그러나이 수를 고려하면 - – neo33