লজিস্টিক রিগ্রেশন: স্কাইকিট বনাম স্ট্যাটাসমডেল শিখুন


31

আমি বুঝতে চেষ্টা করছি যে এই দুটি গ্রন্থাগারের লজিস্টিক রিগ্রেশন থেকে আউটপুট কেন বিভিন্ন ফলাফল দেয়।

আমি ইউসিএলএ ইড্রি টিউটোরিয়াল থেকে ডেটাसेट ব্যবহার করছি , এর admitউপর ভিত্তি করে ভবিষ্যদ্বাণী করা gre, gpaএবং rankrankশ্রেণীবদ্ধ ভেরিয়েবল হিসাবে বিবেচনা করা হয়, সুতরাং এটি প্রথমে rank_1বাদ পড়ে দিয়ে ডামি ভেরিয়েবলে রূপান্তরিত হয় । একটি ইন্টারসেপ্ট কলামও যুক্ত করা হয়েছে।

df = pd.read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
y, X = dmatrices('admit ~ gre + gpa + C(rank)', df, return_type = 'dataframe')
X.head()
>  Intercept  C(rank)[T.2]  C(rank)[T.3]  C(rank)[T.4]  gre   gpa
0          1             0             1             0  380  3.61
1          1             0             1             0  660  3.67
2          1             0             0             0  800  4.00
3          1             0             0             1  640  3.19
4          1             0             0             1  520  2.93

# Output from scikit-learn
model = LogisticRegression(fit_intercept = False)
mdl = model.fit(X, y)
model.coef_
> array([[-1.35417783, -0.71628751, -1.26038726, -1.49762706,  0.00169198,
     0.13992661]]) 
# corresponding to predictors [Intercept, rank_2, rank_3, rank_4, gre, gpa]

# Output from statsmodels
logit = sm.Logit(y, X)
logit.fit().params
> Optimization terminated successfully.
     Current function value: 0.573147
     Iterations 6
Intercept      -3.989979
C(rank)[T.2]   -0.675443
C(rank)[T.3]   -1.340204
C(rank)[T.4]   -1.551464
gre             0.002264
gpa             0.804038
dtype: float64

statsmodelsআইড্রে ওয়েবসাইটে প্রদর্শিত আউটপুটটি একই, তবে আমি নিশ্চিত নই যে কেন বিজ্ঞান-শিখা বিভিন্ন সহগের একটি সেট তৈরি করে। এটি কিছু পৃথক লোকসানের কার্যটি হ্রাস করে? এমন কোনও ডকুমেন্টেশন রয়েছে যা বাস্তবায়নের কথা বলে?

উত্তর:


28

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

স্কাইকিট-লার্নে নিয়মিতকরণ বন্ধ করার কোনও উপায় নেই তবে আপনি টিউনিং প্যারামিটারটি Cএকটি বিশাল সংখ্যায় সেট করে এটি অকার্যকর করতে পারেন । আপনার ক্ষেত্রে এটি কীভাবে কাজ করে তা এখানে:

# module imports
from patsy import dmatrices
import pandas as pd
from sklearn.linear_model import LogisticRegression
import statsmodels.discrete.discrete_model as sm

# read in the data & create matrices
df = pd.read_csv("http://www.ats.ucla.edu/stat/data/binary.csv")
y, X = dmatrices('admit ~ gre + gpa + C(rank)', df, return_type = 'dataframe')

# sklearn output
model = LogisticRegression(fit_intercept = False, C = 1e9)
mdl = model.fit(X, y)
model.coef_

# sm
logit = sm.Logit(y, X)
logit.fit().params

ব্যাখ্যার জন্য আপনাকে অনেক ধন্যবাদ! এই নিয়মিত ফলাফলের সাথে, আমি glmnetআর-তে প্যাকেজটি ব্যবহার করে ফলাফলটি সদৃশ করার চেষ্টা করছিলাম , তবে একই সহগটি পাইনি। glmnet একটি কিছুটা ভিন্ন খরচ ফাংশন তুলনা করেছেন sklearn কিন্তু এমনকি যদি আমি সেট alpha=0মধ্যে glmnet(অর্থাত শুধুমাত্র L2-পেনাল্টি ব্যবহার করুন) এবং সেট 1/(N*lambda)=C, আমার এখনও একই ফলাফল পাই না?
হারিকালে

আমার অনুভূতি যে যদি আমি খরচ ফাংশনের উভয় পদ ভাগ হয় glmnetদ্বারা lambdaএবং লগ-সম্ভাবনা ফন্টের নতুন ধ্রুবক, যা নির্ধারণ করে 1/(N*lambda)যে সমান sklearn, দুই খরচ ফাংশন অভিন্ন হয়ে, অথবা আমি কিছু অনুপস্থিত করছি?
হারিকালে

@ হুরিকালে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন এবং এটি এখানে লিঙ্ক করুন, এবং আমি একবার তাকান।
tchakravarty

ধন্যবাদ! আমি এখানে প্রশ্ন পোস্ট ।
হুরিকালে

আমি মনে করি বিজ্ঞান-শিখার নিয়মিতকরণ বন্ধ করার সর্বোত্তম উপায়টি সেট করা penalty='none'
এনজবুউ

3

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

model = LogisticRegression(C=1e9)

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