ডামি ভেরিয়েবলগুলির সাথে বৈশিষ্ট্যটির গুরুত্ব


17

আমি বুঝতে চেষ্টা করছি যে কীভাবে আমি ডামি ভেরিয়েবলগুলিতে বিভক্ত একটি শ্রেণিবদ্ধ ভেরিয়েবলের বৈশিষ্ট্যটি গুরুত্ব পেতে পারি। আমি সাইকিট-লার্ন ব্যবহার করছি যা আপনার জন্য আর বা এইচ 2o এর মতো শ্রেণিবদ্ধ ভেরিয়েবলগুলি পরিচালনা করে না।

যদি আমি একটি স্পষ্টতাল ভেরিয়েবলকে ডামি ভেরিয়েবলগুলিতে বিভক্ত করি তবে আমি সেই পরিবর্তনশীলটিতে প্রতি শ্রেণি পৃথক বৈশিষ্ট্য আমদানি পাই।

আমার প্রশ্নটি হল, এই ডামি ভেরিয়েবল আমদানিগুলিকে কেবল সংক্ষিপ্ত করে একটি শ্রেণিবদ্ধ ভেরিয়েবলের জন্য একটি গুরুত্ব মূল্যের মধ্যে পুনরায় সংশ্লেষ করা কি বোধগম্য?

পরিসংখ্যানগত শিক্ষার উপাদানগুলির 368 পৃষ্ঠা থেকে:

পরিবর্তনশীল এক্স of এর স্কোয়ারের তুলনামূলক গুরুত্ব হ'ল সমস্ত অভ্যন্তরীণ নোডের উপর যেমন স্কোয়ারিং ভেরিয়েবল হিসাবে নির্বাচিত হয়েছিল এমন স্কোয়ার উন্নতির সমষ্টি

এটি আমাকে ভাবতে বাধ্য করে যে যেহেতু গুরুত্ব নীতিটি ইতিমধ্যে প্রতিটি নোডে একটি মেট্রিক যোগ করে ভেরিয়েবলটি নির্বাচিত করা হয়, তাই আমার ডামি ভেরিয়েবলের পরিবর্তনশীল গুরুত্বের মানগুলিকে একত্রিত করতে সক্ষম হওয়া উচিত শ্রেণিবদ্ধ ভেরিয়েবলের জন্য গুরুত্ব "পুনরুদ্ধার" করতে। অবশ্যই আমি এটি ঠিক সঠিক হওয়ার প্রত্যাশা করি না, তবে এগুলি মূল্যহীন প্রক্রিয়াটির মাধ্যমে পাওয়া যায় বলে এই মানগুলি যাইহোক সত্যই সঠিক মান।

আমি তদন্ত হিসাবে নিম্নলিখিত পাইথন কোডটি লিখেছি (বৃহস্পতিবারে):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import animation, rc
from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestClassifier
import re

#%matplotlib inline
from IPython.display import HTML
from IPython.display import set_matplotlib_formats

plt.rcParams['figure.autolayout'] = False
plt.rcParams['figure.figsize'] = 10, 6
plt.rcParams['axes.labelsize'] = 18
plt.rcParams['axes.titlesize'] = 20
plt.rcParams['font.size'] = 14
plt.rcParams['lines.linewidth'] = 2.0
plt.rcParams['lines.markersize'] = 8
plt.rcParams['legend.fontsize'] = 14

# Get some data, I could not easily find a free data set with actual categorical variables, so I just created some from continuous variables
data = load_diabetes()
df = pd.DataFrame(data.data, columns=[data.feature_names])
df = df.assign(target=pd.Series(data.target))

# Functions to plot the variable importances
def autolabel(rects, ax):
    """
    Attach a text label above each bar displaying its height
    """
    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x() + rect.get_width()/2.,
                1.05*height,
                f'{round(height,3)}',
                ha='center',
                va='bottom')

def plot_feature_importance(X,y,dummy_prefixes=None, ax=None, feats_to_highlight=None):

    # Find the feature importances by fitting a random forest
    forest = RandomForestClassifier(n_estimators=100)
    forest.fit(X,y)
    importances_dummy = forest.feature_importances_

    # If there are specified dummy variables, combing them into a single categorical 
    # variable by summing the importances. This code assumes the dummy variables were
    # created using pandas get_dummies() method names the dummy variables as
    # featurename_categoryvalue
    if dummy_prefixes is None:
        importances_categorical = importances_dummy
        labels = X.columns
    else:
        dummy_idx = np.repeat(False,len(X.columns))
        importances_categorical = []
        labels = []

        for feat in dummy_prefixes:
            feat_idx = np.array([re.match(f'^{feat}_', col) is not None for col in X.columns])
            importances_categorical = np.append(importances_categorical,
                                                sum(importances_dummy[feat_idx]))
            labels = np.append(labels,feat)
            dummy_idx = dummy_idx | feat_idx
        importances_categorical = np.concatenate((importances_dummy[~dummy_idx],
                                                  importances_categorical))
        labels = np.concatenate((X.columns[~dummy_idx], labels))

    importances_categorical /= max(importances_categorical)
    indices = np.argsort(importances_categorical)[::-1]

    # Plotting

    if ax is None:
        fig, ax = plt.subplots()

    plt.title("Feature importances")
    rects = ax.bar(range(len(importances_categorical)),
                   importances_categorical[indices],
                   tick_label=labels[indices],
                   align="center")
    autolabel(rects, ax)

    if feats_to_highlight is not None:
        highlight = [feat in feats_to_highlight for feat in labels[indices]]
        rects2 = ax.bar(range(len(importances_categorical)),
                       importances_categorical[indices]*highlight,
                       tick_label=labels[indices],
                       color='r',
                       align="center")
        rects = [rects,rects2]
    plt.xlim([-0.6, len(importances_categorical)-0.4])
    ax.set_ylim((0, 1.125))
    return rects

# Create importance plots leaving everything as categorical variables. I'm highlighting bmi and age as I will convert those into categorical variables later
X = df.drop('target',axis=1)
y = df['target'] > 140.5

plot_feature_importance(X,y, feats_to_highlight=['bmi', 'age'])
plt.title('Feature importance with bmi and age left as continuous variables')

#Create an animation of what happens to variable importance when I split bmi and age into n (n equals 2 - 25) different classes
# %%capture

fig, ax = plt.subplots()

def animate(i):
    ax.clear()

    # Split one of the continuous variables up into a categorical variable with i balanced classes
    X_test = X.copy()
    n_categories = i+2
    X_test['bmi'] = pd.cut(X_test['bmi'],
                           np.percentile(X['bmi'], np.linspace(0,100,n_categories+1)),
                           labels=[chr(num+65) for num in range(n_categories)])
    X_test['age'] = pd.cut(X_test['age'],
                           np.percentile(X['age'], np.linspace(0,100,n_categories+1)),
                           labels=[chr(num+65) for num in range(n_categories)])
    X_test = pd.get_dummies(X_test, drop_first=True)

    # Plot the feature importances
    rects = plot_feature_importance(X_test,y,dummy_prefixes=['bmi', 'age'],ax=ax, feats_to_highlight=['bmi', 'age'])
    plt.title(f'Feature importances for {n_categories} bmi and age categories')
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['bottom'].set_visible(False)
    ax.spines['left'].set_visible(False)

    return [rects,]

anim = animation.FuncAnimation(fig, animate, frames=24, interval=1000)

HTML(anim.to_html5_video())

এখানে ফলাফল কিছু আছে:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

আমরা পর্যবেক্ষণ করতে পারি যে পরিবর্তনশীল গুরুত্বটি বেশিরভাগ বিভাগের সংখ্যার উপর নির্ভরশীল, যা আমাকে সাধারণভাবে এই চার্টের উপযোগিতা সম্পর্কে প্রশ্নবিদ্ধ করতে পরিচালিত করে। বিশেষত age এর অবিচ্ছিন্ন অংশের তুলনায় অনেক বেশি মূল্যবোধে পৌঁছানোর গুরুত্ব ।

এবং পরিশেষে, যদি আমি তাদের ডামি ভেরিয়েবল (কেবলমাত্র বিএমআই) হিসাবে ছেড়ে দিই তবে একটি উদাহরণ:

# Split one of the continuous variables up into a categorical variable with i balanced classes
X_test = X.copy()
n_categories = 5
X_test['bmi'] = pd.cut(X_test['bmi'],
                       np.percentile(X['bmi'], np.linspace(0,100,n_categories+1)),
                       labels=[chr(num+65) for num in range(n_categories)])
X_test = pd.get_dummies(X_test, drop_first=True)

# Plot the feature importances
rects = plot_feature_importance(X_test,y, feats_to_highlight=['bmi_B','bmi_C','bmi_D', 'bmi_E'])
plt.title(f"Feature importances for {n_categories} bmi categories")

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


8

"বৈশিষ্ট্য গুরুত্ব" নিয়ে কাজ করার সময় সাধারণত এটি মনে রাখা সহায়ক যে বেশিরভাগ ক্ষেত্রে নিয়মিতকরণ পদ্ধতির প্রায়শই একটি ভাল বিকল্প is এটি স্বয়ংক্রিয়ভাবে সমস্যার জন্য "সর্বাধিক গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি নির্বাচন করবে"। এখন, আমরা যদি নিয়মিতকরণের জন্য ধারণাটি অনুসরণ করতে না চাই (সাধারণত রিগ্রেশন প্রসঙ্গে), এলোমেলো বনবিভাজন এবং ক্রমবর্ধমান পরীক্ষার ধারণাটি ভেরিয়েবলের গ্রুপের বৈশিষ্ট্যটির বৈশিষ্ট্যটির সমাধানের জন্য একটি সমাধানকে naturallyণ দেয় nd এটি এখানে আসলে আগে জিজ্ঞাসা করা হয়েছিল: কয়েক বছর আগে " এলোমেলোভাবে বনের শ্রেণিবিন্যাসে ভবিষ্যদ্বাণীকারীদের একটি সেটের আপেক্ষিক গুরুত্ব " কয়েক বছর আগে। গ্রেগোরুটি এট আল-এর মতো আরও কঠোর পন্থা: " এলোমেলো বন এবং কার্যকরী ডেটা বিশ্লেষণকে মাল্টিভারিয়েট করার জন্য অ্যাপ্লিকেশন সহ গোষ্ঠীগত পরিবর্তনশীল গুরুত্ব"। চক্রবর্তী ও পালের একটি সংযোগবাদী কাঠামোর বৈশিষ্ট্যগুলির দরকারী গ্রুপগুলি একটি বহু-স্তর পারসেপ্ট্রনের প্রসঙ্গে এই কাজটি সন্ধান করে the গ্রেগোরুটি এট আল। কাগজে ফিরে গিয়ে তাদের পদ্ধতিটি যে কোনও ধরণের শ্রেণিবদ্ধকরণ / রিগ্রেশন অ্যালগরিদমের জন্য সরাসরি প্রযোজ্য সংক্ষেপে, আমরা প্রশিক্ষণের সময় ব্যবহৃত প্রতিটি ব্যাগের নমুনায় এলোমেলোভাবে অনুমতিপ্রাপ্ত সংস্করণ ব্যবহার করি।

উপরোক্ত বক্তব্য রাখার পরেও, যদি অনুমতিপত্র পরীক্ষাগুলি শেষ পর্যন্ত হিউরিস্টিক হয় তবে অতীতে যা সঠিকভাবে সমাধান করা হয়েছে তা নিয়মিত রেগ্রেশন প্রসঙ্গে ডামি ভেরিয়েবলের শাস্তি। যে প্রশ্ন উত্তর গ্রুপ-Lasso , গ্রুপ-Lars এবং গ্রুপ-Garotte । সেই কাজের মধ্যে অন্তিম কাগজপত্রগুলি হ'ল ইউয়ান এবং লিনের: " গ্রুপযুক্ত ভেরিয়েবলগুলির সাথে রিগ্রেশনে মডেল নির্বাচন এবং অনুমান " (২০০)) এবং মিয়ার এট আল এর: " লজিস্টিক রিগ্রেশনের জন্য গ্রুপ লাসো " (২০০৮)। এই পদ্ধতিটি আমাদের এমন পরিস্থিতিতে কাজ করতে দেয় যেখানে: " প্রতিটি ফ্যাক্টরের বিভিন্ন স্তর থাকতে পারে এবং এটি ডামি ভেরিয়েবলের একটি গ্রুপের মাধ্যমে প্রকাশ করা যেতে পারে " (ওয়াই অ্যান্ড এল 2006)। প্রভাবটি এমন যে "1কে={1,...,জে}জেআমরা পরীক্ষা করা গ্রুপের সংখ্যা। গ্রুপ-লাসো সম্পর্কিত সিভিতে কয়েকটি ভাল থ্রেড রয়েছেpyglmnetগ্রুপযুক্ত লাসো নিয়মিতকরণ zation ]

সব মিলিয়ে স্বতন্ত্র ডামি ভেরিয়েবলগুলি থেকে কেবল পরিবর্তনশীল গুরুত্বটি বোঝার কোনও অর্থ হয় না কারণ এটি তাদের মধ্যে সংযোগ স্থাপনের পাশাপাশি সম্ভাব্য অর্থহীন ফলাফলের দিকে পরিচালিত করবে না। এটি বলেছে যে, উভয় গ্রুপ-দণ্ডিত পদ্ধতি পাশাপাশি ক্রমবর্ধমান পরিবর্তনশীল গুরুত্বের পদ্ধতিগুলি একটি সুসংগত এবং (বিশেষত ক্রমান্বয়ে গুরুত্ব পদ্ধতিগুলির ক্ষেত্রে) এটি করার জন্য সাধারণত প্রযোজ্য কাঠামো দেয়।

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


আপনি আর এলোমেলো বনের শ্রেণিবিন্যাসে ভবিষ্যদ্বাণীকারীদের একটি সংখ্যার আপেক্ষিক গুরুত্বটিকে প্রশ্নের উত্তরটির সরাসরি উত্তর দেন। আপনি যদি সেই লিঙ্কটির রেফারেন্সটি শুরুতে সরিয়ে নিয়ে যান তবে আমি মেনে নিতে পেরে খুশি হব কারণ বাকীটি সরাসরি প্রাসঙ্গিক বলে মনে করি না এবং লিঙ্কটি উত্তরে সহজেই হারিয়ে যেতে পারে।
ড্যান

সমস্যা নেই. কিছু প্রাসঙ্গিক সম্পাদনা করেছি। নিয়ন্ত্রিত রিগ্রেশন ধারণাটি খারিজ করবেন না, যেমন আমি পাঠ্যটির উল্লেখ করেছি, নিয়মিতকরণের পদ্ধতিগুলি বৈশিষ্ট্যটির গুরুত্ব / র‌্যাঙ্কিংয়ের জন্য একদম বৈধ বিকল্প প্রস্তাব করে।
usεr11852 বলছেন

নিয়মিত রেজিস্ট্রেশন এই প্রশ্নের উত্তর নয়, এটি ভিন্ন প্রশ্নের উত্তর দিতে পারে অর্থাত্ বৈশিষ্ট্যগুলির বিকল্পের বিকল্প তবে এই প্রশ্নটি বৈশিষ্ট্য গুরুত্বের প্লটের মধ্যে ওএ বৈশিষ্ট্যগুলিকে একটি একক শ্রেণিবদ্ধ বৈশিষ্ট্যে একত্রিত করার বিষয়ে। আমি সত্যিই মনে করি আপনার সেই লিঙ্কটি সরানো উচিত যা আসলে প্রশ্নের শুরুতে উত্তর দেয়।
ড্যান

2

প্রশ্ন হচ্ছে:

এই ডামি ভেরিয়েবল আমদানিগুলিকে কেবল সংক্ষিপ্ত করে একটি শ্রেণিবদ্ধ ভেরিয়েবলের জন্য একটি গুরুত্ব মূল্যের সাথে পুনরায় সংশ্লেষ করা কি বোধগম্য?

সংক্ষিপ্ত উত্তর:

আমিমিপিRটিএকটিএন(এক্স)=আমি
(আমি)2=Σটি=1জে-1আমি2আমি(বনাম(টি)=)
আমি=Σটি=1জে-1আমি2আমি(বনাম(টি)=)

দীর্ঘ, আরও ব্যবহারিক উত্তর ..

আপনি ঝুঁকিপূর্ণ কারণ ডামি ভেরিয়েবলের জন্য আপনি স্বতন্ত্র পরিবর্তনশীল গুরুত্বের মানগুলি একসাথে যোগ করতে পারবেন না

অন্যদের দ্বারা গুরুত্বপূর্ণ ভেরিয়েবলগুলির মাস্কিং যার সাথে তারা অত্যন্ত সংযুক্ত থাকে। (পৃষ্ঠা 368)

সম্ভাব্য বহুবিধ অনলাইন হিসাবে ইস্যুগুলি পরিবর্তনশীল গুরুত্বের মান এবং র‌্যাঙ্কিংকে বিকৃত করতে পারে।

বহুমুখীকরণের মতো বিষয়গুলির দ্বারা পরিবর্তনশীল গুরুত্ব কীভাবে প্রভাবিত হয় তা বুঝতে এটি আসলে একটি খুব আকর্ষণীয় সমস্যা। বৈচিত্র্যপূর্ণ সম্পর্কযুক্ত ও বিতরণমূলক অবস্থার অধীনে একাধিক রিগ্রেশন ইন প্রিডিক্টর গুরুত্ব নির্ধারণ করা কাগজটি ভেরিয়েবলের গুরুত্ব গণনা করার জন্য বিভিন্ন পদ্ধতি নিয়ে আলোচনা করে এবং আদর্শ পরিসংখ্যানগত অনুমানের লঙ্ঘনকারী ডেটার কার্য সম্পাদনের সাথে তুলনা করে। লেখকরা এটি খুঁজে পেলেন

যদিও বহু-বর্ণা্যতা আপেক্ষিক গুরুত্ব পদ্ধতিগুলির কার্যকারিতাকে প্রভাবিত করে, বহুভিত্তিক অস্বাভাবিকতা তা করেনি। (হোয়াইটটেকার p366)


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

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

@Ecedavis পাঠ্যপুস্তক বলতে কী বোঝ? আপনি একটি লিঙ্ক বা আরও সম্পূর্ণ উদ্ধৃতি প্রদান করতে পারেন দয়া করে।
24

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

আপনার উত্তরের স্টাইলটি ভাল তবে কিছু তথ্য এবং সামগ্রী সম্পূর্ণরূপে সঠিক বলে মনে হচ্ছে না। আপনি যে কাগজটির সাথে লিঙ্ক করেছেন সেটি হ'ল একাধিক প্রতিরোধের পূর্বাভাসকারী গুরুত্ব সম্পর্কে এবং এলোমেলো বনটিতে প্রশ্নটি গুরুত্বের বিষয়ে about আমি আপনার উদ্ধৃতিটির নিষ্কাশন সমস্যাযুক্ত বলে মনে করি যেহেতু পূর্ণ বাক্যটি "সংকোচনের কারণে (ধারা 10.12.1) অন্যদের দ্বারা গুরুত্বপূর্ণ ভেরিয়েবলগুলির মুখোশটি যার সাথে তারা অত্যন্ত সংযুক্ত থাকে কোনও সমস্যার তুলনায় খুব কম"। যার খুব আলাদা অর্থ রয়েছে।
24
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.