কোডে প্রথম মডেল এবং প্রেডিকশন

এই পুরো জুপিটার স্ক্রিপ্টটা পাওয়া যাবে এই লিংকে https://github.com/raqueeb/ml-python/blob/master/1st-model.ipynb

এস্টিমেটরের কাজের ধাপের পুরো কোড এখানে। না বুঝলে আবার ফিরে যান "এস্টিমেটরের কাজের ধাপ" চ্যাপ্টারে।

মনে রাখুন এই ধাপগুলো, দরকার হবে সবসময়

প্রথমে কিছু লাইব্রেরি ইমপোর্ট করে নেই

In [1]:
import numpy as np
In [2]:
import pandas as pd

ডাটাসেটগুলো ইমপোর্ট করে নিয়ে আসি

In [3]:
from sklearn import datasets

আইরিস ডাটাসেট লোড করে নেই

In [4]:
iris = datasets.load_iris()

ফিচার ম্যাট্রিক্স স্টোর করছি বড় "X"এ, রেসপন্স ভেক্টর রাখছি "y" তে

In [5]:
X = iris.data
y = iris.target

ক্লাসিফায়ার ইমপোর্ট করে নিয়ে আসছি

In [6]:
from sklearn.neighbors import KNeighborsClassifier

আমাদের নেইবার সংখ্যা ১

In [7]:
knn = KNeighborsClassifier(n_neighbors=1)

প্রথম মডেল তৈরি

In [8]:
knn.fit(X, y)
Out[8]:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1, n_neighbors=1, p=2,
           weights='uniform')

প্রথম প্রেডিকশন, আমাদের ডাটাসেটের বাইরের ডাটা দিয়ে

In [9]:
knn.predict([[3, 5, 4, 2]])
Out[9]:
array([2])
In [10]:
print("Predicted target name:",
       iris['target_names'][knn.predict([[3, 5, 4, 2]])])
Predicted target name: ['virginica']

অথবা আমরা এভাবে করতে পারি, আপনার মতো করে তৈরি করুন ইচ্ছেমতো

In [11]:
X_new = np.array([[3, 5, 4, 2]])
print("X_new.shape:", X_new.shape)
X_new.shape: (1, 4)
In [12]:
mypredict = knn.predict(X_new)
In [13]:
print("Prediction:", mypredict)
print("Predicted target name:",
       iris['target_names'][mypredict])
Prediction: [2]
Predicted target name: ['virginica']

ধাপগুলো নিয়ে ধারণা পরিষ্কার তো? এখন যদি আমরা দুটো "আউট অফ স্যাম্পল" ডেটা নিয়ে কাজ করতাম, তাহলে কি করতাম আমরা?

In [14]:
X_new = [[3, 5, 4, 2], [5, 4, 3, 2]]
knn.predict(X_new)
Out[14]:
array([2, 1])

এখানে আমরা ব্যবহার করেছি "কে নিয়ারেস্ট নেইবার্স" ক্লাসিফায়ার। আচ্ছা, আমাদের যদি নেইবার ৩ হয়? তাহলে আগের সিস্টেমে পাল্টে দিলাম n_neighbors=3

In [15]:
knn = KNeighborsClassifier(n_neighbors=3)

মডেলে ফিট করি ডাটা

In [16]:
knn.fit(X, y)
Out[16]:
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1, n_neighbors=3, p=2,
           weights='uniform')

প্রেডিক্ট করি আগের ভ্যালুগুলোকে

In [17]:
knn.predict(X_new)
Out[17]:
array([1, 1])

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

কেমন হয় অন্য ক্লাসিফায়ার দিয়ে দেখলে? "লিনিয়ার রিগ্রেশন" কাজ করে কন্টিনিউয়াস ভাল্যুর (যেমন, আমাদের বয়স বা বেতন) ওপর। সে হিসেবে লজিস্টিক (হ্যাঁ অথবা না, তিন ক্যাটেগরির ফুল) রিগ্রেশন ব্যবহার করা যেতে পারে এখানে। আগের মতোই একই জিনিস করবো আমরা। মডেল হিসেবে ব্যবহার করবো LogisticRegressionকে। সেটা ইমপোর্ট হবে sklearn.linear_model মডিউল থেকে। LogisticRegression() ক্লাসকে পাঠিয়ে দিচ্ছি lr অবজেক্ট। আপনার ঈচ্ছেমতো নাম দিন এই অবজেক্ট হিসেবে।

In [18]:
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X, y)
lr.predict(X_new)
Out[18]:
array([2, 0])

দেখেছেন কী অবস্থা? পাল্টে গেছে প্রেডিকশন। এর মানে হচ্ছে আমাদের ব্যবহৃত ক্লাসিফায়ারগুলোর কাজের মধ্যে অনেক ফারাক আছে। সেকারণে আউটকামও ভিন্ন। কোন কাজে কোন ক্লাসিফায়ার ভালো, সেটার ধারণায় আসবে আস্তে আস্তে।