lm.ridge() 在 R MASS 包中说 "Error in svd(X) : infinite or missing values in 'x'"
lm.ridge() in R MASS package saying "Error in svd(X) : infinite or missing values in 'x'"
我正在尝试 运行 对 8*8 像素坐标的数据集进行岭回归。数据集是由不同手写的一系列 1 和 0 组成的映射,按 8*8 像素矩阵对应的 64 个数值行排列。
下面的 lm.ridge()
函数用 Error in svd(X) : infinite or missing values in 'x'
回复我。问题是什么,我做错了什么?
digits = read.csv("digits.csv", header = FALSE)
library(MASS)
digits$y = rep(0,nrow(digits))
digits$y[1:554] = 1
digits$y[555:1125] = -1
lm =lm.ridge(y ~ ., digits , lambda = 1)
数据集样本,因为我不知道如何在此处上传 csv。
'data.frame': 1125 obs. of 65 variables:
$ V1 : int 0 0 0 0 0 0 0 0 0 0 ...
$ V2 : int 16 0 0 16 0 0 0 0 0 0 ...
$ V3 : int 96 160 240 160 32 128 112 160 32 0 ...
$ V4 : int 240 255 32 240 208 255 224 128 192 128 ...
$ V5 : int 192 96 224 128 144 128 96 176 176 192 ...
.
.
.
$ V62: int 16 48 0 0 64 80 0 0 128 144 ...
$ V63: int 0 0 0 0 0 0 0 0 0 16 ...
$ V64: int 0 0 0 0 0 0 0 0 0 0 ...
$ y : num 1 1 1 1 1 1 1 1 1 1 ...
我知道这可能与列全为零有关(例如 V1)。我目前已经通过对列求和并删除总和为零的列来删除它,但我想知道 a) 是否有更简洁的方法来执行此操作以及 b) 这是否会破坏我的岭回归分析。
干杯。
据我了解,您不能给 lm.ridge()
一列零。我实施的解决方案并没有破坏岭回归。我想到了一个更好的实现方式,通过检查列的绝对值之和是否为零(digits = digits[,which(colSums(abs(digits)) !=0)]
)。
希望这对某人有所帮助。
我正在尝试 运行 对 8*8 像素坐标的数据集进行岭回归。数据集是由不同手写的一系列 1 和 0 组成的映射,按 8*8 像素矩阵对应的 64 个数值行排列。
下面的 lm.ridge()
函数用 Error in svd(X) : infinite or missing values in 'x'
回复我。问题是什么,我做错了什么?
digits = read.csv("digits.csv", header = FALSE)
library(MASS)
digits$y = rep(0,nrow(digits))
digits$y[1:554] = 1
digits$y[555:1125] = -1
lm =lm.ridge(y ~ ., digits , lambda = 1)
数据集样本,因为我不知道如何在此处上传 csv。
'data.frame': 1125 obs. of 65 variables:
$ V1 : int 0 0 0 0 0 0 0 0 0 0 ...
$ V2 : int 16 0 0 16 0 0 0 0 0 0 ...
$ V3 : int 96 160 240 160 32 128 112 160 32 0 ...
$ V4 : int 240 255 32 240 208 255 224 128 192 128 ...
$ V5 : int 192 96 224 128 144 128 96 176 176 192 ...
.
.
.
$ V62: int 16 48 0 0 64 80 0 0 128 144 ...
$ V63: int 0 0 0 0 0 0 0 0 0 16 ...
$ V64: int 0 0 0 0 0 0 0 0 0 0 ...
$ y : num 1 1 1 1 1 1 1 1 1 1 ...
我知道这可能与列全为零有关(例如 V1)。我目前已经通过对列求和并删除总和为零的列来删除它,但我想知道 a) 是否有更简洁的方法来执行此操作以及 b) 这是否会破坏我的岭回归分析。
干杯。
据我了解,您不能给 lm.ridge()
一列零。我实施的解决方案并没有破坏岭回归。我想到了一个更好的实现方式,通过检查列的绝对值之和是否为零(digits = digits[,which(colSums(abs(digits)) !=0)]
)。
希望这对某人有所帮助。