我有一個資料result框,我預測使用 XGBoost(所有必要的匯入都已完成,我不會再寫它們了):
studentId testId result Length Words picture
s1 t1 0 10 8.50 0
s1 t2 0 11 9.80 1
s1 t3 1 11 10.40 1
s2 t2 0 11 9.80 1
s2 t4 1 60 9.99 0
s3 t7 1 40 6.45 0
cols_to_drop = ['testId', 'studentId']
df.drop(cols_to_drop, axis=1, inplace=True)
X = df.drop('result', axis=1)
y = df['result']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=5)
model = XGBClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
我有這個資料幀的一部分,我也可以result使用不同的方式預測它surprise,而不是使用上述所有功能:
studentId testId result
s1 t1 0
s1 t2 0
s1 t3 1
s2 t2 0
s2 t4 1
s3 t7 1
reader = Reader(rating_scale=(0, 1))
data = Dataset.load_from_df(df_small[['studentId', 'testId', 'result']], reader)
trainset, testset = train_test_split(data, test_size=0.25)
algo = KNNWithMeans()
algo.fit(trainset)
test = algo.test(testset)
test = pd.DataFrame(test)
test.drop("details", inplace=True, axis=1)
test.columns = ['userId', 'questionId', 'actual', 'cf_predictions']
現在,我想創建一個模型,將兩者結合起來并為每個模型分配不同的權重。我試著把上面的東西寫成函式,然后把所有東西都寫成一個大函式:
def model_1(df):
cols_to_drop = ['testId', 'studentId']
new_df=df.drop(cols_to_drop, axis=1, inplace=True)
X = new_df.drop('result', axis=1)
y = new_df['result']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=5)
model = XGBClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
return y_test, y_pred
def model_2(df):
reader = Reader(rating_scale=(0, 1))
data = Dataset.load_from_df(df[['studentId', 'testId', 'result']], reader)
trainset, testset = train_test_split(data, test_size=0.25)
algo = KNNWithMeans()
algo.fit(trainset)
test = algo.test(testset)
test = pd.DataFrame(test)
test.drop("details", inplace=True, axis=1)
test.columns = ['studentId', 'testId', 'actual', 'cf_predictions']
return test
def merged_models(df):
first_model = model_1(df)
second_model = model_2(df)
prediction = 0.5 * first_model 0.5 * second_model # weights example
return prediction
前兩個有效,但merged_models(df)甚至無法申請,model_1因為AttributeError: 'NoneType' object has no attribute 'drop'在X = new_df.drop('result', axis=1). 代碼可能是一團糟,但是有沒有辦法將這兩種不同的模型結合起來并能夠評估這種“混合”?
uj5u.com熱心網友回復:
df.dropinplace設定為時不回傳任何內容True。它就地修改 DataFrame 并回傳None. 您無需為它們創建新名稱。
uj5u.com熱心網友回復:
正如@TimRoberts 指出的那樣,new_df.dropwithinplace=True不回傳任何內容(換句話說,回傳None)。您可以離開inplace=False,也可以不重新分配給new_df。
這將起作用:
new_df = df.drop(cols_to_drop, axis=1)
這也是:
new_df = df.copy()
new_df.drop(cols_to_drop, axis=1, inplace=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366340.html
下一篇:Pandasdf交換列值
