12机器学习模型可信度
是否检验模型的指标好就一定说明模型可用?不是,必须得保证训练的样本和整天基本满足同一分布。
统计学习和机器学习区别:统计学习是根据样本模拟总体规律进而去预测(当然要比对样本和总体的统计量是否一致,),而机器学习则会取不同阶段的数据分别做训练集和验证集,不涉及整体。可见机器学习的检验过程更简单。
介绍了如何切分训练集和测试集的code
首先介绍vsplit函数,它可以将数组按行切分
a=np.arange(10).reshape(5,2)
np.vsplit(a,[4,])
得到结果:1——4行一个数组,第5行一个数组
再写数据集切分函数
def array_split(features,labels,rate=0.7,random_state=24):
np.random.seed(random_state)
np.random.shuffle(features)
np.random.seed(random_state)
np.random.shuffle(labels)#总数据量,用来算要在多少个数据处划分
num_input=len(labels)
split_indices=int(num_input*rate)
xtrain,xtest=np.vsplit(features,[split_indices,])
ytrain,ytest=np.vsplit(labels,[split_indices,])
return xtrain,xtest,ytrain,ytest
#测试上述函数:
f=np.arange(10).reshape(-1,1)
l=np.arange(1,11).reshape(-1,1)
array_split(f,l)
发现测试结果确实是对应切分的。
训练集、验证集、测试集:训练集调参,验证集调超参,测试集严格不能带入模型训练中。如果想进一步提升参数准确度,还可用交叉验证。
13逻辑回归与多分类
广义线性模型:在线性模型两侧加函数,使得它能捕捉更一般的规律
一个小技巧:在x后面加一列1可以方便后续求出截距项
几率与对数几率:
而对于y=wTx,如果将左侧调整为lny/(1-y)则变为对数几率模型
逻辑回归的输出y是否是概率?
如果自变量的分布通过检验,则为概率
14多分类学习
两种思路:将逻辑回归改为多分类形式/将二分类学习器推广到多分类情况中
总体思路:先拆分后集成,即先将数据集拆分成读个、训练多个模型,后续进来的数据用这多个模型进行预测。一般分为三类方法:一对一(OvO)、一对剩余(OvR)和多对多(MvM)
OvO:
把同一分类的变量作为一个集合,然后两两组合
融合:根据每个分类器的结果按照少数服从多数的原则融合
OvR:每次将一类样例作为正例,其余作为反例,训练四个分类器
融合:若仅有一个分类器将新数据预测为正例,则属于它;如果有多个将新数据预测为正例,则选择概率最高的那个分类结果。
两者比较:OvO由于每个数据集更小,因此整体训练时间较短;性能方面两者类似。
MvM:
思路:将任意1/2/3。。。类作为正类,其余作为父类,穷尽所有划分方法,然后挑选几个
融合:根据四个子模型算出新数据编码,然后看离哪个的距离最近
距离计算采用闵可夫斯基距离,公式为
Python实现:
def dist(x,y,cat=2):#cat表示计算几次方的距离
d1=np.abs(x-y)
if x.ndim>1 or y.ndim>1:#这个if为了防止一个数组有多行,要按行求和
res1=np.power(d1,cat).sum(1)#按行求和,power是算几次方
else:
res1=np.power(d1,cat).sum()
res=np.power(res1,1/cat)
return res
测试:
x=np.array([1,2])
y=np.array([[2,3],[4,5]])
dist(x,y)
结果:
array([1.41421356, 4.24264069])