java矩阵传递给r,当y是r中的指标矩阵时,如何进行多元线性回归?

我终于想出了如何用分类y进行多元线性回归 . 首先,我们需要将y转换为指标矩阵,然后我们可以将此矩阵中的0和1解释为概率 . 然后在x上回归y以构建线性模型,最后使用此线性模型来预测x的测试集 . 结果是一个与指标矩阵具有相同维度的矩阵 . 并且所有条目也应该被解释为概率,尽管它们可能大于1或小于0(这就是为什么它之前让我感到困惑) . 因此,我们需要找到每行的最大数量,以查看哪个预测的y具有最高概率,并且这个y将是我们的最终预测 . 通过这种方式,我们可以将连续数字转换回类别,然后创建一个表格来与y的测试集进行比较 . 所以我更新了我以前的代码如下 .

首先,我构建了子集,这些响应变量等于2,3,5和8(代码保持与我在我的问题中发布的相同):

zip_train

zip_test

train

train_sub

test

test_sub

xtrain

xtest

ytrain

ytest

其次,我将X矩阵居中,并使用eigen()计算前3个主成分 . 我更新了这部分代码,因为我将x标准化而不是将其置于我之前的代码中,导致x的协方差矩阵和cov(x)的特征向量的错误计算 .

cxtrain

eigenxtrain

cxtest

eigenxtest

r=3 # set r=3 to get top 3 principles

vtrain

ztrain

vtest

ztest

第三,我将响应变量转换为指标矩阵,并对训练集进行多元线性回归 . 然后使用此线性模型进行预测 .

ytrain.ind

ytest.ind

mydata

model_train

new

pred

pred是一个包含所有概率条目的矩阵,因此我们需要将其转换回分类y的列表 .

pred.ind

for (i in 1:690){

j=which.max(pred[i,]) # j is the column number of the highest probability per row

pred.ind[i,j]=1 # we set 1 to the columns with highest probability per row, in this way, we could turn our pred matrix back into an indicator matrix

}

pred.col1=as.matrix(pred.ind[,1]*2) # first column are those predicted as digit 2

pred.col2=as.matrix(pred.ind[,2]*3)

pred.col3=as.matrix(pred.ind[,3]*5)

pred.col4=as.matrix(pred.ind[,4]*8)

pred.col5

pred.list

for (i in 1:690){

pred.list[i]=max(pred.col5[i,])

} # In this way, we could finally get a list with categorical y

tt=table(pred.list,ytest)

err=(sum(tt)-sum(diag(tt)))/sum(tt) # error rate was 0.3289855

对于第三部分,我们也可以执行多项逻辑回归 . 但是通过这种方式,我们不需要将y转换为指标矩阵,我们只考虑它 . 所以代码如下所示:

library(nnet)

trainmodel

mul

new

colnames(new)

predict

tt=table(predict,ytest)

err=(sum(tt)-sum(diag(tt)))/sum(tt) # error rate was 0.2627907

因此,它表明逻辑模型确实比线性模型表现更好 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值