# সাপোর্ট ভেক্টর মেশিন

সাপোর্ট ভেক্টর মেশিন অ্যালগরিদমটি ক্লাসিফিকেশন এবং রিগ্রেশন উভয় ধরনের সমস্যার ক্ষেত্রেই ব্যবহার করা যায়। তবে অপেক্ষাকৃত জটিল ধরনের ছোট বা মাঝারি ক্লাসিফিকেশন ডেটাসেটের জন্য এসভিএম বেশ জনপ্রিয়। এই অ্যালগরিদমে ডেটা পয়েন্টকে একটি হাইপারপ্লেইন এর মাধ্যমে আলাদা করা হয়, এক্ষেত্রে হাইপারপ্লেইনটি কেমন হবে সেটা কার্নেল এর মাধ্যমে নির্ধারণ করা হয়।&#x20;

![ছবি - সাপোর্ট ভেক্টর মেশিন ( সম্পাদিত ) ](/files/-MAtYENF5iqLVNwXW5Mp)

**সাপোর্ট ভেক্টর মেশিন এর বিভিন্ন উপাদান**

* **সাপোর্ট ভেক্টরস**- ডেটাসেটের বিভিন্ন ক্লাসের প্রান্ত দেশে থাকা ডেটা পয়েন্ট গুলো যা ক্লাসগুলোর মধ্যে পার্থক্য গড়ে দেয়, এমন ডেটাই হচ্ছে সাপোর্ট ভেক্টরস।
* **হাইপারপ্লেইন**- হাইপারপ্লেইন হচ্ছে একটি সিদ্ধান্ত মূলক রেখা বা লাইন যা একাধিক শ্রেনির ডেটার ভেতরে পার্থক্য নির্ধারণ করে।&#x20;
* **মার্জিন**- মার্জিন হচ্ছে একাধিক শ্রেনির ডেটার ভেতরের দূরত্ব । মার্জিন নির্ধারণ করা হয় সাপোর্ট ভেক্টরের মধ্যকার দূরত্বের মাধ্যমে। দুইটি ক্লাসের ভেতরের মার্জিন যত বেশী হবে তাকে তত বেশী ভালো মার্জিন বলা হবে।&#x20;

**সাপোর্ট ভেক্টর মেশিন এর বিভিন্ন ধরনের কার্নেল**

সাধারন স্কাটার প্লটে আমরা যদি একাধিক ভ্যারিয়েবলকে প্লট করি অনেক ক্ষেত্রেই সেই প্লটের মাধ্যমে দুই বা ততধিক ডেটা ক্লাসকে আলাদা করা যায় না। সাপোর্ট ভেক্টর মেশিন এর  কার্নেল হচ্ছে একটি বিশেষ ধরনের কৌশল যা লোয়ার ডাইমেনশনাল ডেটা কে হাইয়ার ডাইমেনশনাল স্পেসে কনভার্ট করতে পারে এবং এর ফলে ক্লাসগুলোর মধ্যকার পার্থক্য স্পস্ট হয়।&#x20;

* **লিনিয়ার কার্নেল**- লিনিয়ার কার্নেল হচ্ছে একটি লিনিয়ার লাইন বা সরলরেখা যার মাধ্যমে ডেটাপয়েন্টকে আলাদা করা হয়।&#x20;
* **পলিনমিয়াল কার্নেল** - পলিনমিয়াল লাইন হচ্ছে নন-লিনিয়ার লাইন বা বক্ররেখা। অনেক ক্ষেত্রেই লিনিয়ার লাইনের মাধ্যমে ডেটাপয়েন্ট আলাদা করা যায় না এসব ক্ষেত্রে পলিনমিয়াল কার্নেল ব্যবহার করতে হয়।&#x20;
* **রেডিয়াল বেসিস ফাংশন কার্নেল-**  রেডিয়াল বেসিস ফাংশনও একধরনের নন-লিনিয়ার ফাংশন। এই ফাংশনটিই সাপোর্ট ভেক্টর মেশিন এর সবথেকে জনপ্রিয় ফাংশন। এই কার্নেল কোন ইনপুটকে ইনফাইনাইট ডাইমেনশনাল স্পেসে  ম্যাপ করতে পারে।&#x20;

**লিনিয়ার প্রবলেমের ক্ষেতে সাপোর্ট ভেক্টর মেশিন যেভাবে কাজ করে**&#x20;

প্রথমে একাধিক হাইপারপ্লেইন জেনারেট করা হয় , নিচের প্রথম ছবিতে ( বাম পাশে ) আমরা দেখতে পাচ্ছি ক্লাসিফিকেশনের জন্য তিনটি হাইপারপ্লেইন জেনারেট করা হয়েছে। এরপর প্রতিটি হাইপারপ্লেইনের ক্লাসিফিকেশন এরর ক্যালকুলেট করা হয়, দেখা হয় কোন হাইপারপ্লেইনের জন্য এরর সবথেকে কম এবং সেই হাইপারপ্লেইনটিকেই ক্লাসিফিকেশনের জন্য বাছাই করা হয়।&#x20;

![ছবি- সাপোর্ট ভেক্টর মেশিনের বিভিন্ন হাইপারপ্লেইন ( সম্পাদিত ) ](/files/-MAt_Z8pUQ7p51k9-TbV)

**নন-লিনিয়ার প্রবলেমের ক্ষেতে সাপোর্ট ভেক্টর মেশিন যেভাবে কাজ করে**&#x20;

অনেক ডেটাসেটকেই ক্লাসিফিকেশনের জন্য লিনিয়ারলি সেপারেট করার মত অবস্থায় পাওয়া যাবে না , সেক্ষেত্রে নন-লিনিয়ার কার্নেল ডেটাকে হাইয়ার ডাইমেশনে ট্রান্সফরমেশন করে নেয় ফলে এটি ক্লাসিফিকেশনের উপযোগী হয়ে উঠে।&#x20;

![ছবি - নন লিনিয়ার সাপোর্ট ভেক্টর মেশিন ( সম্পাদিত )](/files/-MAtdoyFFxCFmyaCuhnB)

**সাপোর্ট ভেক্টর মেশিন এর কিছু বৈশিষ্ট্য**&#x20;

* হাই ডাইমেনশনাল স্পেসের জন্য সাপোর্ট ভেক্টর মেশিন অত্যন্ত কার্যকরী।&#x20;
* এই অ্যালগরিদমটি তুলনামূলক কম মেমোরি ব্যবহার করে।&#x20;
* অনেক বড় ডেটাসেটের জন্য সাপোর্ট ভেক্টর মেশিন তেমন কার্যকরী নয়।&#x20;
* ডেটাসেটে ওভারল্যাপিং ক্লাস এবং নয়েজ থাকলে মডেল সহজেই প্রভাবিত হয়।

প্রথমেই লাইব্রেরী ইমপোর্ট  এবং ডেটাসেট লোড করে নিচ্ছি,&#x20;

```
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
%matplotlib inline 
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn import metrics
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix,accuracy_score

url='https://raw.githubusercontent.com/FazlyRabbiBD/Data-Science-Book/master/data-indian-liver-Patient.csv'
df = pd.read_csv(url)
df.head()
```

![](/files/-M9DiZ9M5pF_a4NJLMGw)

আমাদের জানামতে এই ডেটাসেটে কিছু নাল ভ্যালু রয়েছে,  আসলেই সেটা আছে কিনা তা আমরা নিচের কোডের মাধ্যমে সহজেই জেনে নিতে পারি।

```
df.isnull().values.any()
```

True

এবার আমরা চাই নাল ভ্যালুগুলোকে দেখে নিতে,

```
null_columns=df.columns[df.isnull().any()]
print(df[df.isnull().any(axis=1)][null_columns].head())
```

![](/files/-M9DizQdaCe9JV5HkTSa)

আমরা এখন নাল ভ্যালু থাকা রো সমূহকে মুছে ফেলবো,&#x20;

```
df.dropna(how='any', axis=0,inplace=True)
```

ডেটাসেটে জেন্ডার ভ্যারিয়েবলটি ক্যাটেগরিক্যাল , এটিকে ম্যাপ ফাংশন ব্যবহার করে প্রসেস করে নেব,

```
d = {'Female':1 , 'Male': 0}
df['Gender'] = df['Gender'].map(d)
```

এবার ফিচার এবং টার্গেট ভ্যারিয়েরবল সেট করে নিচ্ছি,

```
X = df[['Age', 'Gender', 'TB', 'DB', 'AAP', 'SGPT', 'SGOT', 'TP', 'ALB', 'AGR']]
y = df['Status']
```

এবার টেস্ট এর জন্য ২০% ডেটা রেখে বাকি ডেটা দিয়ে মডেল ট্রেইন করবো।&#x20;

```
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=4)
clf = svm.SVC(kernel='rbf')
clf.fit(X_train,y_train) 
```

এবার অ্যাকুরেসি চেকের পালা,&#x20;

```
pred=clf.predict(X_test)
print(classification_report(y_test, pred))
print('\nAccuracy: {0:.4f}'.format(accuracy_score(y_test, pred)))
print(confusion_matrix(y_test,pred))
```

![](/files/-M9DjEwn_gTj2O3uqRai)

**অন্যান্য কার্নেলের ব্যবহার**

* লিনিয়ার কার্নেল - `svm.SVC(kernel='linear')`
* পলিনমিয়াল কার্নেল - `svm.SVC(C=2.0, kernel='poly', degree=3)`

![](/files/-M9cpdEGNTJ-Z-t8skct)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://datasinsightsbd.gitbook.io/dsbook/supervised-ml/svm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
