সাইকিট-লার্নের কী ফরোয়ার্ড সিলেকশন / স্টেপওয়াইজ রিগ্রেশন অ্যালগরিদম আছে?


37

আমি অনেকগুলি বৈশিষ্ট্য নিয়ে সমস্যা নিয়ে কাজ করছি এবং আমার মডেলগুলি প্রশিক্ষণ দিচ্ছি অনেক দীর্ঘ। বৈশিষ্ট্যগুলি চয়ন করতে আমি ফরোয়ার্ড নির্বাচন অ্যালগরিদম বাস্তবায়ন করেছি।

যাইহোক, আমি ভাবছিলাম যে বিজ্ঞান-শিখার কি ফরোয়ার্ড নির্বাচন / ধাপে ধাপে রিগ্রেশন অ্যালগরিদম আছে?


আমি এটির জন্য আমার নিজস্ব ক্লাস তৈরি করেছি তবে খুব অবাক হয়েছি যে স্ক্লার্নের এটি নেই।
মাকসুদ

1
হাইপোথিসিস টেস্ট ব্যবহার করা বৈশিষ্ট্য নির্বাচনের একটি ভয়ানক পদ্ধতি। আপনাকে এগুলির অনেক কিছুই করতে হবে এবং অবশ্যই আপনি প্রচুর মিথ্যা ইতিবাচক এবং negativeণাত্মক পাবেন।
রিকার্ডো ক্রুজ

উত্তর:


21

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

http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html


3
ভাল পরামর্শ, কিন্তু সমস্যা ডাব্লু / সাই-কিট বাস্তবায়ন হ'ল বৈশিষ্ট্যের গুরুত্বটি মডেল সহগের দ্বারা পরিমিত হয়, অর্থাত্ যদি মডেলের coef_ইন্টারফেস থাকে। এটি গাছ ভিত্তিক পদ্ধতি ইত্যাদি বাতিল করে দেবে। তবে, আমি মনে করি @ মাকসুদ যা চেয়েছিলেন তা হ'ল জেমস দ্বারা "পরিসংখ্যান শিক্ষার পরিচিতি" তে বর্ণিত যা বৈশিষ্ট্যগুলি তাদের গুরুত্ব দ্বারা পুনরাবৃত্তভাবে যুক্ত / মুছে ফেলা হয়েছে যা তার বৈধতা যাচাইকরণের দ্বারা সঠিকভাবে নির্ধারণ করেছে । এটি কেবল লিনিয়ার প্যারামিমেট্রিকগুলি নয়, সমস্ত ধরণের মডেলগুলিতে বৈশিষ্ট্য নির্বাচনের অনুমতি দেয়।
Egie5

9

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

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

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


1
তবে সচেতন থাকুন: stata.com/support/faqs/statistics/stepwise-regression-problems
Candic3


হ্যাঁ। এছাড়াও, আপনার এটি পড়তে হবে: stats.stackexchange.com/questions/204141/…
ক্যান্ডিক 3

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

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

9

সাইকিট-লার্ন প্রকৃতপক্ষে পদক্ষেপের প্রতিরোধকে সমর্থন করে না। এটি কারণ যেটি সাধারণত 'স্টেপওয়াইজ রিগ্রেশন' নামে পরিচিত তা লিনিয়ার রিগ্রেশন এর সহগের পি-মানের উপর ভিত্তি করে একটি অ্যালগরিদম, এবং সাইকিট-শিখতে ইচ্ছাকৃতভাবে মডেল লার্নিংয়ের (ইনগ্রিটিভ টেস্টিং ইত্যাদি) এড়িয়ে চলেন। তদুপরি, খাঁটি ওএলএস হ'ল অসংখ্য রিগ্রেশন অ্যালগরিদমগুলির মধ্যে একটি এবং বিজ্ঞান-শিখার দৃষ্টিকোণ থেকে এটি খুব গুরুত্বপূর্ণ নয়, একটিও সেরা নয়।

লিনিয়ার মডেলগুলির সাহায্যে বৈশিষ্ট্য নির্বাচনের জন্য যাদের এখনও ভাল উপায়ে প্রয়োজন তাদের জন্য কিছু পরামর্শের টুকরো রয়েছে:

  1. ElasticNetবা মত মত সহজাত স্পর্শ মডেল ব্যবহার করুন Lasso
  2. এর সাথে আপনার বৈশিষ্ট্যগুলিকে সাধারণ করুন StandardScalerএবং তারপরে আপনার বৈশিষ্ট্যগুলি অর্ডার করুন model.coef_। পুরোপুরি স্বাধীন covariates জন্য এটি পি মান দ্বারা বাছাই সমান। ক্লাসটি sklearn.feature_selection.RFEএটি আপনার জন্য করবে এবং RFECVএমনকি বৈশিষ্ট্যগুলির অনুকূল সংখ্যার মূল্যায়ন করবে।
  3. R2statsmodels
  4. ক্রস-বৈধকরণে আপনার প্রিয় মেট্রিককে সর্বাধিক করার জন্য ব্রুটে-ফোর্ড বা পিছিয়ে পড়া নির্বাচন করুন (এটি কোভারিয়েটের সংখ্যায় প্রায় চতুর্ভুজ সময় নিতে পারে)। একটি সাইকিট-লার সামঞ্জস্যপূর্ণ mlxtendপ্যাকেজটি কোনও প্রাক্কলনকারী এবং কোনও মেট্রিকের জন্য এই পদ্ধতির সমর্থন করে
  5. আপনি যদি এখনও ভ্যানিলা ধাপে ধাপে রিগ্রেশন চান, তবে এটির ভিত্তি করা সহজ statsmodels, যেহেতু এই প্যাকেজটি আপনার জন্য পি-মান গণনা করে। একটি মৌলিক ফরোয়ার্ড-পশ্চাদপদ নির্বাচনটি এর মতো দেখতে পারে:

``

from sklearn.datasets import load_boston
import pandas as pd
import numpy as np
import statsmodels.api as sm

data = load_boston()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = data.target


def stepwise_selection(X, y, 
                       initial_list=[], 
                       threshold_in=0.01, 
                       threshold_out = 0.05, 
                       verbose=True):
    """ Perform a forward-backward feature selection 
    based on p-value from statsmodels.api.OLS
    Arguments:
        X - pandas.DataFrame with candidate features
        y - list-like with the target
        initial_list - list of features to start with (column names of X)
        threshold_in - include a feature if its p-value < threshold_in
        threshold_out - exclude a feature if its p-value > threshold_out
        verbose - whether to print the sequence of inclusions and exclusions
    Returns: list of selected features 
    Always set threshold_in < threshold_out to avoid infinite looping.
    See https://en.wikipedia.org/wiki/Stepwise_regression for the details
    """
    included = list(initial_list)
    while True:
        changed=False
        # forward step
        excluded = list(set(X.columns)-set(included))
        new_pval = pd.Series(index=excluded)
        for new_column in excluded:
            model = sm.OLS(y, sm.add_constant(pd.DataFrame(X[included+[new_column]]))).fit()
            new_pval[new_column] = model.pvalues[new_column]
        best_pval = new_pval.min()
        if best_pval < threshold_in:
            best_feature = new_pval.argmin()
            included.append(best_feature)
            changed=True
            if verbose:
                print('Add  {:30} with p-value {:.6}'.format(best_feature, best_pval))

        # backward step
        model = sm.OLS(y, sm.add_constant(pd.DataFrame(X[included]))).fit()
        # use all coefs except intercept
        pvalues = model.pvalues.iloc[1:]
        worst_pval = pvalues.max() # null if pvalues is empty
        if worst_pval > threshold_out:
            changed=True
            worst_feature = pvalues.argmax()
            included.remove(worst_feature)
            if verbose:
                print('Drop {:30} with p-value {:.6}'.format(worst_feature, worst_pval))
        if not changed:
            break
    return included

result = stepwise_selection(X, y)

print('resulting features:')
print(result)

এই উদাহরণটি নিম্নলিখিত আউটপুট মুদ্রণ করবে:

Add  LSTAT                          with p-value 5.0811e-88
Add  RM                             with p-value 3.47226e-27
Add  PTRATIO                        with p-value 1.64466e-14
Add  DIS                            with p-value 1.66847e-05
Add  NOX                            with p-value 5.48815e-08
Add  CHAS                           with p-value 0.000265473
Add  B                              with p-value 0.000771946
Add  ZN                             with p-value 0.00465162
resulting features:
['LSTAT', 'RM', 'PTRATIO', 'DIS', 'NOX', 'CHAS', 'B', 'ZN']

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

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

1

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

https://planspace.org/20150423-forward_selection_with_statsmodels/

আমি যুক্ত করব যে অ্যালগরিদমের একটি দুর্দান্ত বৈশিষ্ট্য রয়েছে: আপনি এটি শ্রেণিবদ্ধকরণ বা রিগ্রেশন সমস্যার ক্ষেত্রে প্রয়োগ করতে পারেন! আপনাকে শুধু এটি বলতে হবে।

নীজেই চেষ্টা করে দেখো.


0

প্রকৃতপক্ষে স্কলারনের কোনও ফরোয়ার্ড নির্বাচনের অ্যালগরিদম নেই, ভেবেছিলেন ফরোয়ার্ড বৈশিষ্ট্য নির্বাচনের প্রয়োগের সাথে একটি টানার অনুরোধটি এপ্রিল 2017 থেকে সাইকিট-লার্নের ভাণ্ডারে অপেক্ষা করে।

বিকল্প হিসাবে, এমএলএক্সএন্ডে ফরোয়ার্ড এবং এক-ধাপে পিছিয়ে থাকা নির্বাচন রয়েছে । আপনি এটির নথিটি সিক্যুয়াল ফিচার সিলেক্টারে খুঁজে পেতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.