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