#r
#r
Вопрос:
Добрый день!
Я пытаюсь реализовать алгоритм EM с нуля. Я разработал код, который содержит :
k=10
w_k=rep(1,k)/k
n_j=rep(0,k)
print(w_k)
data=iris[1:150,-5]
means=sample(1:dim(data)[1],k,replace=FALSE)
means
mu=iris[means,-5]
sigma=cov(data)
print("mu")
mu
print("sigma")
sigma
print("inv")
solve(sigma)
print("mu[1,] ")
as.vector(mu[1,])
as.vector(mu[1,]) %*% solve(sigma) #line of error
К сожалению, эта строка выдает следующую ошибку :
Error in as.vector(mu[1, ]) %*% solve(sigma) :
requires numeric/complex matrix/vector arguments
Execution halted
Я много раз пытался решить проблему, используя as.matrix()
, но безуспешно.
Заранее благодарю вас за помощь!
Ответ №1:
Вектор mu
представляет собой data.frame. Попробуйте преобразовать это в матрицу.
as.matrix(mu[1,]) %*% solve(sigma)
# Sepal.Length Sepal.Width Petal.Length Petal.Width
#95 16.37781 11.46013 -0.198358 -9.473886
Комментарии:
1. Да, мы решили проблему одновременно, спасибо !
Ответ №2:
mu
является фреймом данных и должен быть преобразован в матрицу.
k=10
w_k=rep(1,k)/k
n_j=rep(0,k)
print(w_k)
data=iris[1:150,-5]
means=sample(1:dim(data)[1],k,replace=FALSE)
means
mu=as.matrix(iris[means,-5])
sigma=cov(data)
print("mu")
mu
print("sigma")
sigma
print("inv")
solve(sigma)
print("mu[1,] ")
is.numeric(mu[1,])
is.matrix(mu[1,])
rbind(mu[1,]) %*% solve(sigma) %*% cbind(mu[1,])