ความแตกต่างระหว่างการเลือกคุณสมบัติตาม“ F ถดถอย” และขึ้นอยู่กับค่า ?


16

การเปรียบเทียบคุณสมบัติต่าง ๆ โดยใช้คุณลักษณะF-regressionเดียวกับการเชื่อมโยงคุณสมบัติกับฉลากแต่ละรายการและการสังเกตค่าหรือไม่R2

ฉันมักจะเห็นเพื่อนร่วมงานของฉันใช้F regressionสำหรับการเลือกคุณสมบัติในการเรียนรู้ของเครื่องจากsklearn:

sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)`  

บางคนบอกฉัน - ทำไมมันให้ผลลัพธ์เช่นเดียวกับที่สัมพันธ์กับตัวแปรฉลาก / depedendent?

ข้อได้เปรียบของการใช้งานF_regressionในการเลือกคุณสมบัติ ไม่ชัดเจนสำหรับฉัน

นี่คือรหัสของฉัน: ฉันใช้mtcarsชุดข้อมูลจากR:

import pandas as pd
import numpy as np
from sklearn import feature_selection
from sklearn.linear_model import LinearRegression

#....load mtcars dataset into a pandas dataframe called "df", not shown here for conciseness

# only using these numerical columns as features ['mpg', 'disp', 'drat', 'wt']
# using this column as the label:  ['qsec']

model = feature_selection.SelectKBest(score_func=feature_selection.f_regression,\
                                      k=4)

results = model.fit(df[columns], df['qsec'])

print results.scores_
print results.pvalues_

# Using just correlation coefficient:

columns = ['mpg', 'disp', 'drat', 'wt']
for col in columns:
    lm = LinearRegression(fit_intercept=True)
    lm.fit(df[[col]], df['qsec'])
    print lm.score(df[[col]], df['qsec'])

ตามที่สงสัยการจัดอันดับของฟีเจอร์นั้นเหมือนกันทุกประการ:

scores using f_regression:

[ 6.376702    6.95008354  0.25164249  0.94460378]


 scores using coefficient of determination:

0.175296320261  
0.18809385182
0.00831830818303
0.0305256382746

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

เคยมีกรณีที่F_regressionจะให้ผลลัพธ์ที่แตกต่างกันหรือจะจัดอันดับคุณสมบัติที่แตกต่างกันอย่างใด?

แก้ไข: เพื่อสรุปฉันต้องการทราบว่าฟีเจอร์สองอันดับนี้ให้ผลลัพธ์ที่แตกต่างกันหรือไม่:

1) คุณสมบัติการจัดอันดับโดยสถิติ F ของพวกเขาเมื่อถอยหลังพวกเขาด้วยผลเป็นรายบุคคล (นี่คือสิ่งที่ sklearn ทำ) และ

2) คุณสมบัติการจัดอันดับตามค่า R-squared เมื่อทำการถดถอยด้วยผลลัพธ์


ดังนั้นลงไปทันทีหลังจากที่ฉันโพสต์ข้อความนี้ซึ่งฉันแน่ใจว่าจะทำให้มีโอกาสได้รับความสนใจ
Hunle

1
คำถามของคุณมีคำว่า "F-regression" มันแตกต่างจากการถดถอยอย่างไร? ... (แก้ไข :) มีบางอย่างเกิดขึ้นกับฉันในตอนนี้: คุณหมายถึงการทดสอบ F (หรืออาจเป็นเพียงสถิติ F) สำหรับการถดถอยโดยรวมกับ nil-null (เช่นการสกัดกั้นเท่านั้น)?
Glen_b -Reinstate Monica

ฉันหมายถึงการทดสอบ F ในการถดถอยการทดสอบ F และด้วยเหตุนี้สถิติ F ถูกนำมาใช้เพื่อทดสอบสมมติฐานว่างว่าไม่มีความสัมพันธ์ระหว่างรีจีสเตอร์กับผลลัพธ์ / ฉลาก sklearnอ้างถึงว่าเป็นการถดถอยแบบ F ซึ่งอาจทำให้เข้าใจผิดเล็กน้อยเนื่องจากเป็นการทดสอบจริง ๆ scikit-learn.org/stable/modules/generated/…
Hunle

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

2
คุณช่วยแก้ไขคำอธิบายนั้นเป็นคำถามของคุณได้ไหม
Glen_b

คำตอบ:


15

TL: DR

จะไม่มีความแตกต่างถ้าF-regressionเพียงคำนวณสถิติ F และเลือกคุณสมบัติที่ดีที่สุด อาจมีความแตกต่างในการจัดอันดับสมมติว่าF-regressionทำสิ่งต่อไปนี้:

  • เริ่มต้นด้วยรูปแบบคงที่M0
  • ลองทุกรุ่นประกอบด้วยเพียงฟีเจอร์เดียวและเลือกที่ดีที่สุดตามสถิติ FM1
  • ลองทุกรุ่นประกอบด้วยบวกกับฟีเจอร์อื่นและเลือกที่ดีที่สุด ...M 1M2M1

ในขณะที่ความสัมพันธ์จะไม่เหมือนกันในแต่ละรอบ แต่คุณยังสามารถรับการจัดอันดับนี้ได้โดยเพียงแค่คำนวณความสัมพันธ์ในแต่ละขั้นตอนดังนั้นทำไมF-regressionต้องเพิ่มอีกขั้น มันทำสองสิ่ง:

  • เลือกคุณสมบัติ: ถ้าคุณต้องการที่จะเลือกคุณสมบัติที่ดีที่สุดในเครื่องเรียนรู้ท่อที่คุณจะดูแลเกี่ยวกับความถูกต้องและมีมาตรการในการปรับภายใต้ / overfitting คุณอาจสนใจเกี่ยวกับการจัดอันดับและการคำนวณเพิ่มเติมไม่เป็นประโยชน์k
  • สำหรับการทดสอบอย่างมีนัยสำคัญ: ถ้าคุณกำลังพยายามที่จะเข้าใจถึงผลกระทบของตัวแปรบางอย่างเกี่ยวกับการส่งออกในการศึกษานั้นคุณอาจต้องการที่จะสร้างรูปแบบเชิงเส้นและรวมเฉพาะตัวแปรที่มีนัยสำคัญในการปรับปรุงรูปแบบของคุณด้วยความเคารพบาง -value . ที่นี่มีประโยชน์pF-regression

F-test คืออะไร

การทดสอบ F (Wikipedia)เป็นวิธีการเปรียบเทียบความสำคัญของการปรับปรุงแบบจำลองโดยคำนึงถึงการเพิ่มตัวแปรใหม่ คุณสามารถใช้งานได้เมื่อมีโมเดลพื้นฐานและโมเดลซับซ้อนยิ่งขึ้นซึ่งมีตัวแปรทั้งหมดจากและอีกมากมาย การทดสอบ F จะบอกคุณว่าดีกว่าอย่างมีนัยสำคัญเมื่อเทียบกับค่าM 1 M 0 M 1 M 0 pM0M1M0M1M0p

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


สิ่งที่ไม่f_regressionทำ

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

  • เริ่มต้นด้วยรูปแบบคงที่M0
  • ลองทุกรุ่นประกอบด้วยเพียงฟีเจอร์เดียวและเลือกที่ดีที่สุดตามสถิติ FM1
  • ลองทุกรุ่นประกอบด้วยบวกกับฟีเจอร์อื่นและเลือกที่ดีที่สุด ...M 1M2M1

สำหรับตอนนี้ฉันคิดว่ามันใกล้พอที่จะตอบคำถามของคุณ มีความแตกต่างระหว่างการจัดอันดับf_regressionและการจัดอันดับตามความสัมพันธ์

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

สมมติคุณมีสามคุณลักษณะที่ทั้งและมีความสัมพันธ์อย่างมากกับการส่งออกแต่ยังมีความสัมพันธ์อย่างมากกับแต่ละอื่น ๆ ในขณะมีความสัมพันธ์เพียง midly กับYวิธีการให้คะแนนของคุณจะกำหนดคะแนนที่ดีที่สุดให้กับและแต่วิธีการเรียงลำดับอาจไม่ ในรอบแรกก็จะเลือกคุณลักษณะที่ดีที่สุดพูดเพื่อสร้างM_1จากนั้นก็จะประเมินทั้งและสำหรับM_2ในฐานะที่เป็นx 1 x 2 y x 3x1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2มีความสัมพันธ์อย่างมากกับคุณลักษณะที่เลือกไว้มากที่สุดของข้อมูลจะมีรวมอยู่แล้วในรูปแบบขั้นตอนและดังนั้นจึงอาจเลือกx_3ในขณะที่มันมีความสัมพันธ์น้อยที่จะก็มีความสัมพันธ์มากขึ้นในการที่เหลือเป็นส่วนหนึ่งที่ไม่ได้แล้วอธิบายกว่าx_2นี่คือความแตกต่างระหว่างสองขั้นตอนที่คุณเสนอx3yx1x2

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


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


เนื้อหาเพิ่มเติม: ต่อไปนี้เป็นคำแนะนำเกี่ยวกับการทดสอบ F ที่คุณอาจพบว่ามีประโยชน์


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

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

" ปัญหาเล็กน้อยกับค่า p " ที่คุณอ้างถึงคืออะไร และจะมีปัญหาในการเปรียบเทียบหลายครั้งตั้งแต่เราทดสอบข้อมูลเดียวกันทุกครั้งหรือไม่
Hunle

สิ่งสุดท้ายที่หนึ่ง (ขออภัยที่จะน่ารำคาญ) เมื่อคุณพูดว่า "... และจากนั้นถึงจะมีความแตกต่างในการให้คะแนนของคุณ" สำหรับขั้นตอนกลางนี้ค่ามักจะเกี่ยวข้องกับค่า p-value ในการแจกแจงแบบ F เสมอเนื่องจาก N และ k ได้รับการแก้ไขในการคำนวณ F-statistic ( stats.stackexchange.com/questions/50425/ เป็นต้น ) . ดังนั้นฉันเดาว่าฉันไม่เข้าใจความจำเป็นในการกระจายแบบ F-test หรือ F คุณ M2R2
Hunle

1
@ ฮันเกลฉันเพิ่มเหตุผลในการใช้การทดสอบ F ในตอนท้ายของคำตอบ โดยพื้นฐานแล้วถ้าคุณใส่ใจเรื่องความสำคัญ ที่เกี่ยวข้องกับปัญหาเล็กน้อยกับ -valuespผมคิดว่าคุณอยู่ในจุด ฉันรู้สึกเหมือนกับว่าเรากำลังทดสอบสิ่งเดียวกันหลายครั้ง ( XKCD บังคับ ) อย่างไรก็ตามเนื่องจากมีการใช้การทดสอบ F ในทางปฏิบัติมันอาจ 1) ไม่ทำสิ่งที่ฉันคิดว่ามัน 2) ไม่เป็นปัญหาเนื่องจากเราไม่ได้ทดสอบสิ่งเดียวกันในแต่ละขั้นตอน
วิงค์

17

ฉันใช้เวลาดูที่ซอร์สโค้ดของScikitเพื่อทำความเข้าใจกับสิ่งที่f_regressionทำและฉันต้องการโพสต์ข้อสังเกตของฉันที่นี่

คำถามเดิมคือ:

ถาม : SelectKBest(f_regression, k = 4)สร้างผลลัพธ์เช่นเดียวกับการใช้LinearRegression(fit_intercept=True)และเลือกฟีเจอร์ 4 อันดับแรกที่มีคะแนนสูงสุดหรือไม่?

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

นี่คือสิ่งที่f_regressionไม่เกี่ยวกับการป้อนข้อมูลเมทริกซ์และอาเรย์Yสำหรับทุกๆคุณลักษณะจะคำนวณความสัมพันธ์กับ : จากนั้นมันจะคำนวณสถิติ F- ที่จำนวนตัวอย่าง (มีความแตกต่างกันเล็กน้อย ถ้าพารามิเตอร์เป็นแล้วมันจะคูณกับ ) ค่า F เหล่านี้จะถูกส่งคืนพร้อมกับค่า p ที่เกี่ยวข้อง ดังนั้นผลลัพธ์คือ tuple (ค่า F, ค่า p) แล้วก็XyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestใช้องค์ประกอบแรกของ tuple นี้ (ซึ่งจะเป็นคะแนน) เรียงลำดับและเลือกคุณสมบัติแรกของด้วยคะแนนสูงสุด ไม่มีแอพพลิเคชั่นตามลำดับหรืออะไรก็ตามและค่า p ไม่ได้ถูกใช้kX

ตอนนี้ขอเป็นคะแนนคำนวณโดยสำหรับและYนี่คือการถดถอยในตัวแปรเดียวดังนั้น 2 จากนั้น จึงมีความแตกต่างระหว่างไม่มีและ แม้ว่าใครสามารถสร้างแบบจำลองตามลำดับนี่ไม่ใช่สิ่งที่ทำ X [ : , ฉัน] Y R 2 ฉัน = ρ 2 ฉัน R 2 ฉัน < R 2 Jρ 2 ฉันRi2LinearRegressionX[:,i]yRi2=ρi2

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
f_regressionLinearRegressionSelectKBest

2
ว้าวดังนั้น `SelectKBest 'ไม่ได้สร้างแบบจำลองตามลำดับ
Hunle

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