এক্সজিবিস্ট লিনিয়ার রিগ্রেশন আউটপুট ভুল


11

আমি এক্সজিবিস্টের নবাগত তাই আমার অজ্ঞতা ক্ষমা করে দিন। অজগর কোডটি এখানে:

import pandas as pd
import xgboost as xgb

df = pd.DataFrame({'x':[1,2,3], 'y':[10,20,30]})
X_train = df.drop('y',axis=1)
Y_train = df['y']
T_train_xgb = xgb.DMatrix(X_train, Y_train)

params = {"objective": "reg:linear"}
gbm = xgb.train(dtrain=T_train_xgb,params=params)
Y_pred = gbm.predict(xgb.DMatrix(pd.DataFrame({'x':[4,5]})))
print Y_pred

আউটপুট হল:

[ 24.126194  24.126194]

আপনি দেখতে পাচ্ছেন ইনপুট ডেটা কেবল একটি সরল রেখা। সুতরাং আউটপুট আমি আশা করি [40,50]। আমি এখানে কি ভুল করছি?



2
@ দাওয়ানি 33 এসও থেকে মুছে ফেলা হয়েছে।
সরফল্জ

উত্তর:


22

দেখে মনে হয় এক্সজিবিস্ট ডিফল্টরূপে বেস লার্নার হিসাবে রিগ্রেশন ট্রি ব্যবহার করে । এক্সজিবিস্ট (বা সাধারণভাবে গ্রেডিয়েন্ট বুস্টিং) এই বেস শিখার একত্রে একত্রিত করে কাজ করে। রিগ্রেশন ট্রিগুলি প্রশিক্ষণের ডেটাগুলিতে নিদর্শনগুলি বহির্ভূত করতে পারে না, সুতরাং 3 বা তার বেশি 1 এর নীচে যে কোনও ইনপুট আপনার ক্ষেত্রে সঠিকভাবে পূর্বাভাস দেওয়া হবে না। আপনার মডেল ব্যবধানে ইনপুট জন্য আউটপুট পূর্বাভাস প্রশিক্ষণ দেওয়া হয় [1,3], 3 এর চেয়ে বেশি একটি ইনপুট 3 হিসাবে একই আউটপুট দেওয়া হবে, এবং 1 এর চেয়ে কম ইনপুট 1 হিসাবে একই আউটপুট দেওয়া হবে।

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

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

আপনি যোগ করে একটি GLM (সাধারণ রৈখিক মডেল) আপনার XGBoost মডেল বেস শিক্ষার্থী পরিবর্তন করতে পারেন "booster":"gblinear"আপনার মডেল থেকে params:

import pandas as pd
import xgboost as xgb

df = pd.DataFrame({'x':[1,2,3], 'y':[10,20,30]})
X_train = df.drop('y',axis=1)
Y_train = df['y']
T_train_xgb = xgb.DMatrix(X_train, Y_train)

params = {"objective": "reg:linear", "booster":"gblinear"}
gbm = xgb.train(dtrain=T_train_xgb,params=params)
Y_pred = gbm.predict(xgb.DMatrix(pd.DataFrame({'x':[4,5]})))
print Y_pred

সাধারণভাবে, আপনার এক্সজিবিস্ট মডেলটি কেন একটি বিশেষ উপায়ে আচরণ করছে তা ডিবাগ করতে, মডেল প্যারামিটারগুলি দেখুন:

gbm.get_dump()

যদি আপনার বেস লার্নার লিনিয়ার মডেল হয় তবে get_dump আউটপুটটি হ'ল:

['bias:\n4.49469\nweight:\n7.85942\n']

উপরের আপনার কোডটিতে, যেহেতু আপনি গাছ বেস বেস শিখছেন, আউটপুটটি হবে:

['0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=2.85\n\t\t4:leaf=5.85\n\t2:leaf=8.85\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=1.995\n\t\t4:leaf=4.095\n\t2:leaf=6.195\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=1.3965\n\t\t4:leaf=2.8665\n\t2:leaf=4.3365\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.97755\n\t\t4:leaf=2.00655\n\t2:leaf=3.03555\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.684285\n\t\t4:leaf=1.40458\n\t2:leaf=2.12489\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.478999\n\t\t4:leaf=0.983209\n\t2:leaf=1.48742\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.3353\n\t\t4:leaf=0.688247\n\t2:leaf=1.04119\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.23471\n\t\t4:leaf=0.481773\n\t2:leaf=0.728836\n',
 '0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.164297\n\t\t4:leaf=0.337241\n\t2:leaf=0.510185\n',
 '0:[x<2] yes=1,no=2,missing=1\n\t1:leaf=0.115008\n\t2:[x<3] yes=3,no=4,missing=3\n\t\t3:leaf=0.236069\n\t\t4:leaf=0.357129\n']

টিপ: আমি আসলে xgb.XGBRegressor বা xgb.XGBC ক্লাসিফায়ার ক্লাস ব্যবহার করতে পছন্দ করি, কারণ তারা সাই -কিট লার্ন এপিআই অনুসরণ করে । এবং যেহেতু সায়-কিট লার্নিতে অনেকগুলি মেশিন লার্নিং অ্যালগরিদম বাস্তবায়ন রয়েছে, এক্সজিবি কে অতিরিক্ত লাইব্রেরি হিসাবে ব্যবহার করা আমার কর্মপ্রবাহকে কেবল বিরক্ত করে না যখন আমি এক্সজিবিস্টের সাই-কিট ইন্টারফেসটি ব্যবহার করি।


আপনি কিভাবে সেট করবেন "booster":"gblinear"মাধ্যমেxgb.XGBRegressor
yosemite_k

gblinearবুস্টার ব্যবহার করার পরে বৈশিষ্ট্যটির স্বাভাবিককরণ চালানো কি আরও ভাল ?
peppered
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.