使用稀疏矩阵作为 R 中 ranger 包的输入
Using sparse matrix as an input to ranger package in R
概览
为了避免内存问题,我使用以下代码将文档术语矩阵转换为带有“矩阵”包的稀疏矩阵:
library(matrix)
documentTermMatrixFrame <- Matrix(documentTermMatrixFrame, sparse = TRUE)
但是当我尝试使用以下代码将此矩阵用作“ranger”包的 ranger() 函数的输入时:
library(ranger)
trainSet <- documentTermMatrixFrame[1:750,]
testSet <- documentTermMatrixFrame[751:999,]
fit <- ranger(trainingColumnNames, data=trainSet,write.forest=TRUE)
我遇到错误:
Error in as.data.frame.default(data) :
cannot coerce class "structure("dgCMatrix", package = "Matrix")" to a data.frame
数据集
这是我正在使用的数据集示例
<html>
<table style="width:100%">
<tr>
<th>nitemid</th>
<th>sUnSpsc</th>
<th>productDescription</th>
</tr>
<tr>
<td>7460893</td>
<td>26121609Network cable </td>
<td>Category 6A, Advanced MaTriX, 4-pair, 23 AWG, U/UTP copper cable, Plenum (CMP) Rated, White, 1000ft/305m ""</td>
</tr>
<tr>
<td>7460456</td>
<td>26121709Network cable </td>
<td>Shielded marine MUD-resistant armored copper cable, category 7 S/FTP, low smoke zero halogen (LSZH), 4-pair, conductors are 22 AWG construction with foamed PE insulation, twisted in pairs</td>
</tr>
<tr>
<td>7460856</td>
<td>26121890Inter connect cable </td>
<td>1 PC. = 100 M 2 X 1.5 QMM, 100M SPECIAL DESIGN TO UL CLASS 2 YELLOW TPE OIL-RESISTANT AS-INTERFACE SHAPED CABLE</td>
</tr>
</html>
使用停用词删除、标点符号删除、词干提取等对数据集中的描述进行预处理后...将创建文档术语矩阵,然后将其转换为稀疏矩阵。
数据集的文档项矩阵样本
terms
doc advance category ..... ..... ....... ....... ....... twist
1 1 1 0
2 0 1 1
3 0 0 0
问题
如何使用稀疏矩阵作为 ranger() 函数的输入?
谁能帮忙
提前致谢
目前不支持此选项。 Ranger 调用一些 C++ 例程,因此您不能通过 R 将稀疏矩阵传递给它(只需检查 Ranger 的 github),您需要重写 Ranger 本身。唯一的选择是将稀疏矩阵转换为密集矩阵并转换为数据框。如果这导致内存出现问题,则根本没有简单的解决方案。
自版本 0.7.2 起,稀疏矩阵(如包 Matrix
中的稀疏矩阵)现在可以传递给 ranger
,请参阅讨论 here。扩展到线程中所说的,CRAN 版本现在也支持稀疏矩阵,并且不需要像初始 github 版本那样的额外参数。
概览
为了避免内存问题,我使用以下代码将文档术语矩阵转换为带有“矩阵”包的稀疏矩阵:
library(matrix)
documentTermMatrixFrame <- Matrix(documentTermMatrixFrame, sparse = TRUE)
但是当我尝试使用以下代码将此矩阵用作“ranger”包的 ranger() 函数的输入时:
library(ranger)
trainSet <- documentTermMatrixFrame[1:750,]
testSet <- documentTermMatrixFrame[751:999,]
fit <- ranger(trainingColumnNames, data=trainSet,write.forest=TRUE)
我遇到错误:
Error in as.data.frame.default(data) :
cannot coerce class "structure("dgCMatrix", package = "Matrix")" to a data.frame
数据集
这是我正在使用的数据集示例
<html>
<table style="width:100%">
<tr>
<th>nitemid</th>
<th>sUnSpsc</th>
<th>productDescription</th>
</tr>
<tr>
<td>7460893</td>
<td>26121609Network cable </td>
<td>Category 6A, Advanced MaTriX, 4-pair, 23 AWG, U/UTP copper cable, Plenum (CMP) Rated, White, 1000ft/305m ""</td>
</tr>
<tr>
<td>7460456</td>
<td>26121709Network cable </td>
<td>Shielded marine MUD-resistant armored copper cable, category 7 S/FTP, low smoke zero halogen (LSZH), 4-pair, conductors are 22 AWG construction with foamed PE insulation, twisted in pairs</td>
</tr>
<tr>
<td>7460856</td>
<td>26121890Inter connect cable </td>
<td>1 PC. = 100 M 2 X 1.5 QMM, 100M SPECIAL DESIGN TO UL CLASS 2 YELLOW TPE OIL-RESISTANT AS-INTERFACE SHAPED CABLE</td>
</tr>
</html>
使用停用词删除、标点符号删除、词干提取等对数据集中的描述进行预处理后...将创建文档术语矩阵,然后将其转换为稀疏矩阵。
数据集的文档项矩阵样本
terms
doc advance category ..... ..... ....... ....... ....... twist
1 1 1 0
2 0 1 1
3 0 0 0
问题
如何使用稀疏矩阵作为 ranger() 函数的输入?
谁能帮忙
提前致谢
目前不支持此选项。 Ranger 调用一些 C++ 例程,因此您不能通过 R 将稀疏矩阵传递给它(只需检查 Ranger 的 github),您需要重写 Ranger 本身。唯一的选择是将稀疏矩阵转换为密集矩阵并转换为数据框。如果这导致内存出现问题,则根本没有简单的解决方案。
自版本 0.7.2 起,稀疏矩阵(如包 Matrix
中的稀疏矩阵)现在可以传递给 ranger
,请参阅讨论 here。扩展到线程中所说的,CRAN 版本现在也支持稀疏矩阵,并且不需要像初始 github 版本那样的额外参数。