计算预测误差的自助法、.632估计

自助法是一种很好用的再抽样的方法,再数据量较小时可以起到很好的效果。假设你有n个数据作为样本,当使用自助法时,你需要从原有的数据中抽取k组,每组n个数据构成,构成新的样本,n组数据中每组数据都是重复抽样。再利用新获得的k组数据分别拟合模型,计算每组数据拟合出的模型的估计误差。具体的公式可以参考人大出版的大数据挖掘与统计机器学习,这里不赘述。
因为在自助法抽样中,原始的训练集中的某个样本点可能多次出现也可能一次都不出现,当样本足够大时每个样本点出现在第i组的概率约为0.632.
在这里插入图片描述
接下来给出具体代码:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression 
import random

#产生随机数(重复抽样)
def dataint(down,up,k):
    data=[]
    for i in range(k):
        temp = random.randint(down, up)
        data.append(temp)
    return data
collect=np.zeros((100,97))
for i in range(100):
    collect[i,:]=dataint(0,97,97)
    



dt=pd.read_csv('C:/Users/Admin/Desktop/big data/prostate.csv',header = 0)
dt1=dt.loc[:,['lcavol','lweight','svi']]
linreg = LinearRegression()

#定义函数计算err,cv
def L (data,testloc):
    model=linreg.fit(data.loc[:,['lcavol','lweight','svi']], data.loc[:,'lpsa'])
    cv=sum((model.predict(data.loc[:,['lcavol','lweight','svi']])-np.asarray(data.loc[:,'lpsa']))**2)
    pred=model.predict(testloc.loc[:,['lcavol','lweight','svi']])
    err=np.mean((testloc.loc[:,'lpsa']-pred)**2)
    return cv,err

MLC=[]
errs=[]

for i in range(100):
    LC=0
    notuse=[]
    for j in range(97):
        if j not in collect[i,:]:
            notuse.append(j)
    LC=L(data=dt,testloc=dt.loc[(notuse),['lcavol','lweight','svi','lpsa']])[0]
    MLC.append(LC/len(notuse))
    errs.append(L(data=dt,testloc=dt.loc[(notuse),['lcavol','lweight','svi','lpsa']])[1])
err=sum(MLC)/97
ERR1=np.mean(errs)
print(0.368*err+0.632*ERR1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值