当前位置: 首页 > 知识库问答 >
问题:

为无监督学习生成合成数据

皇甫文乐
2023-03-14

我想为随机森林的无监督学习准备数据。程序如下:

  • 获取数据并将值为1的属性“class”添加到所有示例
  • 从原始数据生成合成数据:<ul>
  • 虽然您没有原始数据构建示例中的示例数量:<ul>
  • 从原始数据中该属性的所有值中采样新属性值
  • 对所有属性执行此操作,并将它们组合到新示例中

最后它看起来像这样:

        ...      Class
                |1
     Original   |1
     Data       |1
                |1
    --------------
                |2
     Synthetic  |2
     Data       |2
                |2

我的R代码如下:

library(gtools) #for smartbind()

sample1 <- function(X)   { sample(X, replace=T) } 
g1      <- function(dat) { apply(dat,2,sample1) }

data$class <- rep(1, times=nrow(data)) #add attribute 'class' with value 1

synthData<-data.frame(g1(data[,1:ncol(data)])) #generate synthetic data with sampling from data
synthData$class <- rep(2, times=nrow(synthData)) #attribute 'class' is 2
colnames(synthData) <- colnames(data)
newData <- smartbind(data, synthData) #bind the data together

很明显,我对R很陌生,但它是有效的——只有一个问题:合成数据中的属性类型与原始数据中的不同。如果在原始数据中它们是数字,现在它们变成了因子。我如何在生成合成数据时保留相同的类型?

谢谢!

数据1(nums变为因子):

结构(列表(V2=c(1.51793、1.51711、1.51645、1.51916、1.51131),V3=c(13.21、12.89、13.44、14.15、13.69),V4=c(3.48、3.62、3.61、0、3.2),V5=c(1.41、1.57、1.54、2.09、1.81),V6=c(72.64、72.96、72.39、72.74、72.81),V7=c(0.59、0.61、0.66、0、1.76),V8=c(8.43、8.11、8.03、10.88、5.43),V9=c(0,0,0、0,1.19),V10=c(0、0、0和0),realClass=结构(c(1L、2L、2L、5L、6L),.标签=c(“1”、“2”、“3”、“5”、“6”、“7”),class=“factor”),.名称=c(”V2“、”V3“、”V4“、”V5“、”V6“、”V7“、”V8“、”V9“、”V10“、“realClass”),行。名称=c(27L、138L、77L、183L、186L),class=“data.frame”)

数据2(因子变为chrs):

结构(列表(realClass=结构(c(2L,2L,1L,2L),.Label=c(“e”,“p”),class=“factor”),V2=结构(c(6L,3L,4L,6L,6L,6L),.LLabel=c(”b“,”c“,”f“,”k“,”s“,”x“),class=”factor“),V3=结构),class=“factor”),V4=结构(c(5L,5L,3L,4L),.Label=c(“b”,“c”,“e”,“g”,“n”,“p”,“r”,“u”,“w”,“y”),class=“factor”),V5=结构(c(1L,1L,2L,2L,1L),.Label=c(“f”,“t”),class=“factor”),V6=结构(c(3L,9L,3L,6L,3L),.Rabel=c a“,”f“),class=“因子”),V8=结构(c(1L,1L,2L,1L,1L),.标签=c(“c”,“w”),class=”因子“),V9=结构(c(2L,2L,1L,1L,1L),.标签=c(“b”,“n”),class=“因子”),V10=结构(c(1L,4L,1LL,1L、10L,4L),.Label=c(“b”,“e”,“g”,“h”,“k”,“n”,“o”,“p”,“r”,“u”,“w”,“y”),class=“因子“),V11=结构),.Label=c(“e”,“t”),class=“factor”),V12=结构(c(NA,NA,1L,1L),.LLabel=c(”b“,”c“,”e“,”r“),class=”factor“),V13=结构(c(3L、2L、3L、3L、2L),.标签=c(“f”、“k”、“s”、“y”),class=“factor”),V14=结构(c(3L,3L,2L,3L,2L)n”,“o”,“p”,“w”,“y”),class=“factor”),V16=结构(c(7L,7L,8L,4L,1L),.标签=c(“b”,“c”,“e”,“g”,“n”,class=“factor”),V17=结构(c(1L,1L,2L,1L,1L),.Label=“p”,class=“factor”),V18=结构(c(3L,3L,3L,3L),.Label=c(“n”,“o”,“w”,“y”),class=“factor”)c(1L,1L,2L,5L,3L),.标签=c(“e”,“f”,“l”,“n”,“p”),class=“factor”),V21=结构(c(8L、8L、7L、4L、2L),.标签=c(“b”、“h”、“k”、“n”、“o”、“r”、“u”、“w”、“y”),class=“因子”),V22=结构(c(5L、5L、5L、5L和6L),。标签=c,.标签=c(“d”,“g”,“l”,“m”,“p”,“u”,“w”),class=“factor”)),.Names=c(“realClass”、“V2”、“V3”、“V4”、“V5”、“V6”、“V7”、“V8”、“V9”、“V10”、”V11“、”V12“、“V13”、“V14”、“V15”、“V1 6”、“V27”、“V38”、“V49”、”V20“、”V21“、“V22”、“V23”),行。名称=c(4105L、6207L、6696L、2736L、3756L),class=“data.frame”)

共有1个答案

闽涵蓄
2023-03-14

您可以始终使用此技巧来设置数字列

numcol <- as.numeric(as.character(factcol))

但是我怀疑你的data.frame中有factor变量。因为< code>apply返回一个矩阵,如果你的数据中有一个factor,那么所有的数值变量也会被强制为factor。

这是一个例子,使用玩具数据集

set.seed(123)
toydat <- data.frame(A = 1:10, B = rnorm(10), C = LETTERS[1:10])
str(toydat)

## 'data.frame':    10 obs. of  3 variables:
##  $ A: int  1 2 3 4 5 6 7 8 9 10
##  $ B: num  -0.5605 -0.2302 1.5587 0.0705 0.1293 ...
##  $ C: Factor w/ 10 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10

set.seed(1)
str(data.frame(apply(toydat[,1:2], 2, sample, replace = TRUE)))

## 'data.frame':    10 obs. of  2 variables:
##  $ A: num  3 4 6 10 3 9 10 7 7 1
##  $ B: num  1.5587 -0.2302 0.4609 0.0705 -1.2651 ...

# with the factor column C     
set.seed(2)
str(data.frame(apply(toydat[,1:3], 2, sample, replace = TRUE)))

## 'data.frame':    10 obs. of  3 variables:
##  $ A: Factor w/ 6 levels "10"," 2"," 5",..: 2 5 4 2 1 1 2 6 3 4
##  $ B: Factor w/ 8 levels " 0.129288","-0.230177",..: 8 7 6 2 1 5 3 7 1 4
##  $ C: Factor w/ 6 levels "B","D","E","G",..: 4 2 5 1 2 3 1 2 6 1

这就是 plyr 包变得有用的地方,因为您可以控制输出(使用 **ply)。但在这种情况下,共行函数就足够了

require(plyr)
set.seed(2)
mysamplingfun <- colwise(function(x) sample(x, replace = TRUE))
str(mysamplingfun(toydat[,1:3]))

## 'data.frame':    10 obs. of  3 variables:
##  $ A: int  2 8 6 2 10 10 2 9 5 6
##  $ B: num  1.715 1.559 -1.265 -0.23 0.129 ...
##  $ C: Factor w/ 10 levels "A","B","C","D",..: 7 4 9 2 4 5 2 4 10 2
 类似资料:
  • 本文向大家介绍监督学习和无监督学习的区别相关面试题,主要包含被问及监督学习和无监督学习的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 输入的数据有标签则为监督学习,输入数据无标签为非监督学习。

  • 2.1. 高斯混合模型 2.1.1. 高斯混合 2.1.1.1. 优缺点 GaussianMixture 2.1.1.1.1. 优点 2.1.1.1.2. 缺点 2.1.1.2. 选择经典高斯混合模型中分量的个数 2.1.1.3. 估计算法期望最大化(EM) 2.1.2. 变分贝叶斯高斯混合 2.1.2.1. 估计算法: 变分推断(variational inference) 2.1.2.1.1.

  • 聚类和降维:K-Means 聚类,层次聚类,主成分分析(PCA),奇异值分解(SVD)。 我们可以怎样发现一个数据集的底层结构?我们可以怎样最有用地对其进行归纳和分组?我们可以怎样以一种压缩格式有效地表征数据?这都是无监督学习的目标,之所以称之为「无监督」,是因为这是从无标签的数据开始学习的。 我们将在这里探索的两种无监督学习任务是:1)将数据按相似度聚类(clustering)成不同的分组;2)

  • 监督学习的目标是建立一个学习过程,将预测结果与“训练数据”(即输入数据)的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率,包括分类、回归等问题。而常用算法包括线性回归、决策树、贝叶斯分类、最小二乘回归、逻辑回归、支持向量机、神经网络等。 监督学习的整个训练流程如下图所示

  • 概率图模型 规则学习 聚类 集成学习

  • 1.1. 广义线性模型 1.1.1. 普通最小二乘法 1.1.1.1. 普通最小二乘法复杂度 1.1.2. 岭回归 1.1.2.1. 岭回归的复杂度 1.1.2.2. 设置正则化参数:广义交叉验证 1.1.3. Lasso 1.1.3.1. 设置正则化参数 1.1.3.1.1. 使用交叉验证 1.1.3.1.2. 基于信息标准的模型选择 1.1.3.1.3. 与 SVM 的正则化参数的比较 1.1