- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 data.table,其中每个唯一的 x
值都与一个唯一的 y
值相关联。然后我将一个 x
值强制设置为 NA
以用于 k-最近邻练习:
dt <- data.table(x = rep(c(1:4), 3),
y = rep(c("Brandon", "Erica", "Karyna", "Alex"), 3))
dt[3, 1] <- NA
print(dt)
# x y
#1: 1 Brandon
#2: 2 Erica
#3: NA Karyna
#4: 4 Alex
#5: 1 Brandon
#6: 2 Erica
#7: 3 Karyna
#8: 4 Alex
#9: 1 Brandon
#10: 2 Erica
#11: 3 Karyna
#12: 4 Alex
引用第一个答案 this question ,我从 dt$y
中创建了一个二进制矩阵:
dt.a <- model.matrix(~ y -1 , data = dt)
dt2 <- cbind(dt[, -2, with = FALSE], dt.a)
print(dt2)
# x yAlex yBrandon yErica yKaryna
#1: 1 0 1 0 0
#2: 2 0 0 1 0
#3: NA 0 0 0 1
#4: 4 1 0 0 0
#5: 1 0 1 0 0
#6: 2 0 0 1 0
#7: 3 0 0 0 1
#8: 4 1 0 0 0
#9: 1 0 1 0 0
#10: 2 0 0 1 0
#11: 3 0 0 0 1
#12: 4 1 0 0 0
使用 caret
包的 preProcess
函数中的 knnImpute
方法,我希望下面的中心和缩放输出dt3[1, 3]
将等于第 7 行和第 12 行。但事实并非如此。事实上,它看起来几乎等于第 7 行和第 12 行的负值。
preobj <- preProcess(dt2, method = "knnImpute")
dt3 <- predict(preobj, dt2)
print(dt3)
# x yAlex yBrandon yErica yKaryna
#1: -1.19857753 -0.5527708 1.6583124 -0.5527708 -0.5527708
#2: -0.37455548 -0.5527708 -0.5527708 1.6583124 -0.5527708
#3: -0.04494666 -0.5527708 -0.5527708 -0.5527708 1.6583124
#4: 1.27348863 1.6583124 -0.5527708 -0.5527708 -0.5527708
#5: -1.19857753 -0.5527708 1.6583124 -0.5527708 -0.5527708
#6: -0.37455548 -0.5527708 -0.5527708 1.6583124 -0.5527708
#7: 0.44946657 -0.5527708 -0.5527708 -0.5527708 1.6583124
#8: 1.27348863 1.6583124 -0.5527708 -0.5527708 -0.5527708
#9: -1.19857753 -0.5527708 1.6583124 -0.5527708 -0.5527708
#10: -0.37455548 -0.5527708 -0.5527708 1.6583124 -0.5527708
#11: 0.44946657 -0.5527708 -0.5527708 -0.5527708 1.6583124
#12: 1.27348863 1.6583124 -0.5527708 -0.5527708 -0.5527708
dt3$x
的第 3 行不应该等于第 7 行和第 11 行吗?如果是这样,我需要在脚本中更改什么?如果不是,为什么?
最佳答案
要了解正在发生的事情,您首先需要了解 caret
包的函数 preProcess
中的方法 knnImpute
的工作方式。有多种类型的k-最近邻插补可用,不同的人在不同的软件包中以不同的方式实现它。
您可以使用 k 近邻的加权平均值、中值甚至简单平均值来替换缺失值。有几种距离度量来计算不同的距离以找到邻居。
现在针对您的问题,这里有一些问题会随着他们的回答而出现。
1.这里考虑了多少最近邻?
默认为5。您可以通过在 preProcess
函数中指定参数 k
来更改它。
2.正在使用哪个距离度量?
在上面的例子中使用了欧氏距离。
3.计算距离的空间维度是多少,如何找到?
在您的例子中,它是四维空间。它是通过采用没有缺失值的列获得的。因此,在您的情况下,它是列号 2, 3, 4, 5
。
根据上述解释,如果您在删除存储在 中的具有
,您将获得以下索引 ( NA
的行后尝试在数据集中找到五个最近的邻居 ( nn
) preobj$datann.idx
) 和相应的距离 ( nn.dists
),如下所示。
> nn
$nn.idx
[,1] [,2] [,3] [,4] [,5]
[1,] 10 6 5 9 2
$nn.dists
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 3.126944 3.126944 3.126944
4.现在最后如何替换NA
值?
要替换 NA
值,只需取与最近索引对应的缺失列中的值的平均值。
> preobj$data
x yAlex yBrandon yErica yKaryna
1: -1.1985775 -0.5527708 1.6583124 -0.5527708 -0.5527708
2: -0.3745555 -0.5527708 -0.5527708 1.6583124 -0.5527708
3: 1.2734886 1.6583124 -0.5527708 -0.5527708 -0.5527708
4: -1.1985775 -0.5527708 1.6583124 -0.5527708 -0.5527708
5: -0.3745555 -0.5527708 -0.5527708 1.6583124 -0.5527708
6: 0.4494666 -0.5527708 -0.5527708 -0.5527708 1.6583124
7: 1.2734886 1.6583124 -0.5527708 -0.5527708 -0.5527708
8: -1.1985775 -0.5527708 1.6583124 -0.5527708 -0.5527708
9: -0.3745555 -0.5527708 -0.5527708 1.6583124 -0.5527708
10: 0.4494666 -0.5527708 -0.5527708 -0.5527708 1.6583124
11: 1.2734886 1.6583124 -0.5527708 -0.5527708 -0.5527708
> mean(preobj$data$x[nn$nn.idx])
[1] -0.04494666
你会发现 NA
在输出中确实被这个值替换了。
> dt3
x yAlex yBrandon yErica yKaryna
1: -1.19857753 -0.5527708 1.6583124 -0.5527708 -0.5527708
2: -0.37455548 -0.5527708 -0.5527708 1.6583124 -0.5527708
3: -0.04494666 -0.5527708 -0.5527708 -0.5527708 1.6583124
4: 1.27348863 1.6583124 -0.5527708 -0.5527708 -0.5527708
5: -1.19857753 -0.5527708 1.6583124 -0.5527708 -0.5527708
6: -0.37455548 -0.5527708 -0.5527708 1.6583124 -0.5527708
7: 0.44946657 -0.5527708 -0.5527708 -0.5527708 1.6583124
8: 1.27348863 1.6583124 -0.5527708 -0.5527708 -0.5527708
9: -1.19857753 -0.5527708 1.6583124 -0.5527708 -0.5527708
10: -0.37455548 -0.5527708 -0.5527708 1.6583124 -0.5527708
11: 0.44946657 -0.5527708 -0.5527708 -0.5527708 1.6583124
12: 1.27348863 1.6583124 -0.5527708 -0.5527708 -0.5527708
注意第三行。
要用最近邻的相应值替换 NA
的值,您可以简单地使用 k=1
。
关于r - knnImpute 使用带插入符号包的分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020237/
运行 PostgreSQL(7.4 和 8.x),我认为这是可行的,但现在我遇到了错误。 我可以单独运行查询,它工作得很好,但如果我使用 UNION 或 UNION ALL,它会抛出错误。 这个错误:
我试图为我的应用程序创建一个导航,使用抽屉导航我的 fragment 之一(HomeFragment)有一个 ViewPager,可容纳 3 个 fragment (Bundy Clock、Annou
以我目前正在开发的应用为例: - 它有一个包含多个项目的抽屉导航;现在有两个项目让我感兴趣,我将它们称为 X 和 Y。 X 和 Y 都在单击时显示包含 x 元素或 y 元素列表的 fragment 选
我有一个形状为 (370,275,210) 的 NumPy 数组,我想将其重新整形为 (275,210,370)。我将如何在 Python 中实现这一点? 370是波段数,275是行数,210是图像包
我们如何与被子 UIViewController 阻止的父 UIViewController(具有按钮)交互。显然,触摸事件不会通过子 Nib 。 (启用用户交互) 注意:我正在加载默认和自定义 NI
我是 Jpa 新手,我想执行过程 我的代码如下 private static final String PERSISTENCE_UNIT_NAME = "todos"; private static
与安装了 LAMP 的 GCE 相比,选择与 Google Cloud SQL 链接的 GCE 实例有哪些优势? 我确定 GCE 是可扩展的,但是安装在其上的 mysql 数据库的可扩展性如何? 使用
这个问题在这里已经有了答案: Value receiver vs. pointer receiver (3 个答案) 关闭 3 年前。 我刚接触 golang。只是想了解为 Calc 类型声明的两种
我不小心按了一个快捷键,一个非常漂亮的断线出现在日期上。 有点像 # 23 Jun 2010 -------------------- 有人知道有问题的快捷方式吗?? (我在 mac 上工作!) 在
我正在Scala中编写正则表达式 val regex = "^foo.*$".r 这很好,但是如果我想做 var x = "foo" val regex = s"""^$x.*$""".r 现在我们有
以下 XML 文档在技术上是否相同? James Dean 19 和: James Dean 19 最佳答案 这两个文档在语义上是相同的。在 X
我在对数据帧列表运行稳健的线性回归模型(使用 MASS 库中的 rlm)时遇到问题。 可重现的示例: var1 <- c(1:100) var2 <- var1*var1 df1 <- data.f
好的,我有一个自定义数字键盘,可以在标签(numberField)中将数字显示为 0.00,现在我需要它显示 $0.00。 NSString *digit = sender.currentTitle;
在基于文档的应用程序中,使用 XIB 文件,创建新窗口时其行为是: 根据最后一个事件的位置进行定位和调整大小 window 。 如果最后一个事件窗口仍然可见,则新窗口 窗口应该是级联的,这样它就不会直
我想使用参数进行查询,如下所示: SELECT * FROM MATABLE WHERE MT_ID IN (368134, 181956) 所以我考虑一下 SELECT * FROM MATABLE
我遇到一些性能问题。 我有一个大约有 200 万行的表。 CREATE TABLE [dbo].[M8]( [M8_ID] [int] IDENTITY(1,1) NOT NULL,
我在 jquery 中的按键功能遇到问题。我不知道为什么按键功能不起作用。我已经使用了正确的 key 代码。在我的函数中有 2 个代码,其中包含 2 个事件键,按一个键表示 (+) 代码 107 和(
我想显示音频波形,我得到了此代码,它需要.raw音频输入并显示音频波形,但是当我放入.3gp,.mp3音频时,我得到白噪声,有人可以帮助我如何使其按需与.3gp一起使用使用.3gp音频运行它。 Inp
我无法让 stristr 函数返回真值,我相信这是因为我的搜索中有一个 $ 字符。 当我这样做时: var_dump($nopricecart); 完整的 $nopricecart 值是 $0 ,我得
如果我有这样的循环: for(int i=0;i O(n) 次。所以do some执行了O(n)次。如果做某事是线性时间,那么代码片段的复杂度是O(n^2)。 关于algorithm - 带 If 语
我是一名优秀的程序员,十分优秀!