মাল্টিভ্যারিয়েবল লিনিয়ার রিগ্রেশন

Last updated 3 months ago

গত পর্বগুলোতে আমরা দেখেছিলাম সিঙ্গেল ভ্যারিয়েবল বিশিষ্ট সমস্যাগুলোতে কীভাবে লিনিয়ার মডেল ফিট করতে হয়। আজকে আমরা দেখব, সমস্যাটি যদি মাল্টি ভ্যারিয়েবল / কলাম / ফিচার বিশিষ্ট হয় তাহলে তার অ্যানালাইসিসটা কেমন হবে।

মাল্টিভ্যারিয়েবল বিশিষ্ট ডেটাসেট

কাজ শুরুর আগে ডেটাসেটটা একনজর দেখা যাক,

Size ( feet2feet^{2} )

Number of Bedrooms

Number of floors

Age of home (years)

Price ($1000)

2104

5

1

45

460

1416

3

2

40

232

1534

3

2

30

315

852

2

1

36

178

লক্ষণীয়

লক্ষ করলে দেখা যাবে, আগের মত ইনপুট ভ্যারিয়েবল আর একটা নাই। বরং অনেকগুলো, তারমানে এখন আর আমরা ফিচার শুধু xx ধরলেই হবে না। এখন আমাদের প্রতিটা কলাম ম্যাথেমেটিক্যাল নোটেশন দিয়ে আলাদা করতে হবে যেন আমরা বুঝতে পারি কোনটা আসলে কোন কলাম। এটা করার জন্য আমরা প্রতি কলামের জন্য xx এর সাবস্ক্রিপ্ট দিয়ে কলাম নাম্বার বসাব। সুপারস্ক্রিপ্টে রো (Row) ইন্ডেক্স বসবে এবং সাবস্ক্রিপ্টে বসবে কলাম (Column) ইন্ডেক্স।

উদাহরণ: (শুধু প্রথম Row এর জন্য)

Size(feet2)=x1(1)Size \; ( feet^{2} ) = x_{1}^{(1)}

Numberofbedrooms=x2(1)Number \; of \; bedrooms = x_{2}^{(1)}

Numberoffloors=x3(1)Number \; of \; floors = x_{3}^{(1)}

Ageofhome=x4(1)Age \; of \; home = x_{4}^{(1)}

Price=y1(1)Price = y_{1}^{(1)}

তাহলে ii তম ইনপুট ভ্যারিয়েবল হবে xix_{i} এবং ii তম আউটপুট ভ্যারিয়েবল হবে yiy_{i}

২য় উদাহরণ

আমরা যদি দ্বিতীয় সারির ইনপুট ভ্যারিয়েবলগুলোকে ম্যাট্রিক্সে সাজাতে চাই তাহলে সেটা হবে এইরকম, যেহেতু আমরা নির্দিষ্ট কোন Columwise ভ্যারিয়েবল বিবেচনা করছি না, সবগুলো ভ্যারিয়েবল নিয়ে একটি ম্যাট্রিক্স তৈরি করেছি তাই আমাদের আলাদা করে সাবস্ক্রিপ্ট বসানোর মানে নেই।

X(2)=[14163240]X^{(2)} = \begin{bmatrix} 1416 \\ 3 \\ 2 \\ 40 \end{bmatrix}

এবং দ্বিতীয় সারির আউটপুট হবে,

Y(2)=[232]Y^{(2)} = \begin{bmatrix} 232 \end{bmatrix}

আশা করি তাহলে তৃতীয় ও চতুর্থ সারির ম্যাট্রিক্স নোটেশন কী হবে বুঝতে পেরেছেন। নোটেশন বোঝা শেষ, এবার আমরা সরাসরি চলে যাব মডেল বিল্ডিংয়ে।

হাইপোথিসিস (Hypothesis)

আগের হাইপোথিসিস ছিল এটা,

hθ(x)=θ0+θ1xh_{\theta}(x) = \theta_{0} + \theta_{1}x

এটা দিয়ে আমাদের এই মাল্টি ভ্যারিয়েবল সেটে কাজ করবে না। তাহলে উপায়? হুঁ, উপায় আছে, সেটা হল প্রতিটা ভ্যারিয়েবলের আগে একটা করে নতুন প্যারামিটার গুণ করে দেওয়া।

hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4(1)h_{\theta}(x) = \theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{3} + \theta_{4}x_{4} \; \dots (1)

এখন আমরা থিটার বিভিন্ন মান ধরে ভালমন্দ প্রেডিকশন করতে পারব, যেমন,

hθ(x)=80+0.1x1+0.01x2+3x32x4(2)h_{\theta}(x) = 80 + 0.1x_{1} + 0.01x_{2} + 3x_{3} - 2x_{4} \; \dots (2)

এই সমীকরণ (2)(2) সিরিয়াসলি নেয়ার কিছু নাই, এটা চিন্তাভাবনাহীন উদাহরণ।

আবারও গণিত

ভয়ের কিছু নেই, আমরা এখানে বেসিক ম্যাথেমেটিক্যাল নোটেশন নিয়েই আলোচনা করতে বসেছি। কারণ নোটেশনগুলো বুঝলে General Purpose Machine Learning এর থিওরি বুঝতে সমস্যা হবে না, আমিও শর্টকাটে লিখতে পারব, আপনিও বুঝতে পারবেন।

হাইপোথিসিস মডিফিকেশন

আমরা সমীকরণ (1)(1) এ মাল্টিভ্যারিয়েবল হাইপোথিসিস মডেলটা দেখতে পাচ্ছি। কথা হল, আমরা যদি সেটাকে ম্যাট্রিক্স আকারে সাজাতে চাই তাহলে বিশাল একটা সমস্যায় পড়ব। কারণ, হাইপোথিসিস এর প্যারামিটার শুরু হয়েছে θ0\theta_{0} থেকে, কিন্তু ভ্যারিয়েবলের রো শুরু হয়েছে x1x_{1} থেকে। তারমানে মডেল প্যারামিটারের সংখ্যা কলামের সংখ্যার চেয়ে বেশি। ম্যাট্রিক্সের যোগ বিয়োগ করতে হলে ডাইমেনশন সমান হতে হয়, ম্যাট্রিক্স অপারেশনগুলো কার্যকর করার জন্য তাই আমরা সমীকরণ (1)(1) কে একটু মডিফাই করব।

আমরা সমীকরণ (1)(1) কে লিখতে পারি এভাবে, hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+θ4x4++θnxn(3)h_{\theta}(x) = \theta_{0}x_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{3} + \theta_{4}x_{4} + \dots + \theta_{n}x_{n} \; \dots (3)

যদি আমরা x0=1x_{0} = 1 ধরি তাহলে সমীকরণ (2)(2) এবং (3)(3) এর মধ্যে পার্থক্য থাকবে না।

আমরা XXθ\theta কে যদি nn সংখ্যক ভ্যারিয়েবলের ম্যাট্রিক্সে রাখতে চাই তাহলে আমরা লিখবো এভাবে,

X(i)=[x0x1x2xn]X^{(i)} = \begin{bmatrix} x_{0} \\ x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix}

একই ভাবে থিটা প্যারামিটারগুলোকে আমরা যদি ম্যাট্রিক্স আকারে লিখি তাহলে দেখাবে এরকম,

θ=[θ0θ1θ2θn]\theta = \begin{bmatrix} \theta_{0} \\ \theta_{1} \\ \theta_{2} \\ \vdots \\ \theta_{n} \end{bmatrix}

কেন হাইপোথিসিস মডিফাই করা হল?

ম্যাট্রিক্স মাল্টিপ্লিকেশন : রুল নাম্বার ১

দুইটা ম্যাট্রিক্স গুণ করার প্রথম শর্ত হল, প্রথম ম্যাট্রিক্সের কলাম সংখ্যা দ্বিতীয় ম্যাট্রিক্সের রো সংখ্যার সমান হতে হবে। আমরা যদি x0x_{0} না বসাতাম তাহলে দুইটার ডাইমেনশন কখনই সমান হত না। অবশ্য এখনও আমরা দ্বিতীয় ম্যাট্রিক্স অর্থাৎ, θ\theta কে ট্রান্সপোজ করি নাই, তাই একটু উলট পালট লাগতে পারে। ডাইমেনশন সমান করার আরেকটা সল্যুশন হতে পারত, আমরা যদি θ0\theta_{0} উঠিয়ে দিতাম। কিন্তু প্যারামিটার উঠানো বুদ্ধিমানের কাজ নয়। আমাদের যদি একান্তই θ0\theta_{0} না লাগে আমরা সেটার মান 00 বসিয়ে দিলেই হচ্ছে।

ম্যাট্রিক্স মাল্টিপ্লিকেশন উদাহরণ:

লিনিয়ার অ্যালজেব্রা মনে না থাকলে এটা একটা সামান্য আইওয়াশ হিসেবে নিতে পারেন, নিচের সমীকরণে,

Z=a1x1+a2x2+a3x3Z = a_{1}x_{1} + a_{2}x_{2} + a_{3}x_{3}

ধরি,

A=[a1a2a3]A = \begin{bmatrix} a_{1} \\ a_{2} \\ a_{3} \end{bmatrix}

এবং

X=[x1x2x3]X = \begin{bmatrix} x_{1} & x_{2} & x_{3} \end{bmatrix}

আমরা পুরো জিনিসটাকে তাহলে এভাবে ম্যাট্রিক্স আকারে লিখতে পারি,

Z=A×XZ = A \times X

তারমানে,

A×X=[a1a2a3]×[x1x2x3]=a1x1+a2x2+a3x3A \times X = \begin{bmatrix} a_{1} \\ a_{2} \\ a_{3} \end{bmatrix} \times \begin{bmatrix} x_{1} & x_{2} & x_{3} \end{bmatrix} = a_{1}x_{1} + a_{2}x_{2} + a_{3}x_{3}

কিন্তু,

উদাহরণে, একটা কলাম ও আরেকটা রো ম্যাট্রিক্স। কিন্তু আমরা যেসব ভ্যারিয়েবল নিয়ে কাজ করছি দুইটাই কলাম ম্যাট্রিক্স। তাই গুণ করার জন্য একটা কলাম ম্যাট্রিক্সকে রো ম্যাট্রিক্সে কনভার্ট করে নিতে পারি। এই কনভার্শনের নাম হল Transpose করা। ট্রান্সপোজ করা খুবই সহজ, ম্যাট্রিক্সের রো গুলিকে কলাম আকারে সাজালে কিংবা কলামগুলোকে রো আকারে সাজালেই হবে।

আমাদের এখানে মডিফাই করতে হবে থিটা ম্যাট্রিক্সকে, সুতরাং

θT=[θ0θ1θ2θn]\theta^{T} = \begin{bmatrix} \theta_{0} & \theta_{1} & \theta_{2} & \ldots & \theta_{n} \end{bmatrix}

এখানে সুপারস্ক্রিপ্ট T দিয়ে ট্রান্সপোজ অপারেশন বুঝানো হয়েছে।

হাইপোথিসিস ম্যাট্রিক্স নোটেশনে

h0(x)=θ0x0+θ1x1++θnxn=θTXh_{0}(x) = \theta_{0}x_{0} + \theta_{1}x_{1} + \ldots + \theta_{n}x_{n} \; = \theta^{T}X

আশাকরি ভালমত বোরড হয়ে গেছেন, যাই হোক আর্টিফিশিয়াল ইন্টেলিজেন্স, ডেট সায়েন্স যেটাই হোক না কেন; লিনিয়ার অ্যালজেব্রা ছাড়া এক মূহুর্তও চলে না। ইমেজ প্রসেসিং শেখার সময়ও একগাদা ম্যাট্রিক্স বেজড ম্যাথ নিয়ে ঘাঁটাঘাঁটি করা লাগবে।

মডিফাইড গ্রেডিয়েন্ট ডিসেন্ট

মাল্টিভ্যারিয়েবল রিগ্রেশনের ক্ষেত্রে গ্রেডিয়েন্ট ডিসেন্টের অ্যালগরিদমও পরিবর্তিত হবে।

আগের অ্যালগরিদমটা ছিল,

repeat until convergence {

θj:=θjαδδθjJ(θj)\theta_{j} := \theta_{j} - \alpha \frac{\delta}{\delta \theta_{j}} J(\theta_{j})

}

যেখানে,

δδθJ(θj)=1mi=1m(hθ(x(i)y(i)))\frac{\delta}{\delta \theta} J(\theta_{j}) = \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)} - y^{(i)}) \right)

যখন, n=1n = 1

Repeat

{

θ0:=θ0α1mi=1m(hθ(x(i))y(i))\theta_{0} := \theta_{0} - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)}) - y^{(i)} \right)
θ1:=θ1α1mi=1m(hθ(x(i))y(i))x(i)\theta_{1} := \theta_{1} - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)}) - y^{(i)} \right)x^{(i)}

}

পরিবর্তিত সূত্র, যখন n1n \ge 1

Repeat {

θj:=θjα1mi=1m(hθ(x(i))y(i))xj(i)\theta_{j} := \theta_{j} - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)}) - y^{(i)} \right)x^{(i)}_{j}

}

যেহেতু, একাধিক ভ্যারিয়েবলের জন্য,

θ0:=θ0α1mi=1m(hθ(x(i))y(i))x0(i)\theta_{0} := \theta_{0} - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)}) - y^{(i)} \right)x^{(i)}_{0}
θ1:=θ1α1mi=1m(hθ(x(i))y(i))x1(i)\theta_{1} := \theta_{1} - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)}) - y^{(i)} \right)x^{(i)}_{1}
θ2:=θ2α1mi=1m(hθ(x(i))y(i))x2(i)\theta_{2} := \theta_{2} - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_{\theta} (x^{(i)}) - y^{(i)} \right)x^{(i)}_{2}
\dots

চলবে,

}

পরের পর্বে আমরা পাইথনে কোড লিখব।