我有一个矩阵,其中包含用户查看过哪个项目的信息,即1 =查看项目,0 =未查看项目。这个矩阵是一个非常大的矩阵,尺寸为9276 x 13068.但每当我尝试使用
将其转换为binaryRatingMatrix时binmatrix<- as(user_asset_matrix2,"binaryRatingMatrix")
binmatrix
2 x 2 rating matrix of class ‘binaryRatingMatrix’ with 3 ratings.
它形成一个没有用的2x2矩阵。将binmatrix转换回矩阵后,它将转换为:
0 1
0 TRUE TRUE
1 TRUE FALSE
有人能给我解决这个问题的解决方案吗?
答案 0 :(得分:1)
我刚刚设法解决了这个问题,虽然我几乎不确定如何......让我试着帮助你。
首先,您确定大矩阵的格式实际上是matrix
而不是data.frame
或data.table
?不知何故,这是我的问题......
在任何一种情况下,假设已从具有许多行和两列的事务列表trlist
开始获取矩阵,如下所示
> dim(trlist)
[1] 100000 2
> colnames(trlist)
[1] "customer" "item"
我们可以使用acast
中的reshape2
获得一个有希望的好客户项目矩阵(请原谅我的强迫症缩进选项):
product_item <-
acast(
data = trlist,
formula = customer ~ item,
value.var = item,
fun.aggregate = length
)
现在我们应该准备好了:
product_item <- as(product_item, "realRatingMatrix")
sp_product_item <- binarize(product_item, minRating = 1)
如果您所拥有的矩阵不是来自交易列表,您可以使用已加载的melt
中的reshape2
来获取一个,然后按照前面的步骤。
我无法保证这对你有帮助,但它对我有用:)
答案 1 :(得分:1)
我的代码遇到了类似的问题,即使我的初始数据集有很多评级,也会获得相同的输出。我正在读一个csv文件,事实证明你不能直接将data.frame强制转换为binaryRatingMatrix,而不是先将它转换为数据矩阵:
library(recommenderlab)
csv<-read.csv("csv.csv",header=TRUE,row.names=1)
csv<-as.matrix(csv)
csv<-as(csv,"binaryRatingMatrix)
csv
139x867 rating matrix of class 'binaryRatingMatrix' with 3944 ratings.
当您将csv转换为&#34; binaryRatingMatrix&#34;后,它现在应该显示变量的正确尺寸以及您期望的评级数。