การเลือกคุณสมบัติและการตรวจสอบความถูกต้องข้าม


76

ฉันเพิ่งอ่านจำนวนมากบนไซต์นี้ (@Aniko, @Dikran Marsupial, @Erik) และที่อื่น ๆ เกี่ยวกับปัญหาการ overfitting ที่เกิดขึ้นกับการตรวจสอบข้าม - (Smialowski et al 2010 ชีวสารสนเทศศาสตร์, Hastie, องค์ประกอบของการเรียนรู้ทางสถิติ) ข้อเสนอแนะคือการที่ใด ๆการเลือกคุณลักษณะภายใต้การดูแล (โดยใช้ความสัมพันธ์ที่มีป้ายชื่อ class) ดำเนินการด้านนอกของประมาณการผลการดำเนินงานรูปแบบการใช้การตรวจสอบข้าม (หรือรูปแบบวิธีการอื่นเช่นการประเมินความร่วมมือ) อาจส่งผลให้อิง

สิ่งนี้ดูเหมือนจะไม่ง่ายสำหรับฉัน - แน่นอนถ้าคุณเลือกชุดคุณลักษณะและประเมินโมเดลของคุณโดยใช้เฉพาะคุณสมบัติที่เลือกโดยใช้การตรวจสอบความถูกต้องไขว้กันคุณจะได้รับการประเมินแบบไม่เอนเอียง ของประชากร)

ด้วยขั้นตอนนี้เราไม่สามารถอ้างสิทธิ์ชุดคุณลักษณะที่ดีที่สุด แต่สามารถรายงานประสิทธิภาพของคุณลักษณะที่เลือกซึ่งตั้งค่าไว้บนข้อมูลที่มองไม่เห็นว่าถูกต้องได้หรือไม่

ฉันยอมรับว่าการเลือกคุณสมบัติตามชุดข้อมูลทั้งหมดอาจมีการรั่วไหลของข้อมูลระหว่างชุดทดสอบและชุดรถไฟ แต่ถ้าชุดคุณลักษณะเป็นแบบคงที่หลังจากการเลือกเริ่มต้นและไม่มีการปรับแต่งอื่น ๆ แน่นอนว่ามันถูกต้องที่จะรายงานตัวชี้วัดประสิทธิภาพข้ามการตรวจสอบแล้ว?

ในกรณีของฉันฉันมี 56 คุณสมบัติและ 259 เคสดังนั้น #case> #features คุณสมบัติที่ได้รับมาจากข้อมูลเซ็นเซอร์

ขออภัยถ้าคำถามของฉันดูเหมือนอนุพันธ์ แต่นี่เป็นจุดสำคัญที่จะชี้แจง

แก้ไข: ในการดำเนินการเลือกคุณลักษณะภายในการตรวจสอบข้ามในชุดข้อมูลรายละเอียดข้างต้น (ขอบคุณคำตอบดังต่อไปนี้) ผมสามารถยืนยันได้ว่าคุณสมบัติการเลือกก่อนที่จะข้ามการตรวจสอบในชุดข้อมูลนี้แนะนำอย่างมีนัยสำคัญอคติ ความลำเอียง / การ overfitting นี้ยิ่งใหญ่ที่สุดเมื่อทำเช่นนั้นสำหรับสูตร 3 ระดับเมื่อเทียบกับสูตร 2 ระดับ ฉันคิดว่าความจริงที่ว่าฉันใช้การถดถอยแบบขั้นตอนสำหรับการเลือกคุณสมบัติเพิ่มขึ้น overfitting นี้; เพื่อวัตถุประสงค์ในการเปรียบเทียบในชุดข้อมูลที่แตกต่างกัน แต่มีความเกี่ยวข้องฉันได้เปรียบเทียบชุดคำสั่งการส่งต่อคุณสมบัติตามลำดับก่อนที่จะทำการตรวจสอบความถูกต้องข้ามกับผลลัพธ์ที่ฉันได้รับก่อนหน้านี้ด้วยการเลือกคุณสมบัติภายใน CV ผลลัพธ์ระหว่างวิธีการทั้งสองไม่แตกต่างกันอย่างมาก นี่อาจหมายความว่าการถดถอยแบบขั้นตอนมีแนวโน้มที่จะมีค่าเกินกว่า FS ตามลำดับหรืออาจเป็นเรื่องแปลกของชุดข้อมูลนี้


7
ฉันไม่คิดว่ามันเป็นสิ่งที่ Hastie และคณะ กำลังสนับสนุน อาร์กิวเมนต์ทั่วไปคือถ้าการเลือกคุณสมบัติใช้การตอบกลับจะรวมอยู่ในขั้นตอน CV ของคุณดีขึ้น หากคุณทำการคัดกรองผู้ทำนายเช่นโดยดูที่ความแปรปรวนตัวอย่างของพวกเขาและไม่รวมตัวทำนายที่มีการแปรผันเล็ก ๆ นั่นถือว่าเป็นขั้นตอนแบบนัดเดียว
พระคาร์ดินัล

3
+1 อย่างไรก็ตามในกรณีนี้การตรวจสอบข้ามไม่ได้แสดงถึงความแปรปรวนในกระบวนการเลือกคุณลักษณะซึ่งอาจเป็นปัญหาหากการเลือกคุณลักษณะไม่เสถียร หากคุณทำการตรวจคัดกรองก่อนจากนั้นความแปรปรวนในประสิทธิภาพในแต่ละครึ่งจะแสดงถึงความแปรปรวนที่แท้จริง หากคุณทำการคัดกรองในแต่ละครั้งจะเป็นการเพิ่มความแปรปรวนของประสิทธิภาพในแต่ละครั้งอย่างเหมาะสม ฉันยังคงทำการคัดกรองทุกครั้งหากฉันสามารถจ่ายค่าใช้จ่ายในการคำนวณได้
Dikran Marsupial

1
ฉันคิดว่าคำแถลงว่า "การเลือกคุณสมบัติใด ๆ ที่ดำเนินการก่อนการประเมินประสิทธิภาพของโมเดลโดยใช้การตรวจสอบความถูกต้องไขว้อาจส่งผลให้เกิด overfitting" เป็นการหลอกลวงหรือบิดเบือนความจริงของสิ่งที่ Hastie และคนอื่น ๆ จะแนะนำ หากคุณเปลี่ยนคำว่า "ก่อนหน้า" เป็น "ไม่มี" จะทำให้เข้าใจได้ง่ายขึ้นนอกจากนี้ประโยคดูเหมือนว่าจะแนะนำว่าการตรวจสอบความถูกต้องไขว้เป็นวิธีเดียวที่จะทดสอบความเหมาะสมของตัวแปรที่เลือกอย่างถูกกฎหมายตัวอย่างเช่น bootstrap อาจเป็นแนวทาง .
Michael Chernick

@MichaelChernick - เห็นด้วย ฉันได้แก้ไขด้านบนเพื่อสะท้อนความหมายของฉันได้ดียิ่งขึ้น
BGreene

1
@Bgreene: มีการอภิปรายที่ผ่านมาเกี่ยวกับเรื่องนี้ที่สามารถอ่านได้ที่goo.gl/C8BUa
Alekk

คำตอบ:


69

หากคุณทำการเลือกคุณสมบัติกับข้อมูลทั้งหมดจากนั้นตรวจสอบความถูกต้องของข้อมูลจากนั้นข้อมูลการทดสอบในแต่ละขั้นตอนของกระบวนการตรวจสอบความถูกต้องข้ามจะถูกใช้เพื่อเลือกคุณสมบัติและนี่คือสิ่งที่ทำให้การวิเคราะห์ประสิทธิภาพลำเอียง

ลองพิจารณาตัวอย่างนี้ เราสร้างข้อมูลเป้าหมายโดยการโยนเหรียญ 10 ครั้งและบันทึกว่ามันจะลงมาเป็นหัวหรือก้อย ต่อไปเราจะสร้างฟีเจอร์ 20 อย่างโดยการโยนเหรียญ 10 ครั้งสำหรับแต่ละฟีเจอร์และจดสิ่งที่เราได้รับ จากนั้นเราทำการเลือกคุณสมบัติโดยเลือกคุณสมบัติที่ตรงกับข้อมูลเป้าหมายให้ใกล้เคียงที่สุดและใช้การคาดการณ์ของเรา หากเราตรวจสอบข้ามเราจะได้รับอัตราความผิดพลาดที่คาดว่าจะต่ำกว่า 0.5 เล็กน้อย นี่เป็นเพราะเราได้เลือกคุณสมบัติบนพื้นฐานของความสัมพันธ์ทั้งชุดฝึกอบรมและชุดทดสอบในทุกขั้นตอนของกระบวนการตรวจสอบข้าม อย่างไรก็ตามอัตราความผิดพลาดที่แท้จริงจะเป็น 0.5 เนื่องจากข้อมูลเป้าหมายนั้นสุ่ม หากคุณทำการเลือกคุณสมบัติอย่างอิสระภายในแต่ละเท่าของการตรวจสอบความถูกต้องข้ามค่าคาดหวังของอัตราข้อผิดพลาดคือ 0

แนวคิดหลักคือการตรวจสอบความถูกต้องไขว้เป็นวิธีหนึ่งในการประเมินประสิทธิภาพการวางนัยทั่วไปของกระบวนการสำหรับการสร้างแบบจำลองดังนั้นคุณต้องทำซ้ำกระบวนการทั้งหมดในแต่ละครั้ง มิฉะนั้นคุณจะต้องจบด้วยการประมาณแบบเอนเอียงหรือการประมาณความแปรปรวนของการประมาณ (หรือทั้งสองอย่าง)

HTH

นี่คือรหัส MATLAB ที่ดำเนินการจำลอง Monte-Carlo ของการตั้งค่านี้พร้อมด้วยคุณสมบัติ 56 รายการและ 259 เคสเพื่อให้ตรงกับตัวอย่างของคุณผลลัพธ์ที่ได้คือ:

เครื่องมือประเมินลำเอียง: erate = 0.429210 (0.397683 - 0.451737)

ตัวประมาณที่ไม่เอนเอียง: erate = 0.499689 (0.397683 - 0.590734)

ตัวประมาณแบบเอนเอียงคือตัวเลือกที่จะดำเนินการก่อนที่จะมีการตรวจสอบความถูกต้องแบบข้ามส่วนตัวประมาณแบบเอนเอียงคือตัวประเมินแบบเอนเอียงซึ่งจะทำการเลือกอย่างอิสระในแต่ละส่วนของการตรวจสอบความถูกต้องแบบข้าม นี่แสดงให้เห็นว่าอคตินั้นค่อนข้างรุนแรงในกรณีนี้ขึ้นอยู่กับลักษณะของงานการเรียนรู้

NF    = 56;
NC    = 259;
NFOLD = 10;
NMC   = 1e+4;

% perform Monte-Carlo simulation of biased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform feature selection

   err       = mean(repmat(y,1,NF) ~= x);
   [err,idx] = min(err);

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, '  Biased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

% perform Monte-Carlo simulation of unbiased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      % perform feature selection

      err       = mean(repmat(y(partition~=j),1,NF) ~= x(partition~=j,:));
      [err,idx] = min(err);

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, 'Unbiased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

3
ขอบคุณ - มันมีประโยชน์มาก หากคุณใช้แนวทางที่แนะนำคุณจะประเมินรุ่นสุดท้ายของคุณอย่างไร เนื่องจากคุณจะมีคุณสมบัติหลายชุดคุณจะเลือกชุดคุณลักษณะสุดท้ายได้อย่างไร ในอดีตฉันยังได้รายงานผลลัพธ์ที่ได้จากการตรวจสอบความถูกต้องแบบไขว้ครั้งเดียวพร้อมพารามิเตอร์แบบจำลองและคุณสมบัติที่เลือก
BGreene

16
เป็นการดีที่สุดที่จะดูการตรวจสอบข้ามเป็นการประเมินประสิทธิภาพของกระบวนการสำหรับการปรับโมเดลให้เหมาะสมแทนที่จะเป็นตัวแบบเอง สิ่งที่ดีที่สุดที่ควรทำคือทำการข้ามการตรวจสอบความถูกต้องตามด้านบนจากนั้นสร้างโมเดลสุดท้ายของคุณโดยใช้ชุดข้อมูลทั้งหมดโดยใช้ขั้นตอนเดียวกับที่ใช้ในแต่ละขั้นตอนของกระบวนการตรวจสอบข้าม
Dikran Marsupial

2
ในกรณีนี้เราจะรายงานผลการจัดหมวดหมู่ตามการตรวจสอบข้าม (ชุดคุณลักษณะที่แตกต่างกันจำนวนมาก) แต่ยังรายงานรูปแบบที่จะมีเพียงหนึ่งในชุดคุณสมบัติเหล่านั้นเช่นผลการจัดหมวดหมู่ตรวจสอบข้ามไม่ตรงกับชุดคุณสมบัติ?
BGreene

10
โดยพื้นฐานแล้วใช่การตรวจสอบความถูกต้องข้ามเป็นการประมาณประสิทธิภาพที่คาดหวังของกระบวนการสร้างแบบจำลองไม่ใช่ตัวแบบเอง หากชุดคุณลักษณะแตกต่างกันอย่างมากจากการ cross-valdidation ไปยังอีกเท่าหนึ่งมันเป็นข้อบ่งชี้ว่าการเลือกคุณสมบัติไม่เสถียรและอาจไม่มีความหมายมากนัก เป็นการดีที่สุดที่จะใช้การทำให้เป็นมาตรฐาน (เช่นการถดถอยของสัน) มากกว่าการเลือกคุณสมบัติโดยเฉพาะอย่างยิ่งถ้าสิ่งหลังไม่เสถียร
Dikran Marsupial

3
นี่เป็นเรื่องสำคัญ น่าอัศจรรย์ว่ามีกี่คนที่ไม่ได้ใช้สิ่งนี้
Chris A.

12

หากต้องการเพิ่มคำอธิบายปัญหาที่แตกต่างเล็กน้อยและทั่วไปมากขึ้น:

หากคุณทำการประมวลผลล่วงหน้าด้วยข้อมูลใด ๆเช่น

  1. การปรับพารามิเตอร์ให้เหมาะสมแนะนำโดยการตรวจสอบข้าม / out-of-bootstrap
  2. การลดขนาดด้วยเทคนิคเช่น PCA หรือ PLS เพื่อสร้างอินพุตสำหรับโมเดล (เช่น PLS-LDA, PCA-LDA)
  3. ...

และต้องการใช้การตรวจสอบข้ามการตรวจสอบ / ออกจาก bootstrap (/ ถือออก) เพื่อประเมินประสิทธิภาพของรุ่นสุดท้ายการประมวลผลล่วงหน้าที่ขับเคลื่อนด้วยข้อมูลจำเป็นต้องดำเนินการกับข้อมูลการฝึกอบรมตัวแทนแทนแต่ละแบบจำลองตัวแทน

หากการประมวลผลล่วงหน้าที่ขับเคลื่อนด้วยข้อมูลเป็นประเภทที่ 1 สิ่งนี้จะนำไปสู่การตรวจสอบความถูกต้องแบบ "ซ้อน" หรือ "ซ้อน": การประมาณค่าพารามิเตอร์จะทำในการตรวจสอบความถูกต้องโดยใช้เฉพาะชุดฝึกอบรม ElemStatLearn มีภาพประกอบ ( https://web.stanford.edu/~hastie/Papers/ESLII.pdfหน้า 222 ของการพิมพ์ 5)

คุณอาจบอกว่าการประมวลผลล่วงหน้านั้นเป็นส่วนหนึ่งของการสร้างแบบจำลองจริงๆ การประมวลผลล่วงหน้าที่ทำเสร็จแล้วเท่านั้น

  • อิสระสำหรับแต่ละกรณีหรือ
  • เป็นอิสระจากชุดข้อมูลจริง

สามารถนำออกจากการตรวจสอบห่วงเพื่อบันทึกการคำนวณ

ดังนั้นวิธีอื่น: ถ้าแบบจำลองของคุณถูกสร้างขึ้นโดยความรู้ภายนอกชุดข้อมูลเฉพาะ (เช่นคุณตัดสินใจล่วงหน้าด้วยความรู้ผู้เชี่ยวชาญของคุณว่าช่องการวัด 63 - 79 ไม่สามารถช่วยแก้ปัญหาได้แน่นอนว่าคุณสามารถยกเว้นช่องเหล่านี้ได้ สร้างรูปแบบและข้ามตรวจสอบข้อมูลได้. เดียวกันถ้าคุณทำถดถอย PLS และตัดสินใจจากประสบการณ์ของคุณที่ 3 ตัวแปรแฝงเป็นทางเลือกที่เหมาะสม ( แต่ไม่ได้เล่นรอบไม่ว่าจะเป็น 2 หรือ 5 เลเวลให้ผลลัพธ์ที่ดีกว่า) แล้วคุณสามารถ ไปข้างหน้ากับการตรวจสอบ out-of-bootstrap / cross ปกติ


น่าเสียดายที่ลิงก์สำหรับการพิมพ์ 5 ของหนังสือ ElemStatLearn ไม่ทำงาน ฉันสงสัยว่าภาพประกอบที่คุณอ้างถึงนั้นยังอยู่ในหน้าเดียวกันหรือไม่ โปรดพูดถึงคำบรรยายภาพด้วย
rraadd88

ดังนั้นถ้าฉันมีข้อมูลสองชุดให้เลือกคุณสมบัติ / วิศวกรรมในหนึ่งชุดและ CV อีกชุดหนึ่งจะไม่มีปัญหาหรือไม่
Milos

1
@Milos: ไม่ตราบใดที่คุณสมบัติเหล่านั้นกลายเป็นพารามิเตอร์คงที่สำหรับรุ่นสำหรับการตรวจสอบข้ามที่ควรจะตกลง นี่จะเป็นการสร้างสมมุติฐานที่เหมาะสม (= การพัฒนาคุณลักษณะบนชุดข้อมูล A) / การทดสอบสมมติฐาน (= ประสิทธิภาพการวัดของคุณลักษณะคงที่ในขณะนี้ด้วยชุดข้อมูล B)
cbeleites

@cbeleites ใช่นั่นคือสิ่งที่ฉันตั้งใจจะทำ กำหนดคุณลักษณะบน A จากนั้นแก้ไขคุณสมบัติเหล่านั้นและทำการตรวจสอบความถูกต้องข้ามสำหรับรุ่นบน B. ขอบคุณ :)
Milos

@Milos: เก็บไว้ในใจ แต่ที่โต้แย้งของคุณเพื่อประสิทธิภาพที่ประสบความสำเร็จจะดียิ่งขึ้นถ้าคุณอย่างเต็มที่ในการฝึกอบรมรูปแบบของคุณใน A และ B จากนั้นใช้เพียงสำหรับการทดสอบ
cbeleites

5

เรามาลองทำให้เข้าใจง่ายหน่อย ลองพิจารณาตัวอย่างนี้: คุณมีตัวทำนายไบนารีและสองตัวทำนายไบนารี คุณต้องการโมเดลที่มีตัวทำนายเพียงตัวเดียว ผู้ทำนายทั้งสองมีโอกาสพูดได้ 95% ว่าเท่ากับผู้อยู่ในความอุปการะและโอกาส 5% ที่จะไม่เห็นด้วยกับผู้ติดตาม

ตอนนี้โดยบังเอิญข้อมูลของคุณตัวทำนายหนึ่งเท่ากับการพึ่งพาข้อมูลทั้งหมดใน 97% ของเวลาและอีกอันหนึ่งเท่านั้นใน 93% ของเวลา คุณจะเลือกผู้ทำนายที่มี 97% และสร้างแบบจำลองของคุณ ในแต่ละรอบของการตรวจสอบความถูกต้องไขว้คุณจะมีตัวแบบพึ่งพา = ตัวทำนายเนื่องจากมันเกือบจะถูกต้องเสมอ ดังนั้นคุณจะได้รับประสิทธิภาพที่คาดการณ์ไว้ 97%

ตอนนี้คุณสามารถพูดได้โอเคนั่นเป็นเพียงโชคร้าย แต่ถ้าตัวทำนายถูกสร้างขึ้นแล้วคุณจะมีโอกาส 75% ของอย่างน้อยหนึ่งคนที่มีความแม่นยำ> 95% ในชุดข้อมูลทั้งหมดและนั่นคือสิ่งที่คุณจะเลือก ดังนั้นคุณจึงมีโอกาส 75% ที่จะประเมินค่าสูงไป

ในทางปฏิบัติมันไม่ได้เป็นเรื่องเล็กน้อยที่จะประเมินผลกระทบ เป็นไปได้อย่างสิ้นเชิงว่าการเลือกคุณสมบัติของคุณจะเลือกคุณสมบัติเดียวกันในแต่ละเท่าราวกับว่าคุณทำในชุดข้อมูลทั้งหมดจากนั้นจะไม่มีอคติ เอฟเฟกต์จะเล็กลงหากคุณมีตัวอย่างมากขึ้น แต่มีคุณสมบัติ อาจเป็นคำแนะนำให้ใช้ทั้งสองวิธีกับข้อมูลของคุณและดูว่าผลลัพธ์แตกต่างกันอย่างไร

คุณสามารถตั้งค่าข้อมูลจำนวนหนึ่ง (พูด 20%) ใช้ทั้งวิธีของคุณและวิธีที่ถูกต้องในการรับการประเมินประสิทธิภาพโดยการตรวจสอบความถูกต้องของ 80% และดูว่าการทำนายประสิทธิภาพใดพิสูจน์ความแม่นยำมากขึ้นเมื่อคุณถ่ายโอนโมเดลของคุณ % ของข้อมูลที่ตั้งไว้ โปรดทราบว่าสิ่งนี้จะใช้งานการเลือกคุณสมบัติของคุณก่อนที่ CV จะต้องทำเพียงแค่ 80% ของข้อมูล มิเช่นนั้นจะไม่จำลองการถ่ายโอนโมเดลของคุณไปยังข้อมูลภายนอกตัวอย่างของคุณ


คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับวิธีการเลือกคุณสมบัติที่ถูกต้องกับตัวอย่างที่ใช้งานง่ายของคุณได้หรือไม่? ขอขอบคุณ.
uared1776
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.