自動交叉驗證
train-test split 和 fit() 方法
訓練整個資料集和predict()方法
排個雷:evaluate()方法在1.0.5版本中已經棄用(功能上已由取代model_selection().cross_validate),並在1.1.0中刪除(你要看一下你現在安裝的版本)。
surprise有一套內建的演算法和資料集供您使用。在最簡單的形式中,只需幾行**即可執行交叉驗證程式:
import surprise
from surprise import svd
from surprise import dataset
# evaluate()方法在1.0.5版本中已經棄用(功能上已由取代model_selection().cross_validate),並在1.1.0中刪除(你要看一下你現在安裝的版本)。
from surprise.model_selection import cross_validate
data = dataset.load_builtin(name=
'ml-100k'
)# movielens 資料集
# 假設使用svd矩陣分解
algo = svd(
)#執行5倍交叉驗證並列印結果
cross_validate(algo, data, measures=
['rmse'
,'mae'
], cv=
5, verbose=
true
)
**執行結果:由於隨機化,結果可能有差別。
fold 1 fold 2 fold 3 fold 4 fold 5 mean std
rmse (testset)
0.9332
0.9367
0.9360
0.9396
0.9363
0.9364
0.0020
mae (testset)
0.7360
0.7372
0.7376
0.7394
0.7385
0.7378
0.0012
fit time 6.48
6.84
8.08
6.43
6.50
6.87
0.63
test time 0.23
0.26
0.25
0.23
0.21
0.24
0.02
我們在這裡用的是svd演算法,但許多其他演算法是可用的。
這個cross_validate()函式根據cv引數,並計算accuracy措施。我們在這裡使用的是經典的5倍交叉驗證,但是可以使用更好的迭代器。
如果不希望執行完整的交叉驗證過程,則可以使用train_test_split()若要示例具有給定大小的培訓集和測試集,請使用accuracy metric你的選擇。您需要使用fit()方法,該方法將在訓練集上訓練演算法,以及test()方法,該方法將返回從測試集所作的**:
from surprise import svd
from surprise import dataset
from surprise import accuracy
from surprise.model_selection import train_test_split
data = dataset.load_builtin(
'ml-100k'
)# movielens 資料集
# 隨機測試集和訓練集
# 將25%的資料設定為測試集
trainset, testset = train_test_split(data, test_size=
.25)
# 使用svd矩陣分解
algo = svd(
)# 在訓練集中訓練演算法,並在測試集中**
algo.fit(trainset)
predictions = algo.test(testset)
'''# 可以使用下面這行**來訓練和測試演算法
predictions = algo.fit(trainset).test(testset)
'''# 計算 rmse
accuracy.rmse(predictions)
計算得到的結果是:
rmse:
0.9425
可能每次執行得到的結果不太一樣,前面已經講過了。
我們可以簡單的將演算法與整個資料集相匹配,而不是執行交叉驗證。可以用build_full_trainset()構建trainset物件方法實現:
from surprise import knnbasic
from surprise import dataset
data = dataset.load_builtin(
'ml-100k'
)# movielens 資料集
# retrieve the trainset.
# 訓練集
trainset = data.build_full_trainset(
)# 構建演算法並訓練
algo = knnbasic(
)algo.fit(trainset)
# 確保這兩個在訓練集中,並且真實值為4
uid =
str(
196)
# 使用者
iid =
str(
302)
# 物品
# 獲取特定使用者和物品的**
pred = algo.predict(uid, iid, r_ui=
4, verbose=
true
)
執行結果:
user:
196 item:
302 r_ui =
4.00 est =
4.06
其中est是**值
本文講解的都是內建的資料集,也可以使用自己的資料集,將在下文講解。
學做事,先學做人
經理很關照我,我很感謝經理。其實,有乙個好的領導,只要好好幹,他是一定會知道的。但是,要改變客戶的看法,看來還真的很難。在客戶面前不可以太謙虛,太過謙虛,他們反覺得我們無能。做事先做人,一點都沒錯啊。感覺自己太嫩了,這一切還得慢慢磨練。希望多看數,多學習,多仔細觀察生活,觀察周圍成功的人,不斷提高自...
B 學密碼學真的得學程式
b 學密碼學真的得學程式 time limit 1000msmemory limit 65536kb64bit io format lld llu submit status practice sdutoj 2464 description 話說,上次zyj同學最終在眾位瑪麗亞的幫助下搞定了那個神奇...
學密碼學一定得學程式
time limit 1000ms memory limit 65536k 曾經,zyj同學非常喜歡密碼學。有一天,他發現了乙個很長很長的字串s1。他很好奇那代表著什麼,於是神奇的wl給了他另乙個字串s2。但是很不幸的是,wl忘記跟他說是什麼意思了。這個時候,zyj不得不求助與偉大的zp。zp笑了笑...