第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 cross_val_predict 與 cross_val_score 時(shí)

使用 cross_val_predict 與 cross_val_score 時(shí)

森欄 2022-12-27 15:25:03
我預(yù)計(jì)這兩種方法都會(huì)返回相當(dāng)相似的錯(cuò)誤,有人可以指出我的錯(cuò)誤嗎?計(jì)算均方根誤差...rf = RandomForestRegressor(random_state=555, n_estimators=100, max_depth=8)rf_preds = cross_val_predict(rf, train_, targets, cv=7, n_jobs=7) print("RMSE Score using cv preds: {:0.5f}".format(metrics.mean_squared_error(targets, rf_preds, squared=False)))scores = cross_val_score(rf, train_, targets, cv=7, scoring='neg_root_mean_squared_error', n_jobs=7)print("RMSE Score using cv_score: {:0.5f}".format(scores.mean() * -1))RMSE Score using cv preds: 0.01658RMSE Score using cv_score: 0.01073
查看完整描述

1 回答

?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

這里有兩個(gè)問題,在文檔中都有提到cross_val_predict

結(jié)果可能與和 不同cross_validate,cross_val_score除非所有測(cè)試集都具有相同的大小并且度量在樣本上分解。

首先是使所有集合(訓(xùn)練和測(cè)試)在兩種情況下都相同,這在您的示例中并非如此。為此,我們需要使用該kfold方法來定義我們的 CV 折疊,然后在兩種情況下都使用這些相同的折疊。這是一個(gè)帶有虛擬數(shù)據(jù)的示例:

from sklearn.datasets import make_regression

from sklearn.model_selection import KFold, cross_val_score, cross_val_predict

from sklearn.ensemble import RandomForestRegressor

from sklearn.metrics import mean_squared_error


X, y = make_regression(n_samples=2000, n_features=4, n_informative=2,

                      random_state=42, shuffle=False)


rf = RandomForestRegressor(max_depth=2, random_state=0)

kf = KFold(n_splits=5)


rf_preds = cross_val_predict(rf, X, y, cv=kf, n_jobs=5) 

print("RMSE Score using cv preds: {:0.5f}".format(mean_squared_error(y, rf_preds, squared=False)))


scores = cross_val_score(rf, X, y, cv=kf, scoring='neg_root_mean_squared_error', n_jobs=5)

print("RMSE Score using cv_score: {:0.5f}".format(scores.mean() * -1))

上面代碼片段的結(jié)果(完全可重現(xiàn),因?yàn)槲覀円呀?jīng)明確設(shè)置了所有必要的隨機(jī)種子)是:


RMSE Score using cv preds: 15.16839

RMSE Score using cv_score: 15.16031

所以,我們可以看到這兩個(gè)分?jǐn)?shù)確實(shí)相似,但仍然不完全相同。


這是為什么?答案在于上面引用的句子中相當(dāng)隱秘的第二部分,即 RMSE 分?jǐn)?shù)不會(huì)分解樣本(老實(shí)說,我不知道它分解的任何 ML 分?jǐn)?shù))。


簡(jiǎn)單來說,whilecross_val_predict嚴(yán)格按照其定義計(jì)算RMSE,即(偽代碼):


RMSE = square_root([(y[1] - y_pred[1])^2 + (y[2] - y_pred[2])^2 + ... + (y[n] - y_pred[n])^2]/n)

樣本數(shù)量在哪里n,該cross_val_score方法并沒有完全做到這一點(diǎn);它所做的是為每個(gè)kCV 折疊計(jì)算 RMSE,然后對(duì)這些k值進(jìn)行平均,即(再次偽代碼):


RMSE = (RMSE[1] + RMSE[2] + ... + RMSE[k])/k

正是因?yàn)?RMSE 不可分解樣本,這兩個(gè)值雖然接近,但并不相同。


我們實(shí)際上可以通過手動(dòng)執(zhí)行 CV 程序并模擬 RMSE 計(jì)算來證明確實(shí)如此,如上文cross_val_score所述,即:


import numpy as np

RMSE__cv_score = []


for train_index, val_index in kf.split(X):

    rf.fit(X[train_index], y[train_index])

    pred = rf.predict(X[val_index])

    err = mean_squared_error(y[val_index], pred, squared=False)

    RMSE__cv_score.append(err)


print("RMSE Score using manual cv_score: {:0.5f}".format(np.mean(RMSE__cv_score)))

結(jié)果是:


RMSE Score using manual cv_score: 15.16031

即與cross_val_score上面返回的相同。


所以,如果我們想要非常精確,事實(shí)是正確的 RMSE(即完全根據(jù)其定義計(jì)算)是cross_val_predict; cross_val_score返回它的近似值。但是在實(shí)踐中,我們往往會(huì)發(fā)現(xiàn)區(qū)別并不那么顯著,所以cross_val_score如果方便的話我們也可以使用。


查看完整回答
反對(duì) 回復(fù) 2022-12-27
  • 1 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)