2016-09-26 2 views
2

금속 코일의 품질을 예측하려고합니다. 나는 너비가 10 미터이고 길이가 1에서 6 킬로미터 인 금속 코일을 가지고있다. 훈련 데이터로서 ~ 600 개의 매개 변수가 각각 10 미터 측정되고 최종 품질 관리 표시가 좋음/나쁨 (전체 코일의 경우)입니다. 나쁜 것은 코일이 나쁘다는 것을 의미하는 최소한 1 개의 장소가 있다는 것을 의미합니다. 정확하게 데이터가 없습니다. 약 10000 개의 코일에 대한 데이터가 있습니다.몇 포인트의 분실, 맞춤형 손실 함수 및 기울기로서의 손실 기능

우리는이 데이터에 대해 로지스틱 회귀를 훈련시키고 싶다고 상상해 봅니다 (2 가지 요인).

X = [[0, 0], 
     ... 
    [0, 0], 
    [1, 1], # coil is actually broken here, but we don't know it yet. 
    [0, 0], 
     ... 
    [0, 0]] 

Y = ????? 

나는 분류기를 혼란스럽게 할 것이므로 Y에 "bad"를 넣고 분류기를 실행시킬 수는 없습니다. 나는 나쁜 위치에 있는지 모르기 때문에 "좋은"것과 "나쁜"을 모두 넣을 수는 없습니다.

내가 생각한 해답은 손실 함수를 sum ((Y-min (F (x1, x2)))^2) (1 개의 코일에 속한 모든 F) 아니요 합계 ((YF (x1, x2))^2)입니다. 이 경우 아마도 F가 나쁜 장소를 가리 키도록 올바르게 훈련받습니다. 나는 그라디언트가 필요합니다. 모든 점에서 그것을 계산하는 것은 불가능합니다. 모든 부분에서 분을 구별 할 수는 없지만 대신 (모든 위치에서 코일에서 최소 인 함수 값을 사용하여) 약한 그래디언트를 사용할 수 있습니다.

나는 그것을 스스로 구현하는 법을 어느 정도 알고있다. 질문은 scikit-learn으로 파이썬에서 그것을하는 가장 간단한 방법이다. 이상적으로 그것은 여러 가지 학습 방법 (손실 함수와 그라디언트를 기반으로하는 많은 메소드)과 동일하거나 (쉽게 적용 할 수 있어야합니다.) 가능하면이 방법으로 작동하는 학습 방법에 대한 래퍼를 만들 수 있습니까?

업데이트 : gradient_boosting.py를 보면 : 손실 및 그래디언트를 계산할 수있는 내부 추상 클래스 LossFunction이 있으며, 시각적으로 보입니다. 일반적인 해결책이없는 것처럼 보입니다.

+0

"최소 (F (x1, x2))"란 무엇을 의미합니까 ** 위에서 **이 최소 작업은 무엇입니까? F (x1, x2)는 숫자 일 뿐이므로 일반적인 표기법처럼 보이지 않습니다. 행렬인가요? 따라서 당신은 항상 "비관적"이되고 전체 집합에서의 하락 예측이 무엇이든 예측을 취하고 싶습니까? – lejlot

+0

하나의 코일을 통해, 물론 전체 집합 아닙니다. –

+0

원래 질문이 업데이트되었습니다. –

답변

2

기계 학습 커뮤니티에서는 수퍼 셋 학습으로 알려져 있습니다. 즉, {(x_i, y_i)} 형태의 교육을 설정 한 일반적인 감독 설정 대신 { x_1, ..., x_N}, y_1)}을 사용하여 집합의 적어도 하나의 요소에 y_1 속성이 있음을 알 수 있습니다. 이는 매우 일반적인 설정은 아니지만 도메인에있는 논문에 대해 Google에서 사용할 수있는 일부 연구를 통해 기존에 존재합니다.

자신의 손실 함수의 측면에서 - scikit-learn은 no-go입니다. Scikit-learn은 단순성에 관한 것으로, 유연성이 거의없는 작은 도구 세트를 제공합니다. 그것은 연구 도구가 아니며 문제는 연구입니다. 대신 무엇을 사용할 수 있습니까? autograd과 같은 상징적 인 차별화 솔루션을 사용하면 을 파이썬 코드으로 구별 할 수 있으며 그 위에는 scipy.optimize.minimize을 적용하면 완료됩니다. 모든 맞춤형 손실 기능은 정상적으로 작동합니다.

최소주의 사항으로 최소 연산자는 식별 할 수 없으므로 모델에서 무슨 일이 일어나고 있는지 파악하기 힘들 수 있습니다. 곱셈이 매우 차별화 될 수 있기 때문에 sum((Y - prod_x F(x_1, x_2))^2)을 시도해 볼 수 있습니다. 비슷한 효과를 얻을 수 있습니다. 적어도 하나의 요소가 0으로 예측되면 남은 요소에서 "1"응답이 제거됩니다.당신은 더 수치 적으로 안정하기 위해 한 단계 더 나아가 수행 할 수 있습니다

if Y==0 then loss = sum_x log(F(x_1, x_2)) 
if Y==1 then loss = sum_x log(1-F(x_1, x_2)) 

로 변환하는 이
Y * sum_x log(1-F(x_1, x_2)) + (1-Y) * sum_x log(F(x_1, x_2)) 
이 문제는 참으로 당신은 완벽한 의미가 교차 엔트로피 비용 유사성을 발견 할 수

입니다 때문에 분류. 그리고 지금 당신은 완벽한 확률 론적 손실을 가지고 있습니다 - 각 세그먼트의 그러한 확률을 "좋음"또는 "좋음"으로 붙이면 전체 객체가 좋지 않을 확률이 높습니다 (Y == 0 인 경우) 또는 낮음 (Y = = 1).