R语言如何利用标签y和均值矩阵z分配class specific means
R语言习题实现方案:类别均值分配与线性可分验证
1 基础变量生成
先按照习题要求正确生成所有核心变量,修正你之前x的维度错误:
# 生成300行2列的标准正态随机矩阵 x <- matrix(rnorm(300*2), ncol = 2) # 生成类别标签:1、2、3各重复100次 y <- rep(1:3, each = 100) # 生成3个类别的2维均值矩阵 z <- matrix(c(0,0,3,0,3,0), nrow = 3, ncol = 2)
2 类别均值分配
你需要的操作可以通过R的矩阵索引特性一行实现:用类别标签y作为z的行索引,就能自动匹配每个样本对应的类别均值,再叠加到原始随机矩阵x上即可:
# 给每个样本叠加对应类别的均值偏移 x_adjusted <- x + z[y, ]
原理说明:z[y, ]会根据y中每个位置的类别取值,提取z中对应行的均值向量,最终输出和x完全同维度的300行2列矩阵,相加后就完成了不同类别的均值分配。
3 分布绘制与线性可分验证
用R基础绘图函数即可快速可视化三类数据的分布:
# 绘制散点图,不同类别用不同颜色标记 plot(x_adjusted, col = y, pch = 16, xlab = "第一维度", ylab = "第二维度", main = "三类样本分布") # 添加图例 legend("topleft", legend = c("类别1", "类别2", "类别3"), col = 1:3, pch = 16)
结果说明
你定义的均值矩阵z中,类别2和类别3的均值完全一致,最终生成的样本中这两类会完全重叠,三类数据不具备线性可分性。
内容的提问来源于stack exchange,提问作者ambrosianium
相关产品推荐
相关产品推荐

