楼主: qiuweibin2005
10194 6

[问答] R语言print函数问题,求解答 [推广有奖]

  • 1关注
  • 0粉丝

高中生

87%

还不是VIP/贵宾

-

威望
0
论坛币
1148 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
502 点
帖子
22
精华
0
在线时间
34 小时
注册时间
2016-3-10
最后登录
2019-7-18

楼主
qiuweibin2005 发表于 2016-4-6 09:10:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
代码如下:
  1. #模型训练代码
  2. rm(list=ls(all=TRUE))#首先删除工作空间中所有对象
  3. train_data=read.csv("train2.csv",header=TRUE)
  4. test_data=read.csv("test111.csv",header=TRUE)#分别导入训练和测试数据

  5. glm.fit=glm(IS_INTERNET_TV~NET_MONTHS+AGE+GENDER+IS_SCHOOLUSER+STABLE_SCORE,data=train_data,family=binomial(link="logit"))
  6. #用训练数据生成模型, glm(formula,family=family(link=function),data=),formula是准则的意思,family是概率分布的意思,binomial分布族
  7. #link="logit"连接logit函数
  8. summary(glm.fit)
  9. n=nrow(train_data)#训练数据的行数,也就是样本数量

  10. R2<-1-exp((glm.fit$deviance-glm.fit$null.deviance)/n)#计算Cox-Snell拟合优度
  11. cat("Cox-Snell R2=",R2,"\n") #cat的用法:cat(……,file="myfile",append=false),示例:firstname<-c("Jane")  +cat("hello",firstname,"\n)
  12. cat("Nagelkerke R2=",R2,"\n")

  13. R2<-R2/(1-exp((-glm.fit$null.deviance)/n))#计算Nagelkerke拟合优度,我们在最后输出这个拟合优度值(拟合率)

  14. p<-predict.glm(glm.fit,test_data)#用模型对测试数据进行预测
  15. p<-exp(p)/(1+exp(p))#计算因变量的值

  16. predict_table<-transform(test_data,predict=ifelse(p<=0.5,0,1))#可以自己设定阈值,如P值大于0.6
  17. write.table(predict_table,file = "predict_01.csv",sep=",",row.names = FALSE,quote = FALSE)#输出预测结果文件

  18. #计算准确率:被分对的样本数除以所有的样本数
  19. t_table<-table(predict_table$IS_INTERNET_TV,predict_table$predict)
  20. sum_diag<-sum(diag(t_table))#计算对角线
  21. sum<-sum(table(predict_table$IS_INTERNET_TV,predict_table$predict))
  22. accuracy<-sum_diag/sum
  23. print(accuracy)
  24. #计算精确度
  25. precision<-(t_table[1])/(colSums(t_table)[1])
  26. print(precision)
  27. #计算召回率
  28. recall<-(t_table[1])/(rowSums(t_table)[1])
  29. print(recall)
  30. data.rezult<-c(accuracy,precision,recall)
  31. print(data.rezult)
复制代码
结果如下:
  1. > #模型训练代码
  2. > rm(list=ls(all=TRUE))#首先删除工作空间中所有对象
  3. > train_data=read.csv("train2.csv",header=TRUE)
  4. > test_data=read.csv("test111.csv",header=TRUE)#分别导入训练和测试数据
  5. >
  6. > glm.fit=glm(IS_INTERNET_TV~NET_MONTHS+AGE+GENDER+IS_SCHOOLUSER+STABLE_SCORE,data=train_data,family=binomial(link="logit"))
  7. > #用训练数据生成模型, glm(formula,family=family(link=function),data=),formula是准则的意思,family是概率分布的意思,binomial分布族
  8. > #link="logit"连接logit函数
  9. > summary(glm.fit)

  10. Call:
  11. glm(formula = IS_INTERNET_TV ~ NET_MONTHS + AGE + GENDER + IS_SCHOOLUSER +
  12.     STABLE_SCORE, family = binomial(link = "logit"), data = train_data)

  13. Deviance Residuals:
  14.     Min       1Q   Median       3Q      Max  
  15. -3.0499  -0.7299   0.3088   0.6863   2.9859  

  16. Coefficients:
  17.                 Estimate Std. Error z value Pr(>|z|)   
  18. (Intercept)   -1.392e+00  6.322e-02 -22.013   <2e-16 ***
  19. NET_MONTHS     6.098e-03  4.048e-04  15.064   <2e-16 ***
  20. AGE           -1.251e-02  1.518e-03  -8.239   <2e-16 ***
  21. GENDER        -1.617e-04  1.524e-05 -10.606   <2e-16 ***
  22. IS_SCHOOLUSER -3.075e-02  9.863e-02  -0.312    0.755   
  23. STABLE_SCORE   1.564e-01  2.394e-03  65.338   <2e-16 ***
  24. ---
  25. Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

  26. (Dispersion parameter for binomial family taken to be 1)

  27.     Null deviance: 26964  on 20548  degrees of freedom
  28. Residual deviance: 18352  on 20543  degrees of freedom
  29.   (1951 observations deleted due to missingness)
  30. AIC: 18364

  31. Number of Fisher Scoring iterations: 5

  32. > n=nrow(train_data)#训练数据的行数,也就是样本数量
  33. >
  34. > R2<-1-exp((glm.fit$deviance-glm.fit$null.deviance)/n)#计算Cox-Snell拟合优度
  35. > cat("Cox-Snell R2=",R2,"\n") #cat的用法:cat(……,file="myfile",append=false),示例:firstname<-c("Jane")  +cat("hello",firstname,"\n)
  36. Cox-Snell R2= 0.3180192
  37. > cat("Nagelkerke R2=",R2,"\n")
  38. Nagelkerke R2= 0.3180192
  39. >
  40. > R2<-R2/(1-exp((-glm.fit$null.deviance)/n))#计算Nagelkerke拟合优度,我们在最后输出这个拟合优度值(拟合率)
  41. >
  42. > p<-predict.glm(glm.fit,test_data)#用模型对测试数据进行预测
  43. > p<-exp(p)/(1+exp(p))#计算因变量的值
  44. >
  45. > predict_table<-transform(test_data,predict=ifelse(p<=0.5,0,1))#可以自己设定阈值,如P值大于0.6
  46. > write.table(predict_table,file = "predict_01.csv",sep=",",row.names = FALSE,quote = FALSE)#输出预测结果文件
  47. >
  48. > #计算准确率:被分对的样本数除以所有的样本数
  49. > t_table<-table(predict_table$IS_INTERNET_TV,predict_table$predict)
  50. > sum_diag<-sum(diag(t_table))#计算对角线
  51. > sum<-sum(table(predict_table$IS_INTERNET_TV,predict_table$predict))
  52. > accuracy<-sum_diag/sum
  53. > print(accuracy)
  54. [1] 0.7257071
  55. > #计算精确度
  56. > precision<-(t_table[1])/(colSums(t_table)[1])
  57. > print(precision)
  58.         0
  59. 0.9153751
  60. > #计算召回率
  61. > recall<-(t_table[1])/(rowSums(t_table)[1])
  62. > print(recall)
  63.         0
  64. 0.6680012
  65. > data.rezult<-c(accuracy,precision,recall)
  66. > print(data.rezult)
  67.                      0                  0
  68. 0.7257071 0.9153751 0.6680012
复制代码
请教诸位大神,为什么print(precision)和print(recall)为什么变成数组了?怎么能把那个0去掉?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:print R语言 int 求解答 Nagelkerke R语言 print函数

回帖推荐

le.chat 发表于2楼  查看完整内容

建议你把数据传上来,或者展示下数据形式吧?

万人往LVR 发表于6楼  查看完整内容

as.numeric(data.rezult)
已有 1 人评分论坛币 收起 理由
happy_287422301 + 20 鼓励积极发帖讨论

总评分: 论坛币 + 20   查看全部评分

沙发
le.chat 发表于 2016-4-7 17:52:13
建议你把数据传上来,或者展示下数据形式吧?
已有 1 人评分论坛币 收起 理由
happy_287422301 + 40 热心帮助其他会员

总评分: 论坛币 + 40   查看全部评分

藤椅
万人往LVR 在职认证  发表于 2016-4-7 17:56:58
只是名字

板凳
qiuweibin2005 发表于 2016-4-8 09:28:52
le.chat 发表于 2016-4-7 17:52
建议你把数据传上来,或者展示下数据形式吧?
已经解决了,汗,出来的是数据框的列名,多谢啦
已有 1 人评分论坛币 收起 理由
happy_287422301 + 20 补偿

总评分: 论坛币 + 20   查看全部评分

报纸
qiuweibin2005 发表于 2016-4-8 09:29:25
万人往LVR 发表于 2016-4-7 17:56
只是名字
果然是大神,如果需要不显示列名,只显示数据元素,应该怎么弄?
已有 1 人评分经验 收起 理由
happy_287422301 + 100 鼓励积极发帖讨论

总评分: 经验 + 100   查看全部评分

地板
万人往LVR 在职认证  发表于 2016-4-8 11:15:42
as.numeric(data.rezult)
已有 1 人评分论坛币 收起 理由
happy_287422301 + 60 热心帮助其他会员

总评分: 论坛币 + 60   查看全部评分

7
qiuweibin2005 发表于 2016-4-11 15:35:23
万人往LVR 发表于 2016-4-8 11:15
as.numeric(data.rezult)
谢谢大神!!!感谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 14:57