机器学习 - 手动实现留出法

留出法 (hold-out)

  • 通常训练集和测试集的比例可以为 7 : 3 或者 8 : 2
  • 训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据集在划分过程中引入额外偏差而对最终结果产生影响。
  • 对打乱样本集的数据重新进行划分,模型评估的结果往往也会不相同,所以需要对样本集进行若干次随机划分,重复实验取平均值,避免单次使用这方法带来的不稳定性。

实现代码如下:

from sklearn.datasets import load_iris
from random import shuffle 

iris = load_iris()

data = iris.data 
target = iris.target 

dict_class = {}

for index in range(len(target)):
    if target[index] in dict_class:
        dict_class[target[index]].append(index)
    else:
        dict_class[target[index]] = [index]

for key in dict_class.keys():
    shuffle(dict_class[key])

test_ratio = 0.3 
x_train, y_train = [], []
x_test, y_test = [], []

for key, value in dict_class.items():
    list_train_value = dict_class[key]
    list_train_index = list_train_value[:int((1.0 - test_ratio) * len(value))]

    list_test_value = dict_class[key]
    list_test_index = list_test_value[int((1.0 - test_ratio) * len(value)):]

    for index_c in list_train_index:
        x_train.append(data[index_c])
        y_train.append(target[index_c])
    
    for index_c in list_test_index:
        x_test.append(data[index_c])
        y_test.append(target[index_c])


print("x_train ratio: {0:.2f}".format(len(x_train) / (len(x_train) + len(x_test))))
print("x_test ratio: {0:.2f}".format(len(x_test) / (len(x_train) + len(x_test))))

print("y_train ratio: {0:.2f}".format(len(y_train) / (len(y_train) + len(y_test))))
print("y_test ratio: {0:.2f}".format(len(y_test) / (len(y_train) + len(y_test))))

结果如下:

x_train ratio: 0.70
x_test ratio: 0.30
y_train ratio: 0.70
y_test ratio: 0.30

都看到这,点个赞支持一下咯~

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值