সাইকিট-লার্ন র্যান্ডম ফরেস্টের সাথে বৈশিষ্ট্যটির গুরুত্বটি খুব উচ্চমানের বিচ্যুতি দেখায়


13

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

তবে আমার ফলাফলটি সম্পূর্ণ আলাদা, এই অর্থে যে বৈশিষ্ট্যটির গুরুত্ব স্ট্যান্ডার্ড বিচ্যুতি বৈশিষ্ট্যটির গুরুত্বের চেয়ে প্রায় সর্বদা বড় (সংযুক্ত চিত্র দেখুন)।

বৈশিষ্ট্য গুরুত্ব

এই জাতীয় আচরণ করা কি সম্ভব, বা এটির পরিকল্পনা করার সময় আমি কিছু ভুল করছি?

আমার কোডটি নিম্নলিখিত:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier()
clf.fit(predictors.values, outcome.values.ravel())

importance = clf.feature_importances_
importance = pd.DataFrame(importance, index=predictors.columns, 
                          columns=["Importance"])

importance["Std"] = np.std([tree.feature_importances_
                            for tree in clf.estimators_], axis=0)

x = range(importance.shape[0])
y = importance.ix[:, 0]
yerr = importance.ix[:, 1]

plt.bar(x, y, yerr=yerr, align="center")

plt.show()

আইআইইউসি, এমন predictorsকোনও ফেরত দেয় numpy arrayযা আপনি pandas Dataframeতার কলামগুলির দ্বারা কোনও বস্তুর সাথে উল্লেখ করছেন যা numpy arraysবৈশিষ্ট্যটি না থাকায় ভুল columns
নিকিল মাভেলি

দুঃখিত, কোডে এটি টাইপো ছিল। ভবিষ্যদ্বাণীকারী এবং ফলাফল pandas DataFrameআকৃতি m x nএবং সঙ্গে দুটি m x 1। এটা এখন পরিষ্কার করা উচিত।
জিসি

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

দুর্দান্ত পোস্ট, আপনি ছবিতে দেখতে পাওয়ায় আমি একটি অভিন্ন সমস্যা নিয়ে চলেছি। একটি প্যাকেজ রয়েছে, tsfreshযা আমাকে প্রাসঙ্গিক বৈশিষ্ট্যগুলি চিহ্নিত করতে এবং আমার বৈশিষ্ট্যগুলি 600+ থেকে 400 এর কাছাকাছি কাটাতে সহায়তা করেছে ! [আমার শীর্ষ 35 টি বৈশিষ্ট্য ] ( i.stack.imgur.com/0MROZ.png ) এমনকি এটির সাথেও অ্যালগোরিদম ভাল পারফর্ম করছে আমার জন্য. আমার একটি বাইনারি শ্রেণিবদ্ধকরণ, সাফল্য / ব্যর্থতা রয়েছে। আমি কার্যত কোনও মিথ্যা সাফল্য পাই না তবে আমি বেশিরভাগ সাফল্যের হাতছাড়া করি। উপরের সমস্ত অনুমান যুক্তিসঙ্গত বলে মনে হয়। এটি ক্ষেত্রে আরও বড় প্রশিক্ষণ এবং পরীক্ষার সেট হতে পারে be আমার কম আছে
সুপারহিরো

উত্তর:


3

আপনি গাছের ডিফল্ট সংখ্যার সাথে র‌্যান্ডমফোরস্ট ব্যবহার করছেন, যা ১০ টি। প্রায় ৩০ টি বৈশিষ্ট্যের জন্য এটি খুব কম। সুতরাং স্ট্যান্ডার্ড বিচ্যুতি বড় large কমপক্ষে 100 বা এমনকি 1000 টি গাছ চেষ্টা করুন

clf = RandomForestClassifier(n_estimators=1000)

আরও পরিশ্রুত বিশ্লেষণের জন্য আপনি নিজের বৈশিষ্ট্যগুলির মধ্যে কতটা বড় সম্পর্ক রয়েছে তাও পরীক্ষা করে দেখতে পারেন।


দুঃখিত লেনোক, গাছের সংখ্যা ডিফল্ট নয়। আমি একটি উদাহরণ কোড রেখেছি (এবং এটি সমস্ত পরামিতিগুলির ক্ষেত্রে সত্য min_samples_split) যেমন আমি যে ডেটা নিয়ে কাজ করছি তা প্রকাশ করতে পারি না। তবে এটি কি গাছের সংখ্যার কারণে, অন্যান্য পরামিতিগুলির কারণে বা আমি এখানে কিছু ভুল করছি?
gc5

2

আপনার ফলাফলটি খুব অদ্ভুত নয়। যেমন ল্যানেনোক বলেছেন, বৈশিষ্ট্যের আমদানির বিষয়ে কোনও 'পরিসংখ্যান' ফলাফল পেয়েছেন তা নিশ্চিত করার জন্য আপনার প্রথম পদক্ষেপে গাছের সংখ্যা বাড়ানো উচিত।

তবে জেনুয়ার এট আল-র এই কাগজ হিসাবে । (২০১০) দেখায়, বৈশিষ্ট্যগুলি মুছে ফেলার জন্য আপনি আসলে স্ট্যান্ডার্ড বিচ্যুতিগুলি ব্যবহার করতে পারেন। উদ্ধৃতি দিতে: " আমরা দেখতে পাই যে শোরগোলের পরিবর্তনশীলগুলির তুলনায় প্রকৃত ভেরিয়েবলগুলির মান বিচ্যুতি বড়, যা শূন্যের কাছাকাছি। "


বৈশিষ্ট্যগুলি মুছে ফেলার জন্য এই উদাহরণে আদর্শ বিচ্যুতি ব্যবহার করা সমস্ত বৈশিষ্ট্যগুলি মুছে ফেলবে । এক্সডি
জর্জি লিটাও

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

1

ব্যবহার করে দেখুন clf = RandomForestClassifier(max_features=None)। পরম max_featuresডিফল্ট 'auto'যার সাথে সমান sqrt(n_features)max_features"সেরা বিভাজনের সন্ধান করার সময় বিবেচনা করার মতো বৈশিষ্ট্যগুলির সংখ্যা" হিসাবে বর্ণনা করা হয়েছে। সিদ্ধান্ত গাছের যে কোনও বিন্দুতে কেবল অল্প সংখ্যক বৈশিষ্ট্য দেখানো মানে একক বৈশিষ্ট্যের গুরুত্ব অনেক গাছ জুড়ে বিস্তৃত হতে পারে। সুতরাং, এলোমেলো উপসেটটি দেখুন না, কেবল গাছের প্রতিটি স্তরের সমস্ত বৈশিষ্ট্যগুলি দেখুন।


1
নোট করুন এটি সরল ব্যাগযুক্ত গাছের সমতুল্য। এলোমেলো বনাঞ্চলে "র্যান্ডম" এর অর্থ প্রতিটি বিভক্তিতে বৈশিষ্ট্যগুলির একটি এলোমেলো উপসেট বিবেচনা করা হয়, সাধারণত sqrt(n_features)বা log2(n_features)max_features=Noneআর বৈশিষ্ট্যগুলির এলোমেলো উপসেট বিবেচনা করে না । উপরের প্রস্তাবিত সমাধানটি এটি প্রভাবিত করে কিনা আমি নিশ্চিত নই। একটি সম্ভাবনা হ'ল অনেক বৈশিষ্ট্যের মধ্যে কেবলমাত্র প্রচুর পরিমাণে গুরুত্ব থাকে এবং তাই গাছের গোড়ালি জুড়ে বিস্তৃতভাবে পরিবর্তিত হয়। অথবা সম্ভবত পর্যাপ্ত নমুনা নেই এবং তাই আপনি কোনও পাতা আঘাত করার সময়কালে প্রতিটি বৈশিষ্ট্য বিবেচনা করা হয় না।
জামিস

1

এর সাধারণ কারণ হ'ল আপনি যে প্যারামিটার সরবরাহ করেছেন (বা ডিফল্ট হয়েছে) তা RandomForestClassifierআপনার ডেটাসেটের জন্য উপযুক্ত নয়।

এই সমস্যাটির সমাধানের একটি সাধারণ উপায় হ'ল হাইপারপ্যারমিটার স্পেস ব্যবহার করে যেমন GridSearchCV:

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score, make_scorer

param_grid = {'n_estimators': [10, 100, 1000], 'max_features': [5, 10, 20, 30]}
clf = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring=make_scorer(accuracy_score))

param_gridআপনি যে প্যারামিটারগুলি অনুসন্ধান করতে চান তা make_scorer(accuracy_score)এখানেই রয়েছে এবং আপনি অনুকূলিতকরণ করতে চান এমন পরিমাপ।

নোট যে accuracy_scoreভারসাম্যপূর্ণ সেট জন্য উপযুক্ত, তবে ভারসাম্যহীন সেট জন্য নয়। আপনার নির্দিষ্ট উদ্দেশ্যে একটি উপযুক্ত মেট্রিক চয়ন করুন।


0

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

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