ঘূর্ণন কোণের প্যারামিটারাইজেশন রিগ্রেশন


15

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

  • একটি সিগময়েড বা তান অ্যাক্টিভেশন ব্যবহার করুন, এটি ( পরিসরে স্কেল করুন এবং ক্ষতির ক্রিয়ায় বিজ্ঞপ্তিযুক্ত সম্পত্তি অন্তর্ভুক্ত করুন। আমি মনে করি এটি মোটামুটি কঠিনভাবে ব্যর্থ হবে, কারণ এটি সীমান্তে থাকলে (সবচেয়ে খারাপ ভবিষ্যদ্বাণী) কেবলমাত্র একটি সামান্য কিছুটা আওয়াজ ওজনকে এক পথে বা অন্য পথে যেতে বাধ্য করবে। এছাড়াও, এবং সীমানার নিকটে মানগুলি পৌঁছনো আরও বেশি কঠিন হবে কারণ পরম-অ্যাক্টিভেশন মানটি অসীমের কাছাকাছি হওয়া দরকার।0,2π)02π

  • দুইটি মানের, একটি থেকে প্রত্যাবর্তন এবং মান এবং হ্রাস নিরূপণ কোণ এই দুটি মান নিশ্চিত করতে উপর ভিত্তি করে। আমি মনে করি এটির আরও সম্ভাবনা রয়েছে তবে এই ভেক্টরের আদর্শটি সীমাহীন, যা সংখ্যার অস্থিরতার দিকে পরিচালিত করতে পারে এবং প্রশিক্ষণের সময় ধাক্কা খেয়ে বা 0 তে যেতে পারে। এই আদর্শটি 1 থেকে খুব বেশি দূরে যেতে রোধ করতে কিছু অদ্ভুত নিয়ামক ব্যবহার করে এটি সম্ভবত সমাধান করা যেতে পারে।এক্সY

অন্যান্য বিকল্পগুলি সাইন এবং কোসাইন ফাংশনগুলির সাথে কিছু করছে তবে আমি মনে করি যে একই আউটপুটে একাধিক প্রাক-অ্যাক্টিভেশন মানচিত্রগুলি অপ্টিমাইজেশন এবং সাধারণীকরণকেও খুব কঠিন করে তুলবে।


সত্যিই আমি মনে করি মোট ঘোরানোর পূর্বাভাস দেওয়ার চেষ্টা করা আরও সহজ হবে এবং আপনাকে আরও ভাল ফলাফল পাবে। আপনি চাইলে বাস্তবতার পরে উদাহরণস্বরূপ থেকে পর্যন্ত ম্যাপ করতে পারেন। গুণনের পরে ইউনিট বৃত্তে কোণটি পূর্বাভাস দেওয়ার চেষ্টা করা মূলত দ্বারা ভাগ করার পরে অবশিষ্টটির পূর্বাভাস দেওয়ার চেষ্টা করা হয় , এবং আমি দেখতে পাচ্ছি না যে সামগ্রিক মাত্রার পূর্বাভাস দেওয়ার পরে বিয়োগ করার চেয়ে কীভাবে সহজ হবে I । 3ππ2π2π
টম

1
বিকল্পগুলি ক) সাময়িক দিকের পদক্ষেপ: সিগময়েড অ্যাক্টিভেশন ফাংশনটি ব্যবহার করে কোণটির পাপ এবং কোস অনুমান করুন। খ) যেমন কার্নেলের মাধ্যমে ক্ষতির ফাংশনে প্রতিসাম্যকে অন্তর্ভুক্ত করুন । রোটেশন গ্রুপ এবং ট্যাকো কোহেনের রূপান্তর গ্রুপগুলি শেখার বিষয়ে থিসিস সম্পর্কে পড়ুন । দুর্ভাগ্যক্রমে আমি গ্রুপ তত্ত্ব সম্পর্কে জ্ঞাত নই তাই আমি আরও বেশি সাহায্য করতে পারি না।
এমরে

@ টম সেই পদ্ধতির বিষয়টি হ'ল অসীম প্রাক-ক্রিয়াকলাপ রয়েছে যা একই কোণে মানচিত্র করে যখন তাদের মধ্যে সাধারণ কিছু নেই। একটি ইতিবাচক X1 সবসময় একটি -1/2 মধ্যে একটি কোণের বলতে বোঝানো হচ্ছে এবং 1 \ 2 π । এবং এমরে, আমি কিছু গ্রুপ তত্ত্বের মাধ্যমে আমার পথে কাজ করব, এটি আমাকে সর্বদা আগ্রহী তাই এমএল এবং গ্রুপ তত্ত্বের সংমিশ্রণটি আমার কাছে আবেদন করবেππ
জান ভ্যান ডের ভেগট

উত্তর:


15

দ্বিতীয় উপায়, এবং y = s i n ( α ) এর পূর্বাভাস সম্পূর্ণ ঠিক আছে।এক্স=গুলি(α)Y=গুলিআমিএন(α)

হ্যাঁ, পূর্বাভাস আদর্শ ভেক্টর কাছাকাছি হতে নিশ্চিত করা হয় না 1 । তবে এটি ফুরিয়ে যাওয়ার সম্ভাবনা নেই, বিশেষত যদি আপনি সিগময়েড অ্যাক্টিভেশন ফাংশন (যা তাদের প্রকৃতির দ্বারা আবদ্ধ) ব্যবহার করা হয় এবং / অথবা আপনার মডেলটিকে নিয়মিত করে তোলে। যদি সমস্ত প্রশিক্ষণের নমুনাগুলি [ - 1 , 1 ] এ থাকত তবে আপনার মডেলটি কেন একটি বড় মানের পূর্বাভাস দেবে ?(এক্স,Y)1[-1,1]

অন্য দিকটি ভেক্টর খুব কাছাকাছি ( 0 , 0 ) । এটি কখনও কখনও ঘটতে পারে এবং ফলস্বরূপ ভুল কোণগুলির পূর্বাভাস দিতে পারে। তবে এটি আপনার মডেলের সুবিধার হিসাবে দেখা যেতে পারে - আপনি ( x , y ) এর আদর্শটিকে আপনার মডেলের আত্মবিশ্বাসের পরিমাপ হিসাবে বিবেচনা করতে পারেন । প্রকৃতপক্ষে, 0 এর কাছাকাছি একটি আদর্শের অর্থ হল আপনার মডেলটি সঠিক দিকটি কোথায় তা নিশ্চিত নয়।(এক্স,Y)(0,0)(এক্স,Y)

পাইথনের এখানে একটি ছোট্ট উদাহরণ রয়েছে যা দেখায় যে পাপ এবং মহাবিদ্যার পূর্বাভাস দেওয়া ভাল that

# predicting the angle (in radians)
import numpy as np
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import r2_score
# generate toy data
np.random.seed(1)
X = np.random.normal(size=(100, 2))
y = np.arctan2(np.dot(X, [1,2]), np.dot(X, [3,0.4]))
# simple prediction
model = MLPRegressor(random_state=42, activation='tanh', max_iter=10000)
y_simple_pred = cross_val_predict(model, X, y)
# transformed prediction
joint = cross_val_predict(model, X, np.column_stack([np.sin(y), np.cos(y)]))
y_trig_pred = np.arctan2(joint[:,0], joint[:,1])
# compare
def align(y_true, y_pred):
    """ Add or remove 2*pi to predicted angle to minimize difference from GT"""
    y_pred = y_pred.copy()
    y_pred[y_true-y_pred >  np.pi] += np.pi*2
    y_pred[y_true-y_pred < -np.pi] -= np.pi*2
    return y_pred
print(r2_score(y, align(y, y_simple_pred))) # R^2 about 0.57
print(r2_score(y, align(y, y_trig_pred)))   # R^2 about 0.99

সাইন-কোসাইন মডেলের ভবিষ্যদ্বাণীগুলি প্রায় সঠিক কিনা তা দেখতে আপনি ভবিষ্যদ্বাণীগুলি চালিয়ে যেতে পারেন এবং আরও কিছুটা ক্রমাঙ্কণের প্রয়োজন হতে পারে:

import matplotlib.pyplot as plt
plt.figure(figsize=(12, 3))
plt.subplot(1,4,1)
plt.scatter(X[:,0], X[:,1], c=y)
plt.title('Data (y=color)'); plt.xlabel('x1'); plt.ylabel('x2')
plt.subplot(1,4,2)
plt.scatter(y_simple_pred, y)
plt.title('Direct model'); plt.xlabel('prediction'); plt.ylabel('actual')
plt.subplot(1,4,3)
plt.scatter(y_trig_pred, y)
plt.title('Sine-cosine model'); plt.xlabel('prediction'); plt.ylabel('actual')
plt.subplot(1,4,4)
plt.scatter(joint[:,0], joint[:,1], s=5)
plt.title('Predicted sin and cos'); plt.xlabel('cos'); plt.ylabel('sin')
plt.tight_layout();

এখানে চিত্র বর্ণনা লিখুন

আপডেট । একটি নেভিগেশন ইঞ্জিনিয়ার লক্ষ্য করেছেন যে কোণটি কাছাকাছি থাকলে এই জাতীয় মডেল সবচেয়ে নির্ভুল হবেπএন2αকোসাইন্(α)পাপ(α)z- র=পাপ(α+ +π4)W=কোসাইন্(α+ +π4)

(এক্স,Y)(z- র,W)(এক্স,Y)arctan2


এটি নিখুঁত, অনেক অনেক ধন্যবাদ। আমি এটি আরও খতিয়ে দেখব, আমি এটি আরও মাত্রা পর্যন্ত প্রসারিত করার প্রয়োজন যাচ্ছি
জান ভ্যান ডের Vegt

2

কার্টেসিয়ান সমন্বয়কারীদের সাথে কাজ করা উপরে বর্ণিত হিসাবে ভাল কাজ করে। তবুও, আমার মতে, পোলার ডেটা কার্টেসিয়ানে রূপান্তর করা X এবং Y স্থানাঙ্কের মধ্যে নির্ভরতা তৈরি করে যা মূলত ডেটাতে উপস্থিত ছিল না। উদাহরণস্বরূপ, কোনও রোবটের পথের সিদ্ধান্তের মডেল কার্তেসিয়ানের চেয়ে মেরু স্থানাঙ্কে আরও স্বজ্ঞাত। কোণ এবং প্রস্থের মধ্যে পোলার স্থানাঙ্কগুলিতে রোবটের বেগের ভেক্টরের নির্ভরতা এমনকি কার্তেসিয়ান স্থানাঙ্কের নির্ভরতার চেয়ে অস্তিত্ব বা পৃথক নাও হতে পারে।

আমি যে মেরু স্থানাঙ্কের সাথে কাজ চালিয়ে যেতে পেয়েছি তা হ'ল ম্যাটল্যাবে অ্যাংডিফ () ফাংশন এবং যথারীতি প্রস্থের পার্থক্যটি ব্যবহার করে কোণ পার্থক্য গণনা করার জন্য একটি কাস্টম ত্রুটি ফাংশন তৈরি করা।

এই ফাংশনটি 'পি' এবং পাইয়ের পার্থক্যের জন্য '0' প্রদান করে। এখানে ম্যাথওয়ার্কস ওয়েবসাইটে ফাংশন সহায়তা পৃষ্ঠার লিঙ্ক।

https://www.mathworks.com/help/robotics/ref/angdiff.html

আপনি যদি সিগময়েড অ্যাক্টিভেশন ব্যবহার করছেন এবং আপনার অ্যাঙ্গেলগুলি [0,1] এর মধ্যে স্বাভাবিক করা হয় তবে আপনার অ্যাংডিফ () ফাংশনটি ব্যবহার করার আগে এটিকে [-pi, pi] পরিসরে ফিরিয়ে নেওয়া উচিত এবং তারপরে [0,1] এ ফিরে ত্রুটিটিকে স্বাভাবিক করুন ] ব্যাকপ্রসারণ প্রক্রিয়াটির জন্য ব্যাপ্তি।

এছাড়াও পাইথনে সমমানের কাজটি হ'ল:

import numpy as np


def angdiff(a, b):
    delta = np.arctan2(np.sin(b-a), np.cos(b-a))
    delta = np.around(delta, 4)  # Since np.sin(pi) result is 1.22e-16
    delta += 0.  # Since np.around return -0.
    return delta


pi = np.pi
a = np.asarray([pi/2, 3*pi/4, 0])
b = np.asarray([pi, pi/2, -pi])

print(angdiff(a, b))
print(angdiff(pi, -pi))
print(angdiff(-pi, pi))

এটি ম্যাটল্যাব ফাংশন হিসাবে একই ফলাফল প্রদান করে এবং অ্যারেগুলির সাথেও কাজ করে:

[ 1.5708 -0.7854 -3.1416]
0.0
0.0

আশা করি এইটি কাজ করবে.

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