Pandas Dataframe ถึง DMatrix


14

ฉันพยายามเรียกใช้ xgboost ใน scikit เรียนรู้ และฉันใช้ Pandas เพื่อโหลดข้อมูลไปยังดาต้าเฟรม ฉันควรจะใช้แพนด้า df กับ xgboost อย่างไร ฉันสับสนกับชุดคำสั่ง DMatrix ที่จำเป็นในการเรียกใช้ xgboost algo

คำตอบ:


21

คุณสามารถใช้.valuesวิธีการของ dataframe เพื่อเข้าถึงข้อมูลดิบเมื่อคุณจัดการคอลัมน์ตามที่คุณต้องการ

เช่น

train = pd.read_csv("train.csv")
target = train['target']
train = train.drop(['ID','target'],axis=1)
test = pd.read_csv("test.csv")
test = test.drop(['ID'],axis=1)

xgtrain = xgb.DMatrix(train.values, target.values)
xgtest = xgb.DMatrix(test.values)

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


เมื่อลองด้วยวิธีนี้xgb.DMatrix(X_train.values, y_train.values)ฉันเห็นTypeError: can not initialize DMatrix from dict
javadba

@javadba: มันทำงานได้ดีในปี 2559 กับ mcahine ของฉัน! ฉันไม่สามารถทดสอบได้ในขณะนี้เนื่องจากฉันไม่สามารถติดตั้ง xgboost ได้ เป็นไปได้ว่ารหัสห้องสมุดบางส่วนมีการเปลี่ยนแปลง มีแนวโน้มที่จะมีสิ่งที่แตกต่างเกี่ยวกับสถานการณ์ของคุณ ฉันพบstackoverflow.com/questions/35402461/ …แต่แนะนำให้คุณทำสิ่งที่คำตอบนี้ (เช่นใช้.values)
Neil Slater


7

ตอนนี้คุณสามารถใช้ Pandas DataFrames โดยตรงกับ XGBoost ทำงานได้อย่างสมบูรณ์กับ xgboost 0.81

ตัวอย่างเช่นที่ X_train, X_val, y_train และ y_val เป็น DataFrames:

import xgboost as xgb

mod = xgb.XGBRegressor(
    gamma=1,                 
    learning_rate=0.01,
    max_depth=3,
    n_estimators=10000,                                                                    
    subsample=0.8,
    random_state=34
) 

mod.fit(X_train, y_train)
predictions = mod.predict(X_val)
rmse = sqrt(mean_squared_error(y_val, predictions))
print("score: {0:,.0f}".format(rmse))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.