{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "dimension-feature.ipynb", "version": "0.3.2", "provenance": [], "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "metadata": { "id": "JUpH47tG97Kb", "colab_type": "text" }, "cell_type": "markdown", "source": [ "# ডাইমেনশনালিটি রিডাকশন, ফীচার সিলেকশন, ফীচার ইম্পর্ট্যান্স\n", "\n", "রিয়েল ওয়ার্ল্ড সিনারিওতে যে কোন মেশিন লার্নিং সমস্যা আরো বেশি ঝামেলায় পড়ে - যখন তার ফিচার সংখ্যা অনেক হয়ে যায়। ফিচার সংখ্যা অনেক হওয়া সমস্যা নয়, সমস্যা হচ্ছে ফিচারগুলোর ভেতরে সব ফিচার কিন্তু মডেলের পারফরম্যান্স ভালো করে না। এছাড়াও এতো এতো ফিচার নিয়ে মডেলকে ট্রেনিং করানোটাও অনেক সময় সাপেক্ষ ব্যাপার। আবার ট্রেনিং করালাম, কিন্তু আউটকাম যা আশা করেছিলাম সেটা হলো না, তখন পুরো মডেলটাই বিপদে পড়ে। এই সমস্যাটা নাম হচ্ছে “দ্য কার্স অফ ডাইমেনশনালিটি।” অর্থাৎ বেশি ডাইমেনশনের বিপদ। সেজন্য দরকার ওই ফীচারগুলো, যা মডেল পারফরম্যান্সে সবচেয়ে বেশি ‘কন্ট্রিবিউট’ করে। \n", "\n", "এই সমস্যা থেকে উদ্ধার পাবার উপায় কি? সোজা হিসেবে বলা যায় ফিচার সিলেকশন এবং ফিচার ইম্পর্টেন্স। আমি অন্য গল্পে গেলাম না, কারণ এটা একটা বেসিক ধারণার বই। আমরা যদি দরকারি ফিচারগুলোকে ঠিকমতো সিলেক্ট করতে পারি তাদের ইম্পর্টেন্স অনুযায়ী, তাহলে কিন্তু ঝামেলা অনেকটাই কমে যায়। এই যে ধরুন, আইরিস ডেটাসেটে চারটা ফিচার। (রিয়েল ওয়ার্ল্ড সমস্যায় মিলিয়ন ফিচার নিয়ে কাজ করা এখন ‘কমনপ্লেস’ হয়ে যাচ্ছে)। এই চারটা ফিচারের মধ্যে কোন ফিচারগুলো আসলে আমাদের মডেলকে ভালো পারফর্মেন্স বুষ্ট দেবে, সেটা একটু দেখে আসি। \n", "\n", "মনে আছে, ডিসিশন ট্রি’র ছবিটার কথা? ইম্পরট্যান্ট ফীচারগুলো কিন্তু ডিসিশন ট্রি’র রুট নোডের আশপাশেই থাকে। ডেপ্থ ০, ১ এবং ২তে পেটাল দৈর্ঘ্যের জয়জয়কার। ডেপ্থগুলোকে গড় করলেই বোঝা যাবে। এর পাশাপাশি feature_importances_অ্যাট্রিবিউটের এর কাজ দেখে আসি। \n" ] }, { "metadata": { "id": "lrdRtIsFE99V", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "5987f195-22c2-4749-c2ed-286316a9adc6" }, "cell_type": "code", "source": [ "from sklearn.datasets import load_iris\n", "iris = load_iris()\n", "X, y = iris.data, iris.target\n", "X.shape" ], "execution_count": 1, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(150, 4)" ] }, "metadata": { "tags": [] }, "execution_count": 1 } ] }, { "metadata": { "id": "dpVHgr88GqgG", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "56f2bf03-b719-4a67-b42e-c89aecd440fe" }, "cell_type": "code", "source": [ "from sklearn.tree import DecisionTreeClassifier\n", "tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)\n", "tree_clf.fit(X, y)\n", "tree_clf.feature_importances_ " ], "execution_count": 2, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([0. , 0. , 0.56199095, 0.43800905])" ] }, "metadata": { "tags": [] }, "execution_count": 2 } ] }, { "metadata": { "id": "FkREKL0ZICu_", "colab_type": "text" }, "cell_type": "markdown", "source": [ "বোঝা যাচ্ছে চারটার মধ্যে দুটো ইম্পর্ট্যান্ট। জানা যাবে কোন দুটো?" ] }, { "metadata": { "id": "G9h12FEAIkYL", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "outputId": "bec34dbe-ddce-4d37-999c-c99e28ede257" }, "cell_type": "code", "source": [ "for name, score in zip(iris[\"feature_names\"], tree_clf.feature_importances_):\n", " print(name, score)" ], "execution_count": 3, "outputs": [ { "output_type": "stream", "text": [ "sepal length (cm) 0.0\n", "sepal width (cm) 0.0\n", "petal length (cm) 0.5619909502262443\n", "petal width (cm) 0.4380090497737556\n" ], "name": "stdout" } ] }, { "metadata": { "id": "uIV6_W3uIvDI", "colab_type": "text" }, "cell_type": "markdown", "source": [ "শেষের দুটো। এর মধ্যে পেটাল দৈর্ঘ্যের মান বেশি। " ] }, { "metadata": { "id": "bTdaApw0HuFR", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "outputId": "4a391bdd-a3b3-4e88-ea2a-5a3f451a493f" }, "cell_type": "code", "source": [ "from sklearn.feature_selection import SelectFromModel\n", "model = SelectFromModel(tree_clf, prefit=True)\n", "X_new = model.transform(X)\n", "X_new.shape " ], "execution_count": 6, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(150, 2)" ] }, "metadata": { "tags": [] }, "execution_count": 6 } ] }, { "metadata": { "id": "MaXc85SeJdw8", "colab_type": "text" }, "cell_type": "markdown", "source": [ "শেষমেশ চারটার মধ্যে দুটোই আমাদের দরকারি ফিচার। সাধারণতঃ চারটা ফিচার থেকে কমাইনা আমরা। পরীক্ষা করে দেখলাম। " ] } ] }