অ-প্রতিসাম্য ব্যয় ফাংশন সহ লিনিয়ার রিগ্রেশন?


13

Y(x)Y^(x)Y(x)

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

আমি মনে করি একটি সাধারণ লিনিয়ার রিগ্রেশন সম্পূর্ণরূপে সূক্ষ্ম করা উচিত। সুতরাং আমি কীভাবে এটি ম্যানুয়ালি বাস্তবায়ন করতে জানি, তবে আমি অনুমান করি যে আমি এই ধরণের সমস্যা সহকারে প্রথম নই। আমি যা করতে চাই সেখানে কি কোনও প্যাকেজ / গ্রন্থাগার রয়েছে (পছন্দসই অজগর)? আমার কীওয়ার্ডটি সন্ধান করতে হবে?

আমি যদি একটি ফাংশন জানত যেখানে । এই বিধিনিষেধগুলি কার্যকর করার সর্বোত্তম উপায় কী?Y0(x)>0Y(x)>Y0(x)


সম্ভবত, সবচেয়ে সহজ সমাধানটি ভবিষ্যদ্বাণীটি ইতিবাচক বা নেতিবাচক কিনা তার ভিত্তিতে বিভিন্ন ওজন ব্যবহার করা। আমার এটা আগে চিন্তা করা উচিত ছিল।
asPlankBridge

উত্তর:


11

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি অতিরিক্ত বিবেচনার দিক থেকে ভুল করতে চান। যদি তা হয় তবে আপনার প্রয়োজন উপযুক্ত, অসমমিত ব্যয় ফাংশন। একটি সাধারণ প্রার্থী হ'ল বর্গক্ষেত্রের ক্ষয়টি সরিয়ে নেওয়া:

L:(x,α)x2(sgnx+α)2

যেখানে হ'ল একটি প্যারামিটার যা আপনি অত্যধিক মূল্যবিরোধের বিরুদ্ধে অবমূল্যায়নের জরিমানা বন্ধ করতে ব্যবহার করতে পারেন। এর ধনাত্মক মানগুলি শাস্তি দেয়, তাই আপনি সেট করতে চান negative । অজগরটিতে এটির মতো দেখাচ্ছে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, গুগল থেকে একটি মেশিন লার্নিং লাইব্রেরি যা স্বয়ংক্রিয় বিভেদকে সমর্থন করে (এ জাতীয় সমস্যার গ্রেডিয়েন্ট-ভিত্তিক অপ্টিমাইজেশন সহজতর করে তোলে)। আমি এই উদাহরণটি একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করব ।

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স্পষ্টতই অবমূল্যায়ন না করার চেষ্টা করে। আমি কনভার্জেন্সের জন্য চেক করিনি, তবে আপনি ধারণাটি পাবেন।


এই বিস্তারিত উত্তরের জন্য আপনাকে ধন্যবাদ: acostফাংশনটির সংজ্ঞা যদিও একটি প্রশ্ন । আপনি y_model-Yদুবার গণনা করার বিষয়টি কী আসে যায়?
asPlankBridge

আপনি গতির দিক দিয়ে বলতে চান? আমি জানি না; টেনস্রোফ্লো পুনরায় গণনা এড়ায় কিনা তা আপনাকে নিজেই দেখতে হবে। অন্যথায় তা ঠিক আছে।
এমের 6

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.