展示如何用R处理稀疏矩阵和利用GLMNET包

# 建立简单的some_data.frame

some_dataframe<-read.table("~\some_data.frame.txt",sep="\t",header=T)

some_dataframe

##    c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 outcome

## 1   2  7  0  0  0  0  0  0  0   0       0

## 2   0  0  3  0  0  0  0  0  0   0       0

## 3   0  0  0  6  1  0  0  0  0   0       0

## 4   0  0  0  2  0  0  0  0  0   0       0

## 5   0  0  0  0  0  0  0  0 12   0       1

## 6   0  0  0  0  0 25  0  0  0   0       1

## 7   1  0  0  0  2  0  0  0  0   0       0

## 8   0  0  0  2  0  0  0  0  0   0       0

## 9   0  0  0  0  0  0  0  0 14   0       1

## 10  0  0  0  0  0 21  0  0  0   0       1

## 11  0  0  0  0  0  0 28  0  0   0       1

## 12  0  0  0  0  0  0  0 35  0   0       1

## 13  0  0  0  0  0  0  0  0 42   0       1

## 14  0  0  0  0  0  0  0  0  0  49       1

some_matrix<-data.matrix(some_dataframe)

some_matrix

##       c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 outcome

##  [1,]  2  7  0  0  0  0  0  0  0   0       0

##  [2,]  0  0  3  0  0  0  0  0  0   0       0

##  [3,]  0  0  0  6  1  0  0  0  0   0       0

##  [4,]  0  0  0  2  0  0  0  0  0   0       0

##  [5,]  0  0  0  0  0  0  0  0 12   0       1

##  [6,]  0  0  0  0  0 25  0  0  0   0       1

##  [7,]  1  0  0  0  2  0  0  0  0   0       0

##  [8,]  0  0  0  2  0  0  0  0  0   0       0

##  [9,]  0  0  0  0  0  0  0  0 14   0       1

## [10,]  0  0  0  0  0 21  0  0  0   0       1

## [11,]  0  0  0  0  0  0 28  0  0   0       1

## [12,]  0  0  0  0  0  0  0 35  0   0       1

## [13,]  0  0  0  0  0  0  0  0 42   0       1

## [14,]  0  0  0  0  0  0  0  0  0  49       1

# 显然,这跟data.frame格式差不多。为了将它转成稀疏矩阵,我们加载Matrix包,利用Matrix函数,将sparse参数设置为TRUE。

library(Matrix)

print(Matrix(some_matrix,sparse=T))

## 14 x 11 sparse Matrix of class "dgCMatrix"

##    [[ suppressing 11 column names ‘c1‘, ‘c2‘, ‘c3‘ ... ]]

##

##  [1,] 2 7 . . .  .  .  .  .  . .

##  [2,] . . 3 . .  .  .  .  .  . .

##  [3,] . . . 6 1  .  .  .  .  . .

##  [4,] . . . 2 .  .  .  .  .  . .

##  [5,] . . . . .  .  .  . 12  . 1

##  [6,] . . . . . 25  .  .  .  . 1

##  [7,] 1 . . . 2  .  .  .  .  . .

##  [8,] . . . 2 .  .  .  .  .  . .

##  [9,] . . . . .  .  .  . 14  . 1

## [10,] . . . . . 21  .  .  .  . 1

## [11,] . . . . .  . 28  .  .  . 1

## [12,] . . . . .  .  . 35  .  . 1

## [13,] . . . . .  .  .  . 42  . 1

## [14,] . . . . .  .  .  .  . 49 1

# 在这里,它只保留了非零值。

接下来,让我们将data.frame数据分成两份:2/3做为训练集,1/3做为测试集。

set.seed(2)

split<-sample(nrow(some_dataframe),floor(0.7*nrow(some_dataframe)))

train<-some_dataframe[split,]

test<-some_dataframe[-split,]

train

##    c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 outcome

## 3   0  0  0  6  1  0  0  0  0   0       0

## 10  0  0  0  0  0 21  0  0  0   0       1

## 7   1  0  0  0  2  0  0  0  0   0       0

## 2   0  0  3  0  0  0  0  0  0   0       0

## 13  0  0  0  0  0  0  0  0 42   0       1

## 9   0  0  0  0  0  0  0  0 14   0       1

## 11  0  0  0  0  0  0 28  0  0   0       1

## 6   0  0  0  0  0 25  0  0  0   0       1

## 14  0  0  0  0  0  0  0  0  0  49       1

test

##    c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 outcome

## 1   2  7  0  0  0  0  0  0  0   0       0

## 4   0  0  0  2  0  0  0  0  0   0       0

## 5   0  0  0  0  0  0  0  0 12   0       1

## 8   0  0  0  2  0  0  0  0  0   0       0

## 12  0  0  0  0  0  0  0 35  0   0       1

# 然后,我们用sparse.model.matrix函数创建稀疏矩阵

train_sparse<-sparse.model.matrix(~.,train[1:10])

test_sparse<-sparse.model.matrix(~.,test[1:10])

train_sparse

## 9 x 11 sparse Matrix of class "dgCMatrix"

##    [[ suppressing 11 column names ‘(Intercept)‘, ‘c1‘, ‘c2‘ ... ]]

##

## 3  1 . . . 6 1  .  . .  .  .

## 10 1 . . . . . 21  . .  .  .

## 7  1 1 . . . 2  .  . .  .  .

## 2  1 . . 3 . .  .  . .  .  .

## 13 1 . . . . .  .  . . 42  .

## 9  1 . . . . .  .  . . 14  .

## 11 1 . . . . .  . 28 .  .  .

## 6  1 . . . . . 25  . .  .  .

## 14 1 . . . . .  .  . .  . 49

test_sparse

## 5 x 11 sparse Matrix of class "dgCMatrix"

##    [[ suppressing 11 column names ‘(Intercept)‘, ‘c1‘, ‘c2‘ ... ]]

##

## 1  1 2 7 . . . . .  .  . .

## 4  1 . . . 2 . . .  .  . .

## 5  1 . . . . . . .  . 12 .

## 8  1 . . . 2 . . .  .  . .

## 12 1 . . . . . . . 35  . .

library(glmnet)

## Loaded glmnet 1.9-8

fit<-glmnet(train_sparse,train[,11])

pred<-predict(fit,test_sparse,test[,11],type="class")

print(head(pred[,1:5]))

##         1      2      3      4      5

## 1  0.9898 0.9898 0.6667 0.9898 0.6667

## 4  0.8306 0.8306 0.6667 0.8306 0.6667

## 5  0.9898 0.9898 0.6667 0.9898 0.6667

## 8  0.8306 0.8306 0.6667 0.8306 0.6667

## 12 0.9898 0.9898 0.6667 0.9898 0.6667

# 利用cv.glmnet找出最好的lambda/penalty

cv<-cv.glmnet(train_sparse,train[,11],nfolds=3)

pred<-predict(fit,test_sparse,type="response",s=cv$lambda.min)

print(names(cv))

##  [1] "lambda"     "cvm"        "cvsd"       "cvup"       "cvlo"

##  [6] "nzero"      "name"       "glmnet.fit" "lambda.min" "lambda.1se"

print(pred)

##         1

## 1  0.9898

## 4  0.8306

## 5  0.9898

## 8  0.8306

## 12 0.9898

# receiver operating characteristic (ROC curves)

library(pROC)

## Type ‘citation("pROC")‘ for a citation.

##

## Attaching package: ‘pROC‘

##

## 下列对象被屏蔽了from ‘package:glmnet‘:

##

##     auc

##

## 下列对象被屏蔽了from ‘package:stats‘:

##

##     cov, smooth, var

auc<-roc(test[,11],pred)

print(auc$auc)

## Area under the curve: 0.833

# how does sparse deal with categorical data (adding mood feature with two levels)?

cat_dataframe<-data.frame(some_dataframe,

mood=c("happy","happy","happy","happy","sad","sad","happy","happy",

"sad","sad","sad","sad","sad","sad"))

cat_dataframe<-cat_dataframe[,c(colnames(cat_dataframe)[1:10],"mood","outcome")]

sparse.model.matrix(~.,cat_dataframe)

## 14 x 13 sparse Matrix of class "dgCMatrix"

##    [[ suppressing 13 column names ‘(Intercept)‘, ‘c1‘, ‘c2‘ ... ]]

##

## 1  1 2 7 . . .  .  .  .  .  . . .

## 2  1 . . 3 . .  .  .  .  .  . . .

## 3  1 . . . 6 1  .  .  .  .  . . .

## 4  1 . . . 2 .  .  .  .  .  . . .

## 5  1 . . . . .  .  .  . 12  . 1 1

## 6  1 . . . . . 25  .  .  .  . 1 1

## 7  1 1 . . . 2  .  .  .  .  . . .

## 8  1 . . . 2 .  .  .  .  .  . . .

## 9  1 . . . . .  .  .  . 14  . 1 1

## 10 1 . . . . . 21  .  .  .  . 1 1

## 11 1 . . . . .  . 28  .  .  . 1 1

## 12 1 . . . . .  .  . 35  .  . 1 1

## 13 1 . . . . .  .  .  . 42  . 1 1

## 14 1 . . . . .  .  .  .  . 49 1 1

print(levels(cat_dataframe$mood))

## [1] "happy" "sad"

dim(cat_dataframe)

## [1] 14 12

dim(sparse.model.matrix(~.,cat_dataframe))

## [1] 14 13

时间: 2024-10-12 08:53:10

展示如何用R处理稀疏矩阵和利用GLMNET包的相关文章

如何用R产生一个随机数

转载自   如何用R产生一个随机数 如何选择一个随机数在R As a language for statistical analysis, R has a comprehensive library of functions for generating random numbers from various statistical distributions.作为一种语言进行统计分析,R有一个随机数生成各种统计分布功能的综合性图书馆. In this post, I want to focus

利用DBMS_STATS包修改统计信息,欺骗优化器,生成糟糕的执行计划

在使用基于成本的优化器的优化器时,优化器生产执行计划时要估算每条SQL的执行成本,选择最佳的执行计划来执行sql语句.通过操纵统计信息就可以简介操纵执行计划的生成. 当然 需要强调的一点是,这是非常危险的行为 1 创建测试表 SQL> create table test_stats  as   2  select * from dba_objects ; Table created. 2 收集统计信息 SQL> EXEC dbms_stats.gather_table_stats(ownnam

网络安全系列之五十五 利用抓包来上传webshell

在Web渗透的过程中,最为麻烦的一个环节就是上传WebShell,之前曾介绍过利用数据库备份来上传,这也属于最为简单和古老的一种方法.本文将介绍另外一种利用抓包来上传WebShell的方法,目标网站采用南方数据5.0,实验平台采用IIS搭建,如何利用IIS搭建ASP网站可参考博文http://yttitan.blog.51cto.com/70821/1579372. 首先登录网站后台,找到上传点. 点击浏览按钮,打开"选择文件"窗口,随意选择一张准备上传的图片. 注意,这里先不要点击&

java利用poi包 为excel生成超链接

转载自:http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html 1,一个需求, 要求报表生成的Excel表格支持超链接.例如点击Excel内的公司名, 自动打开浏览器并连到该公司的网站上去.在Excel里面选中所需的单元格, 右键弹出属性, 选超链接就能输入相应的地址了,既然Excel支持超链接.那就没有什么借口说不能实现了.:). 翻了翻POI的文档, 很容易就找到了解决方案.在POI中让单元格实现超链接功能, 可以用Hy

【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)

https://www.cnblogs.com/xdp-gacl/p/4187089.html http://doc.okbase.net/yuanfy008/archive/265663.html java利用snmp4j包来读取snmp协议数据(Manager端) 1 snmp简单介绍 java利用snmp4j包来读取snmp协议数据,很简单的一个流程,就是利用java来读取运行snmp协议的数据,例如服务器.PC机或者路由器等运行了snmp协议的设备. snmp协议是什么呢? 简单网络管理

R语言:利用caret包中的dummyVars函数进行虚拟变量处理

dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterization----建立一套完整的虚拟变量 先举一个简单的例子: survey<-data.frame(service=c("very unhappy","unhappy","neutral","happy","very

oracle读写文件--利用utl_file包对磁盘文件的读写操作

摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做,后来想起ORACLE有很多包,功能很好很强大,于是网上参考了些文章完成了. 主要是用了ORACLE的两个包:UTL_FILE和DBMS_LOB. 实现过程: 第一步:以管理员用户登陆设置可操作目录 --CREATE DIRECTORY privilege is granted only to SYS and SYSTEM by default. create or

R载入需要的程辑包:rJava Error

> library(xlsx) 载入需要的程辑包:rJava Error : loadNamespace()里算'rJava'时.onLoad失败了,详细内容: 调用: inDL(x, as.logical(local), as.logical(now), ...) 错误: unable to load shared object 'C:/Program Files/R/R-3.1.3/library/rJava/libs/x64/rJava.dll': LoadLibrary failure:

【Python笔记】如何用C语言实现Python第三方扩展包

Python支持C/C++实现的第3方扩展包,在性能要求高的场合,这种特性显得尤其重要. 本文以实例说明定制Python扩展包的基本步骤. 1. 扩展包源码实现 按照Python官网教程Extending Python with C or C++说明的步骤,扩展模块的源文件实现如下: #include <Python.h> // forward declaration void initpyext(void); // self-defined error obj static PyObject