रिग्रेशन के लिए बायस्ड एसेटर त्रुटि वाले वेरिएबल्स मॉडल में निष्पक्ष एक से बेहतर परिणाम प्राप्त करने के लिए


13

मैं कुछ शोध के लिए एरर इन वैरिएबल मॉडल के लिए कुछ सिंटैटिक डेटा पर काम कर रहा हूं। वर्तमान में मेरे पास एक एकल स्वतंत्र चर है, और मैं मान रहा हूं कि मैं आश्रित चर के सही मूल्य के लिए विचरण जानता हूं।

इसलिए, इस जानकारी के साथ, मैं आश्रित चर के गुणांक के लिए एक निष्पक्ष अनुमानक प्राप्त कर सकता हूं।

आदर्श:

x~=x+e1
y=0.5x10+e2
जहाँ: लिए कुछ
e1~N(0,σ2)σ
e2~N(0,1)

जहां प्रत्येक नमूने के लिए के मूल्यों को जाना जाता है, और नमूने के लिए के वास्तविक मान का मानक विचलन भी ज्ञात है: ।y,x~xσx

मुझे ओएलएस का उपयोग करके पक्षपाती ( ) गुणांक प्राप्त होता है, और फिर समायोजन का उपयोग करके:β^

β=β^σ^x~2σx2

मैं देखता हूं कि इस मॉडल के साथ गुणांक के लिए मेरा नया, निष्पक्ष अनुमानक बेहतर (वास्तविक मूल्य के करीब) है, लेकिन एमएसई पक्षपाती अनुमानक का उपयोग करने से भी बदतर हो रहा है।

क्या हो रहा है? मुझे उम्मीद थी कि एक पक्षपाती अनुमानक पक्षपाती की तुलना में बेहतर परिणाम देगा।

मतलाब कोड:

reg_mse_agg = [];
fixed_mse_agg = [];
varMult = 1;
numTests = 60;
for dataNumber=1:8
    reg_mses = [];
    fixed_mses = [];

    X = rand(1000,1);
    X(:,1) = X(:,1) * 10;
    X(:,1) = X(:,1) + 5;

    varX = var(X);
    y = 0.5 * X(:,1) -10;

    y = y + normrnd(0,1,size(y));    
    origX = X;
    X = X + normrnd(0,dataNumber * varMult ,size(X));
    train_size = floor(0.5 * length(y));
    for t=1:numTests,
        idx = randperm(length(y));
        train_idx = idx(1:train_size);
        test_idx = idx(train_size+1:end);
        Xtrain = X(train_idx,:);
        ytrain = y(train_idx);        
        Xtest = X(test_idx,:);
        ytest = y(test_idx);

        b = OLS_solver(Xtrain, ytrain);
        %first arg of evaluate returns MSE, working correctly.
        [ reg_mse, ~ ] = evaluate( b,Xtest,ytest);
        reg_mses = [reg_mses ; reg_mse];

        varInd = var(Xtrain);
        varNoise = varInd - varX;
        bFixed = [0 0]';
        bFixed(1) = b(1) * varInd / varX;
        bFixed(2) = mean(ytrain - bFixed(1)*Xtrain);
        [fixed_mse,~ ] = evaluate( bFixed,Xtest,ytest);
        fixed_mses = [fixed_mses ; fixed_mse];

        dataNumber * varMult
        b
        bFixed

    end
    reg_mse_agg = [reg_mse_agg , reg_mses];
    fixed_mse_agg = [fixed_mse_agg , fixed_mses];

end

mean(reg_mse_agg)
mean(fixed_mse_agg)

परिणाम:

पक्षपाती अनुमानक का MSE:

ans =

  Columns 1 through 7

    1.2171    1.6513    1.9989    2.3914    2.5766    2.6712    2.5997

  Column 8

    2.8346

निष्पक्ष आकलनकर्ता का MSE:

ans =

  Columns 1 through 7

    1.2308    2.0001    2.9555    4.9727    7.6757   11.3106   14.4283

  Column 8

   11.5653

इसके अलावा, के मूल्यों को प्रिंट करना bऔर bFixed- मुझे लगता है कि bFixedवास्तव 0.5,-10में पक्षपाती अनुमानक (अपेक्षा के अनुसार) के वास्तविक मूल्यों के करीब है ।

PS निष्पक्ष मूल्यांकनकर्ता की तुलना में निष्पक्ष होने के परिणाम सांख्यिकीय महत्वपूर्ण हैं - इसके लिए परीक्षण कोड से छोड़ा गया है, क्योंकि यह "पूर्ण संस्करण" कोड का सरलीकरण है।

UPDTAE: मैंने एक परीक्षण जोड़ा है जिसमें और , और पक्षपाती अनुमानक इस मीट्रिक के अनुसार निष्पक्ष एक की तुलना में वास्तव में काफी बदतर (बड़ा मूल्य) है, भले ही पक्षपाती अनुमानक (परीक्षण-सेट पर) का एमएसई काफी बेहतर है। कहाँ आश्रित चर के असली गुणांक है, के लिए पक्षपाती आकलनकर्ता है , और के लिए निष्पक्ष आकलनकर्ता है ।for each test(β^β)2for each test(ββ)2
β=0.5β^βββ

यह मेरा मानना ​​है कि परिणामों का कारण निष्पक्ष अनुमानक का उच्चतर संस्करण नहीं है, क्योंकि यह अभी भी वास्तविक मूल्य के करीब है।

क्रेडिट: संसाधन के रूप में स्टीव पिसके के व्याख्यान नोट्स का उपयोग करना


यह उपयोगी होगा यदि आप परिणाम भी पोस्ट करते हैं, और न केवल कोड।
एलेकोस पापाडोपोलोस

@AlecosPapadopoulos ने इसे जोड़ा, के सभी मूल्यों के मुद्रण को नहीं जोड़ा, bऔर bFixedबताया कि वे क्या दिखाते हैं।
अमित

जवाबों:


2

सारांश: सही पैरामीटर सही भविष्यवक्ता कार्य के रूप में भविष्यवाणी करने के लिए हैं । यदि भविष्यवाणी में का उपयोग किया जाता है, तो मूल पैरामीटर बेहतर प्रदर्शन करते हैं।xx~

ध्यान दें कि आस-पास दो अलग-अलग रैखिक भविष्यवाणी मॉडल हैं। सबसे पहले, दिया , दूसरा, दिया , yx

y^x=βx+α,
yx~
y^x~=β~x~+α~.

यहां तक ​​कि अगर हमारे पास सच्चे मापदंडों तक पहुंच है, तो कार्यों के रूप में इष्टतम रैखिक भविष्यवाणी फ़ंक्शन के रूप में इष्टतम रैखिक भविष्यवाणी से भिन्न होगी । प्रश्न में कोड निम्नलिखित हैxx~

  1. मापदंडों का अनुमान करेंβ~^,α~^
  2. कंप्यूट की गणनाβ^,α^
  3. के प्रदर्शन की तुलना करें औरy^1=β^x~+α^y^2=β~^x~+α~^

चूंकि चरण 3 में हम फ़ंक्शन के रूप में भविष्यवाणी कर रहे हैं , न कि फ़ंक्शन के रूप में, दूसरे मॉडल के गुणांक (बेहतर) का उपयोग करके बेहतर तरीके से काम करता है।x~x

वास्तव में, यदि हमारे पास , और तक पहुंच है , लेकिन नहीं है , तो हम पहले मॉडल में का एक रैखिक अनुमानक स्थानापन्न कर सकते हैं , यदि हम पहले ट्रांसफॉर्मेशन फॉर्म से निष्पादित करते हैं और फिर नवीनतम समीकरण में गणना करते हैं, तो हम गुणांक केαβx~xx~ अल्फा , ~ बीटा अल्फा,बीटा ~ अल्फा , ~ बीटा अल्फा,बीटा

yx^^=βx^(x~)+α=β(μx+(x^μx)σx2σx~2)+α=σx2σx~2β+αβ(1σx2σx~2)μx.
α~,β~α,βα~,β~। तो, अगर लक्ष्य को रेखीय भविष्यवाणी करना है, तो भविष्यवक्ता का शोर संस्करण दिया जाता है, हमें बस शोर डेटा के लिए एक रैखिक मॉडल फिट करना चाहिए। यदि हम भविष्यवाणी के अलावा अन्य कारणों से सही घटना में रुचि रखते हैं सही गुणांक रुचि के हैं।α,β

परिक्षण

मैंने भविष्यवाणी में गैर-शोर संस्करण (उत्तर के अंत में कोड) का उपयोग करके भविष्यवाणियों के लिए एमएसई का मूल्यांकन करने के लिए ओपी में कोड को संपादित किया। परिणाम हैं

Reg parameters, noisy predictor
1.3387    1.6696    2.1265    2.4806    2.5679    2.5062    2.5160    2.8684

Fixed parameters, noisy predictor
1.3981    2.0626    3.2971    5.0220    7.6490   10.2568   14.1139   20.7604

Reg parameters, true predictor
1.3354    1.6657    2.1329    2.4885    2.5688    2.5198    2.5085    2.8676

Fixed parameters, true predictor
1.1139    1.0078    1.0499    1.0212    1.0492    0.9925    1.0217    1.2528

यही है, जब बजाय का उपयोग करते हैं , तो सही किए गए पैरामीटर वास्तव में अपेक्षित मापदंडों को हरा देते हैं। इसके अलावा, ( ) के साथ की भविष्यवाणी , यानी, तय पैरामीटर और सच्चा पूर्वसूचक, ( ) से बेहतर है, कि के रूप में, मापदंडों और शोर पूर्वसूचक, स्पष्ट रूप से शोर कुछ हद तक भविष्यवाणी सटीक हानि पहुँचाता है। अन्य दो मामले गलत मॉडल के मापदंडों का उपयोग करने के लिए मेल खाते हैं और इस प्रकार कमजोर परिणाम देते हैं।~ x α , β , एक्स ~ α , ~ β , ~ xxx~α,β,xα~,β~,x~

अस्वच्छता के बारे में कैविएट

वास्तव में, भले ही के बीच संबंध रैखिक हो, और बीच संबंध नहीं हो सकता है। यह के वितरण पर निर्भर करता है । उदाहरण के लिए, वर्तमान कोड में, को समान वितरण से तैयार किया गया है, इस प्रकार कोई भी बात नहीं है कि कैसे उच्च है, हम के लिए एक ऊपरी सीमा जानते हैं और इस प्रकार कार्य के रूप में भविष्यवाणी की गई चाहिए तर। एक संभावित बायेसियन शैली का समाधान लिए प्रायिकता वितरण को प्रस्तुत करना और उसके बाद में प्लग करना होगा, जबy ~ एक्स एक्स एक्स ~ एक्स एक्स y ~ एक्स एक्स ( एक्स | ~ x ) y एक्स एक्सy,xyx~xxx~xyx~xE(xx~)y^^x- रैखिक भविष्यवाणी के बजाय मैंने पहले इस्तेमाल किया था। हालाँकि, यदि कोई लिए संभाव्यता वितरण प्रस्तुत करने के लिए तैयार है, तो मुझे लगता है कि पहले स्थान पर ओएलएस अनुमानों को सही करने के आधार पर एक दृष्टिकोण के बजाय पूर्ण बायेसियन समाधान के लिए जाना चाहिए।x

परीक्षा परिणाम की नकल करने के लिए MATLAB कोड

ध्यान दें कि इसमें मूल्यांकन और OLS_solver के लिए मेरे अपने कार्यान्वयन भी शामिल हैं क्योंकि वे प्रश्न में नहीं दिए गए थे।

rng(1)

OLS_solver = @(X,Y) [X ones(size(X))]'*[X ones(size(X))] \ ([X ones(size(X))]' * Y);
evaluate = @(b,x,y)  mean(([x ones(size(x))]*b - y).^2);

reg_mse_agg = [];
fixed_mse_agg = [];
reg_mse_orig_agg = [];
fixed_mse_orig_agg = [];

varMult = 1;
numTests = 60;
for dataNumber=1:8
    reg_mses = [];
    fixed_mses = [];
    reg_mses_orig = [];
    fixed_mses_orig = [];

    X = rand(1000,1);
    X(:,1) = X(:,1) * 10;
    X(:,1) = X(:,1) + 5;

    varX = var(X);
    y = 0.5 * X(:,1) -10;

    y = y + normrnd(0,1,size(y));    
    origX = X;
    X = X + normrnd(0,dataNumber * varMult ,size(X));
    train_size = floor(0.5 * length(y));
    for t=1:numTests,
        idx = randperm(length(y));
        train_idx = idx(1:train_size);
        test_idx = idx(train_size+1:end);
        Xtrain = X(train_idx,:);
        ytrain = y(train_idx);        
        Xtest = X(test_idx,:);
        origXtest = origX(test_idx,:);
        ytest = y(test_idx);

        b = OLS_solver(Xtrain, ytrain);
        %first arg of evaluate returns MSE, working correctly.
        reg_mse = evaluate( b,Xtest,ytest);
        reg_mses = [reg_mses ; reg_mse];

        varInd = var(Xtrain);
        varNoise = varInd - varX;
        bFixed = [0 0]';
        bFixed(1) = b(1) * varInd / varX;
        bFixed(2) = mean(ytrain - bFixed(1)*Xtrain);
        fixed_mse = evaluate( bFixed,Xtest,ytest);
        fixed_mses = [fixed_mses ; fixed_mse];

        reg_mse_orig = evaluate(b, origXtest, ytest);
        reg_mses_orig = [reg_mses; reg_mses_orig];

        fixed_mse_orig = evaluate(bFixed, origXtest, ytest);
        fixed_mses_orig = [fixed_mses_orig; fixed_mse_orig];

    end
    reg_mse_agg = [reg_mse_agg , reg_mses];
    fixed_mse_agg = [fixed_mse_agg , fixed_mses];

    reg_mse_orig_agg = [reg_mse_orig_agg , reg_mses_orig];
    fixed_mse_orig_agg = [fixed_mse_orig_agg , fixed_mses_orig]; 
end

disp('Reg parameters, noisy predictor')
disp(mean(reg_mse_agg))
disp('Fixed parameters, noisy predictor')
disp(mean(fixed_mse_agg))
disp('Reg parameters, true predictor')
disp(mean(reg_mse_orig_agg))
disp('Fixed parameters, true predictor')
disp(mean(fixed_mse_orig_agg))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.