【第一種】方法
def splitData(data,seed,m,k):
#將數據分成訓練集和測試集,每次指定seed,更換K,重複M次,防止過擬合.
test=[]
train=[]
#random.seed(seed),指定seed的話,每次後面的隨機數產生的都是一樣的順序
np.random.seed(seed)
for user,item in data.items():
#隨機數產生順序一樣,隨機產生(0,m)之間的數,只有一個可以分給測試集,另外的m-1都分給訓練集
if np.random.randint(0,m)==k:
test.append([user,item])
else:
train.append([user,item])
return test,train
test,train=splitData(data,5,7,5)
print(len(test))
print(len(train))
【結果】
【第二種劃分數據集方式】
直接調用sklearn包,簡直不要太方便,pip安裝下載就好了,如果缺少scipy包,用pip再安裝下載
完了,就直接調用train,test,train_label,test_lable=
train_test_split(ratings[['user_id','movies_id']],range(len(ratings)),test_size=7/8)
參數:數據集,數據集標籤,test_size的值如果介於0-1之間就是劃分比例,如果是整數就是樣本數
返回值:訓練集,訓練集標籤,測試集,測試集標籤
def splitData(data,seed,m,k):
#將數據分成訓練集和測試集,每次指定seed,更換K,重複M次,防止過擬合.
test=[]
train=[]
#random.seed(seed),指定seed的話,每次後面的隨機數產生的都是一樣的順序
np.random.seed(seed)
for user,item in data.items():
#隨機數產生順序一樣,隨機產生(0,m)之間的數,只有一個可以分給測試集,另外的m-1都分給訓練集
if np.random.randint(0,m)==k:
test.append([user,item])
else:
train.append([user,item])
return test,train
test,train=splitData(data,5,7,5)
print(len(test))
print(len(train))