মেশিন লার্নিং (ML) ছিল এবং এখনও আমার কাছে একটি pretty intimidating, বিশেষত খুব সীমিত mathematical knowledge ব্যক্তি হিসাবে। ডকুমেন্টেশন পড়ার অজস্র ঘন্টা পরে, টিউটোরিয়ালগুলি দেখার, স্ট্যাকের ওভারফ্লোতে কয়েকটি ডাউন ভোট এবং কিছুটা প্রলাপের পরে, আমি কাজ করার জন্য একটি সাধারণ এমএল মডেল পেতে সক্ষম হয়েছি। এই নিবন্ধে, আমি আপনাকে পাইথন ব্যবহার করে ML দিয়ে কীভাবে শুরু করব এবং Support Vector Regression(SVR) ব্যবহার করে একটি সাধারণ রিগ্রেশন সমস্যাটি মোকাবেলা করব ।
আপনাকে প্রথমে যে জিনিসটি শুরু করতে হবে তা হ'ল একটি ডেটা সেট। accurate predictions পাওয়ার মূল চাবিকাঠিটি হ'ল একটি ভাল ডেটা সেট এবং মডেলের হাইপার প্যারামিটারগুলির সঠিক টিউনিং ব্যবহার করা। এই উদাহরণের জন্য, আমরা Boston House price data set সেটটি ব্যবহার করব যা 506 records, 13 features and a single output (এই ডেটা সেটটিতে আরও তথ্য here পাওয়া যাবে)।
Let’s get right to it. First, we need to import a few libraries.
import math
import pandas
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV, cross_validate
from sklearn.utils import shuffle
import pandas
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV, cross_validate
from sklearn.utils import shuffle
আমরা আমাদের মডেলটি বাস্তবায়নের জন্য scikit-learn সাইকিট-লার্ন, যা পাইথনের একটি মেশিন লার্নিং লাইব্রেরি ব্যবহার করব। আমরা একই লাইব্রেরি cross validation এবং pre-processing র মতো ক্রিয়াকলাপগুলি করতে ব্যবহার করব। আমরা আমদানি করা math library টি আমাদের স্বাচ্ছন্দ্যে গাণিতিক ক্রিয়াকলাপ সম্পাদন করার অনুমতি দেবে এবং pandas library টি আরও সহজে ডেটা কাঠামোয় পরিচালনা করতে দেয়।
Now let’s load our data set and specify the features and the dependent variable.
dataset = pandas.read_csv('Dataset.csv')
X = dataset.iloc[:, [0, 12]]
y = dataset.iloc[:, 13]
X = dataset.iloc[:, [0, 12]]
y = dataset.iloc[:, 13]
এখানে আমরা একটি data set to a pandas data frame লোড করছি এবং X সেটকে ডেটা সেটের প্রথম 13 columns (বৈশিষ্ট্যগুলি) এবং y এর উপর নির্ভরশীল ভেরিয়েবল নির্ধারণ করছি। ডেটা সেটটি স্বাভাবিক করার জন্য আমরা প্রি-প্রসেসিং কৌশল, মিনিম্যাক্স স্কেলিং ব্যবহার করছি। আমাদের ডেটা সেটের ডেটা বিস্তৃত মানগুলিতে ছড়িয়ে আছে, যা অন্যান্য বৈশিষ্ট্যগুলির চেয়ে চূড়ান্ত ফলাফলকে প্রভাবিত করে বিভিন্ন বৈশিষ্ট্যযুক্ত হতে পারে। মিনিম্যাক্স স্কেলিং এই ক্ষেত্রে ০-১ ক্ষেত্রে একটি নির্দিষ্ট পরিসরে ডাটাকে পুনঃ-স্কেল করে এই প্রভাবকে হ্রাস করে।
scaler = MinMaxScaler(feature_range=(0, 1))
X = scaler.fit_transform(X)
X = scaler.fit_transform(X)
কোনও মডেলকে ডেটা খাওয়ানোর আগে ডেটা বদলানো গুরুত্বপূর্ণ। ধরে নিই যে আমাদের ডেটা সেটের প্রথম 400 টি রেকর্ড 200-21500 এবং বাকী 0-100 এর মধ্যে রয়েছে। যদি আমরা একটি সাধারণ train_test_split() ব্যবহার করি এবং প্রশিক্ষণ ও পরীক্ষার সেটগুলিতে ডেটা সেটটি ভাঙ্গি যেমন 80% ডেটা প্রশিক্ষণ সেট হিসাবে ব্যবহার করা হয় এবং 20% পরীক্ষার সেট হিসাবে ব্যবহার করা হয়, তবে মডেলটিকে প্রথম 448 রেকর্ড ব্যবহার করে প্রশিক্ষণ দেওয়া হবে। প্রশিক্ষণ সংস্থার বেশিরভাগ রেকর্ড 200-1515 এর মান পরিসীমাতে রয়েছে, সেই মডেলগুলি সেই মানগুলি ব্যবহার করে কিছু নির্দিষ্ট নিদর্শন স্থাপন করবে এবং যখন আপনি পরীক্ষার সেটটি ব্যবহার করে মডেলটি পরীক্ষা করেন যেখানে বেশিরভাগ ডেটা রেকর্ডের মান সীমা থাকে 0-100 এর মডেলটি খারাপভাবে সঞ্চালন করবে কারণ এটি সম্পূর্ণ আলাদা মান পরিসরে রেকর্ড ব্যবহার করে প্রশিক্ষিত হয়েছিল।
seed = 42
X, y = shuffle(X, y, random_state=seed)
X, y = shuffle(X, y, random_state=seed)
একটি constant value হিসাবে seed সেট করা নিশ্চিত করে যে আপনি প্রতিবার স্ক্রিপ্ট চালানোর সময় আপনি একই ফলাফল পেয়েছেন। এখন আসুন একটি সাধারণ ML মডেল বাস্তবায়ন করি। আমরা যে মডেলটি প্রয়োগ করব তা হ'ল SVR মডেল (RBF kernel ব্যবহার করে)। এখানে কোড,
def svr_model(X, y): gsc = GridSearchCV( estimator=SVR(kernel='rbf'), param_grid={ 'C': [0.1, 1, 100, 1000], 'epsilon': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10], 'gamma': [0.0001, 0.001, 0.005, 0.1, 1, 3, 5] }, cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1) grid_result = gsc.fit(X, y) best_params = grid_result.best_params_ best_svr = SVR(kernel='rbf', C=best_params["C"], epsilon=best_params["epsilon"], gamma=best_params["gamma"], coef0=0.1, shrinking=True, tol=0.001, cache_size=200, verbose=False, max_iter=-1) scoring = { 'abs_error': 'neg_mean_absolute_error', 'squared_error': 'neg_mean_squared_error'} scores = cross_validate(best_svr, X, y, cv=10, scoring=scoring, return_train_score=True)return "MAE :", abs(scores['test_abs_error'].mean()), "| RMSE :", math.sqrt(abs(scores['test_squared_error'].mean()))
First, আমরা বৈশিষ্ট্যগুলি এবং নির্ভরশীল ভেরিয়েবল (X and yমডেলটিতে পাস করি। তারপরে আমরা আমাদের মডেলটিতে সর্বোত্তম hyper-parameters গুলি ব্যবহার করতে grid-search করি। আমরা তিনটি হাইপার-প্যারামিটার ব্যবহার করেছি C, epsilon and gamma, optimized করতে হবে (SVR মডেল এবং এর হাইপার-প্যারামিটারগুলি সম্পর্কে আরও তথ্য here পাওয়া যাবে)। এখানে, আমরা আমাদের মডেলের যথার্থতা নির্ধারণ করতে দুটি error metricMean Absolute Error(MAE) and Root Mean Squared Error(RMSE) পেয়েছি। এটি একটি কাস্টম স্কোরার সংজ্ঞায়নের মাধ্যমে করা হয়। এই স্কোরারটি sklearn স্কেলনার cross_validate() function নে উত্তীর্ণ হয়েছে, যা 10-fold cross validation (K-Fold cross validation সম্পর্কে আরও তথ্যের জন্য এই this article দেখুন) এবং আমাদের মডেলের জন্য গড় MAE এবং RMSE স্কোরগুলি ফিরিয়ে দেয়।
Now, lets run our script.
print(svr_model(X,y)
Here’s what we get as the error metric results for our model.
আমরা যে ত্রুটি মেট্রিক মান পেয়েছি তা দেখে, আমরা বলতে পারি যে আমাদের মডেলটি ভাল সম্পাদন করে এবং রেকর্ডগুলির একটি নতুন সেট দেওয়া হলে সঠিক ভবিষ্যদ্বাণী দিতে সক্ষম হয়। গ্রিড-অনুসন্ধানে আমরা ব্যবহৃত মানের সীমা পরিবর্তন করতে পারি এবং মডেলটির নির্ভুলতা বৃদ্ধি পায় কিনা তা পরীক্ষা করতে মডেলটিকে আরও অনুকূল করতে পারেন।
0 comments:
Post a Comment