비대칭 비용 함수를 사용한 선형 회귀?


13

나는 어떤 값을 예측하려는 Y(x) 나는 몇 가지 예측을 얻기 위해 노력하고 Y ( X ) 가능한 한 낮게되고, 여전히보다 큰 사이를 최적화를 . 즉, Y^(x)Y(x)

cost{Y(x)Y^(x)}>>cost{Y^(x)Y(x)}

간단한 선형 회귀는 완전히 잘되어야한다고 생각합니다. 그래서 나는 이것을 수동으로 구현하는 방법을 다소 알고 있지만, 이런 종류의 문제가있는 것은 처음이 아니라고 생각합니다. 내가하고 싶은 일을하는 패키지 / 라이브러리 (바람직하게는 파이썬)가 있습니까? 찾아야 할 키워드는 무엇입니까?

내가 함수 알고 있다면 여기서 . 이러한 제한을 구현하는 가장 좋은 방법은 무엇입니까?Y0(x)>0Y(x)>Y0(x)


아마도 가장 간단한 해결책은 예측이 긍정적인지 부정인지에 따라 다른 가중치를 사용하는 것입니다. 나는 그것에 대해 더 일찍 생각 했어야했다.
asPlankBridge

답변:


11

내가 당신을 올바르게 이해한다면, 당신은 과대 평가의 측면에서 실수를하고 싶습니다. 그렇다면 적절한 비대칭 비용 함수가 필요합니다. 간단한 후보 중 하나는 제곱 손실을 조정하는 것입니다.

:(엑스,α)엑스2(에스엑스+α)2

여기서 은 과소 평가에 대한 과소 평가의 페널티를 없애기 위해 사용할 수있는 매개 변수입니다. 양수의 α는 과대 평가에 불이익을 주므로 α를 음수 로 설정해야합니다 . 파이썬에서는 다음과 같습니다1<α<1ααdef loss(x, a): return x**2 * (numpy.sign(x) + a)**2

의 두 값에 대한 손실 함수

다음으로 몇 가지 데이터를 생성하겠습니다.

import numpy
x = numpy.arange(-10, 10, 0.1)
y = -0.1*x**2 + x + numpy.sin(x) + 0.1*numpy.random.randn(len(x))

임의의 기능

마지막으로, tensorflow자동화 된 차별화를 지원하는 Google의 머신 러닝 라이브러리 인에서 회귀 분석을 수행합니다 (그러한 문제의 그라디언트 기반 최적화가 더 간단 해짐). 이 예제 를 시작점으로 사용 하겠습니다 .

import tensorflow as tf

X = tf.placeholder("float") # create symbolic variables
Y = tf.placeholder("float") 

w = tf.Variable(0.0, name="coeff")
b = tf.Variable(0.0, name="offset")
y_model = tf.mul(X, w) + b

cost = tf.pow(y_model-Y, 2) # use sqr error for cost function
def acost(a): return tf.pow(y_model-Y, 2) * tf.pow(tf.sign(y_model-Y) + a, 2)

train_op = tf.train.AdamOptimizer().minimize(cost)
train_op2 = tf.train.AdamOptimizer().minimize(acost(-0.5))

sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)

for i in range(100):
    for (xi, yi) in zip(x, y): 
#         sess.run(train_op, feed_dict={X: xi, Y: yi})
        sess.run(train_op2, feed_dict={X: xi, Y: yi})

print(sess.run(w), sess.run(b))

cost는 비정규 acost손실 함수 인 반면, 정규 제곱 오차 입니다.

당신이 사용 cost하면 얻을

1.00764 -3.32445

비용

당신이 사용 acost하면 얻을

1.02604 -1.07742

비용

acost과소 평가하지 않으려 고한다. 수렴을 확인하지는 않았지만 아이디어를 얻었습니다.


이 자세한 답변에 감사드립니다 : acost함수 정의에 대한 한 가지 질문 . y_model-Y두 번 계산하는 것이 중요합니까 ?
asPlankBridge

당신은 속도의 관점에서 의미합니까? 모르겠다. tensorflow가 재 계산을 피할 수 있는지 직접 확인해야합니다. 그렇지 않으면 괜찮습니다.
Emre

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.