การเลือกคุณสมบัติโดยใช้คุณสมบัตินำเข้าในป่าสุ่มพร้อม scikit-Learn


12

ฉันมีพล็อต importances คุณลักษณะในป่าสุ่มที่มี scikit เพื่อปรับปรุงการทำนายโดยใช้ฟอเรสต์แบบสุ่มฉันจะใช้ข้อมูลพล็อตเพื่อลบคุณลักษณะได้อย่างไร ฉันจะทราบได้อย่างไรว่าฟีเจอร์นั้นไม่มีประโยชน์หรือลดประสิทธิภาพการสุ่มฟอเรสต์โดยใช้ข้อมูลการลงจุดอย่างไร พล็อตจะขึ้นอยู่กับคุณลักษณะfeature_importances_และฉันใช้ตัวจําแนsklearn.ensemble.RandomForestClassifier

ฉันรู้ว่ามีอยู่เทคนิคอื่น ๆ สำหรับการเลือกคุณลักษณะfeature_importances_แต่ในคำถามนี้ผมต้องการที่จะมุ่งเน้นไปที่วิธีการใช้คุณลักษณะ


ตัวอย่างของการแปลงความสำคัญของคุณลักษณะดังกล่าว:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


14

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

def selectKImportance(model, X, k=5):
     return X[:,model.feature_importances_.argsort()[::-1][:k]]

หรือถ้าคุณใช้ไพพ์ไลน์คลาสต่อไปนี้

class ImportanceSelect(BaseEstimator, TransformerMixin):
    def __init__(self, model, n=1):
         self.model = model
         self.n = n
    def fit(self, *args, **kwargs):
         self.model.fit(*args, **kwargs)
         return self
    def transform(self, X):
         return X[:,self.model.feature_importances_.argsort()[::-1][:self.n]]

ตัวอย่างเช่น:

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> iris = load_iris()
>>> X = iris.data
>>> y = iris.target
>>> 
>>> model = RandomForestClassifier()
>>> model.fit(X,y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
>>> 
>>> newX = selectKImportance(model,X,2)
>>> newX.shape
(150, 2)
>>> X.shape
(150, 4)

และชัดเจนหากคุณต้องการเลือกตามเกณฑ์อื่นที่ไม่ใช่ "คุณสมบัติ k อันดับสูงสุด" จากนั้นคุณสามารถปรับฟังก์ชั่นได้ตามต้องการ


ขอบคุณเดวิด ข้อมูลเชิงลึกเกี่ยวกับวิธีเลือกเกณฑ์ด้านบนซึ่งคุณสมบัติใดมีประโยชน์บ้าง (วางห่างจากการลบคุณลักษณะที่มีประโยชน์น้อยที่สุดให้รัน RF อีกครั้งและดูว่ามันส่งผลต่อประสิทธิภาพการทำนายอย่างไร)
Franck Dernoncourt

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