ฉันกำลังใช้ตัวจำแนกประเภทฟอเรสต์แบบสุ่มของ scikitและฉันต้องการพล็อตความสำคัญของคุณลักษณะเช่นในตัวอย่างนี้
อย่างไรก็ตามผลลัพธ์ของฉันแตกต่างอย่างสิ้นเชิงในแง่ที่ความสำคัญของความเบี่ยงเบนมาตรฐานสำคัญมักจะใหญ่กว่าความสำคัญของคุณสมบัติ (ดูรูปที่แนบมา)
เป็นไปได้ไหมที่จะมีพฤติกรรมเช่นนี้หรือฉันทำผิดพลาดบางอย่างเมื่อวางแผนมัน?
รหัสของฉันคือ:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(predictors.values, outcome.values.ravel())
importance = clf.feature_importances_
importance = pd.DataFrame(importance, index=predictors.columns,
columns=["Importance"])
importance["Std"] = np.std([tree.feature_importances_
for tree in clf.estimators_], axis=0)
x = range(importance.shape[0])
y = importance.ix[:, 0]
yerr = importance.ix[:, 1]
plt.bar(x, y, yerr=yerr, align="center")
plt.show()
pandas DataFrame
ที่มีรูปร่างและm x n
m x 1
มันควรจะชัดเจนในขณะนี้
tsfresh
ที่ช่วยให้ฉันระบุคุณสมบัติที่เกี่ยวข้องและลดฟีเจอร์ของฉันจาก 600+ เป็น 400 !! [คุณสมบัติ 35 อันดับแรกของฉัน ] ( i.stack.imgur.com/0MROZ.png ) แม้อัลกอริทึมนี้จะทำงานได้ดี สำหรับฉัน. ฉันมีการจำแนกประเภทไบนารีสำเร็จ / ล้มเหลว ฉันไม่ได้รับความสำเร็จที่ผิดพลาด แต่ฉันพลาดความสำเร็จไปได้ร้อยเปอร์เซ็นต์ การเดาทั้งหมดข้างต้นดูเหมือนสมเหตุสมผล อาจเป็นกรณีที่ต้องมีชุดฝึกอบรมและทดสอบที่ใหญ่กว่า ฉันมีน้อยลง
predictors
ผลตอบแทนnumpy array
ที่คุณจะอ้างอิงไปยังpandas Dataframe
วัตถุตามคอลัมน์มันซึ่งไม่ถูกต้องตามที่ไม่ได้มีแอตทริบิวต์numpy arrays
columns