##用R分析白葡萄酒

数据:葡萄酒http://archive.ics.uci.edu/ml/datasets/Wine+Quality
用R分析白葡萄酒:

w=read.csv('winequality-white.csv',header=T)  #读入数据
head(w) #看前几行数据
w[,12]=factor(w[,12]) #因子化
summary(w)  #看数据的总结(分位数、均值、中位数)
names(w)#共有4898个观测,12个变量

[1] “fixed.acidity” “volatile.acidity” “citric.acid”
[4] “residual.sugar” “chlorides” “free.sulfur.dioxide”
[7] “total.sulfur.dioxide” “density” “pH”
[10] “sulphates” “alcohol” “quality”
名词解释:1-固定酸度2-挥发性酸度3-柠檬酸4-残糖5-氯化物6-游离二氧化硫7-总二氧化硫8-密度9酸碱度10-硫酸盐11-酒精 12-质量(分数在0到10之间)

葡萄酒质量的分布情况:
普通的葡萄酒比好的或差的葡萄酒多得多(如图所示:分数为6的葡萄酒数量最多,低分和高分的葡萄酒数量都很少,最低分为3,最高分为9)

 summary(w1$quality)

chlorides(氯化物) 与白葡萄酒质量得分:
3-9分分别用’red’,‘blue’,‘green’,‘black’,‘purple’,‘yellow’,'orange’颜色表示
图显示:氯化物中等含量时(大约0.047左右)质量得分较高。

httchlorides(氯化物) 与白葡萄酒质量得分

酒精度与质量得分:
3-9分分别用’red’,‘blue’,‘green’,‘black’,‘purple’,‘yellow’,'orange’颜色表示
大部分白葡萄酒的质量都落在5-7间。
看较低浓度的白葡萄酒,绿色部分(5分)占比比较大;看较高浓度的白葡萄酒,紫色占比较大,且黄色占比也比低浓度的白葡萄酒大

counts=table(w1$quality,w1$alcohol)
barplot(counts,main = "test",xlab = "alcohol",ylab = "frequency",col = c('red','blue','green','black','purple','yellow','orange'))
summary(w1$quality,w1$alcohol)

Q:评估葡萄酒质量,找出高品质的葡萄酒具体与什么性质密切相关;葡萄酒质量的分布情况;性质如何影响葡萄酒的质量;根据现有数据预测新的葡萄酒的质量。

#下载所需包
install.packages("foreach")
install.packages("itertools")
install.packages("iterators")
install.packages("randomForest")
#载入
library(randomForest)
library(foreach)
library(itertools)
library(iterators)
library(missForest)
mode(w)
#决策树
install.packages("rpart")
install.packages("rpart.plot")
library(rpart)
library(rpart.plot)
a=rpart(quality~.,w)  #以quality作为因变量,其余作为自变量
a  #决策树细节,观测值有398个;偏差=SST;因变量均值
rpart.plot(a,type = 1,extra = 1,digits = 22)#此处type参数为0~5
#使用决策树来预测
new.data=data.frame(fixed.acidity=6.8,volatile.acidity=0.3,citric.acid=0.32,residual.sugar=8,chlorides=0.048,free.sulfur.dioxide=28,total.sulfur.dioxide=132,density=0.99,pH=3.2,sulphates=0.475,alcohol=10)#新的数据,没有因变量
new.data
w=read.csv('winequality-white.csv',header=T)
w[,12]=factor(w[,12])
library(rpart)
a=rpart(quality~., method="class",w)
predict(a,new.data)
install.packages("mice")  #对于缺失数据的检验
library(mice)  #用mice包中的md.pattern(data)
md.pattern(w)  #
#bagging回归
w=read.csv('winequality-white.csv',header=T)
w[,12]=factor(w[,12])
nrow(w)->n
library(ipred)
set.seed(100)
b=bagging(quality~.,w,coob=T)
b$err
plot(b$mtrees[[20]][[2]])
text(b$mtrees[[20]][[2]])
new.data=data.frame(fixed.acidity=6.8,volatile.acidity=0.3,citric.acid=0.32,residual.sugar=8,chlorides=0.048,free.sulfur.dioxide=28,total.sulfur.dioxide=132,density=0.99,pH=3.2,sulphates=0.475,alcohol=10)#新的数据,没有因变量
new.data
predict(b,new.data)
#随机森林
w=read.csv('winequality-white.csv',header=T)
w[,12]=factor(w[,12])
library(randomForest)
set.seed(100)
d=randomForest(quality~.,w,importance=T,localImp=T,proximity=T)
d$forest
names(d)
treesize(d)
a1=treesize(d,terminal = F)
hist(a1)
d$rsq
d$mse
d$importance
varImpPlot(d)
layout(matrix(c(1,2,3,3),nrow = 2,b=T))
for(i in 1:2){
barplot(d$importance[,i],horiz = T)
title(colnames(d$importance)[i])}
matplot(1:11,d$local,type = "l",xlab="variable",ylab = "local importance",main="local importance")
names(w)new.data=data.frame(fixed.acidity=6.8,volatile.acidity=0.3,citric.acid=0.32,residual.sugar=8,chlorides=0.048,free.sulfur.dioxide=28,total.sulfur.dioxide=132,density=0.99,pH=3.2,sulphates=0.475,alcohol=10)#新的数据,没有因变量
new.data
predict(d,new.data)
#对线性回归的交叉验证(若做线性回归,如果因变量是分类的,会出现错误?)w[,12]=factor(w[,12])#不要此行可以出结果
w=read.csv('winequality-white.csv',header=T)
n=4898;K=10
zz1=1:n
zz2=rep(1:5,ceiling(2182/5))[1:n]
set.seed(100)
zz2=sample(zz2,n) #有放回抽样
NMSE=rep(0,5)
NMSE0=NMSE
for(i in 1:5){m=zz1[zz2==i]a<-randomForest(quality~.,w,importance=T,localImp=T,proximity=T) #线性回归模型y0<-predict(a,w) #对训练集集预测y1=predict(a,w)  #对测试集预测NMSE0[i]=mean((w$quality-y0)^2)/mean((w$quality-mean(w$quality))^2)NMSE[i]=mean((w$quality-y1)^2)/mean((w$quality-mean(w$quality))^2)
}
NMSE0=mean(NMSE0) #训练集的标准化均方误差
NMSE=mean(NMSE)
NMSE0
#CV函数
CV=function(n,Z=10,seed=888){z=rep(1:Z,ceiling(n/Z))[1:n]set.seed(seed);z=sample(z,n)mm=list();for(i in 1:Z) mm[[i]]=(1:n)[z==i]return(mm)}#对线性回归、决策树、bagging回归、随机森林的交叉验证
library(ipred);library(randomForest);library(rpart)
D=12;Z=10;mm=CV(nrow(w),Z,9999)
NMSE=matrix(0,Z,4);J=1
set.seed(1010);for(i in 1:Z)
{m=mm[[i]];M=mean((w[m,D]-mean(w[m,D]))^2)
a=lm(quality~.,data=w[-m,])
NMSE[i,J]=mean((w[m,D]-predict(a,w[m,]))^2)/M}
J=J+1;set.seed(1010);for(i in 1:Z)
{m=mm[[i]];M=mean((w[m,D]-mean(w[m,D]))^2)
a=rpart(quality~.,data=w[-m,])
NMSE[i,J]=mean((w[m,D]-predict(a,w[m,]))^2)/M}
J=J+1;set.seed(1010);for(i in 1:Z)
{m=mm[[i]];M=mean((w[m,D]-mean(w[m,D]))^2)
a=bagging(quality~.,data=w[-m,])
NMSE[i,J]=mean((w[m,D]-predict(a,w[m,]))^2)/M}
J=J+1;set.seed(1010);for(i in 1:Z)
{m=mm[[i]];M=mean((w[m,D]-mean(w[m,D]))^2)
a=randomForest(quality~.,data=w[-m,])
NMSE[i,J]=mean((w[m,D]-predict(a,w[m,]))^2)/M}
NMSE=data.frame(NMSE)
names(NMSE)=c('lm','decision tree','bagging','random forest')
(MNMSE=apply(NMSE,2,mean));NMSE
a=c(1,2,5,7,8)
b=c(3,5,4,8,2)
plot(a,b,type="b")
library(ggplot2)
p_line=ggplot(NMSE)+geom_line(aes(x=c(1,2,3,4,5,6,7,8,9,10),y=NMSE[,1]),color="red")+geom_line(aes(x=c(1,2,3,4,5,6,7,8,9,10),y=NMSE[,2]),color="blue")
p_line

决策树结果
bagging回归 打印出的第20颗决策树的图形

随机森林,上图为变量重要性图,可以看出:free.sulfur.dioxide、volatile.acidity、alcohol很显著右下图为局部重要性图。

交叉验证结果:对线性模型、决策树、bagging回归以及随机森林做交叉验证得到如下结果:
折 线性回归 决策树回归 bagging回归 随机森林回归
1 0.7778313 0.7792430 0.7453841 0.4573739
2 0.7054163 0.7164884 0.6893053 0.4191217
3 0.7158610 0.7087307 0.6904803 0.4309574
4 0.7606892 0.8116700 0.7825707 0.5166921
5 0.6931998 0.7288387 0.7041285 0.4580505
6 0.7137352 0.7292705 0.6855257 0.4470279
7 0.7561416 0.7765915 0.7408972 0.5037373
8 0.7612899 0.7445624 0.7300632 0.4590213
9 0.7188216 0.7171960 0.6793052 0.4618602
10 0.6644633 0.7003834 0.6721447 0.3937756

平均值为
lm decision tree bagging random forest
0.7267449 0.7412975 0.7119805 0.4547618

发现用随机森林比bagging回归、线性模型、决策树好很多。

##用R分析白葡萄酒(数据来源:http://archive.ics.uci.edu/ml/datasets/Wine+Quality)相关推荐

  1. R项目:使用R分析人力资源数据

    一.分析背景 人力资源分析数据集汇聚了对大量员工的信息数据统计,包括企业因素(如部门).员工行为相关因素(如参与过项目数.每月工作时长.薪资水平等).以及工作相关因素(如绩效评估.工伤事故),这些因素 ...

  2. 数据分析的数据来源都有哪些?

    数据的获取方式: 1.获取外部的公开数据集, UCI 加州大学欧文分校开放的经典数据集,被很多数据挖掘实验室采用   http://archive.ics.uci.edu/ml/datasets.ht ...

  3. 利用python决策树分析iris数据及树状图绘制

    利用python决策树分析iris数据及树状图绘制 数据说明 数据划分 模型训练及评估 模型训练代码 模型大致评估 树状图绘制 Graphviz安装配置及入门 代码汇总 基地部门公众号 数据说明 数据 ...

  4. Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据

    #2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...

  5. CSDN:借助工具对【本博客访问来源】进行数据图表可视化(网友主要来自美国、新加坡、日本、英德加澳等)——记录数据来源截止日期20200718晚上22点

    CSDN:借助工具对[本博客访问来源]进行数据图表可视化(网友主要来自美国.新加坡.日本.英德加澳等) 目录 粉丝增量 记录数据来源截止日期20201210晚上24点 记录数据来源截止日期202007 ...

  6. UCL葡萄酒(red white wine quality)数据集字段解释、数据导入实战

    UCL葡萄酒(red white wine quality)数据集字段解释.数据导入实战 目录 UCL葡萄酒(red white wine quality)数据集字段解释.数据导入实战 #数据字段说明 ...

  7. Dataset:White Wine Quality白葡萄酒品质数据集的简介、下载、使用方法之详细攻略

    Dataset:White Wine Quality白葡萄酒品质数据集的简介.下载.使用方法之详细攻略 目录 White Wine Quality白葡萄酒品质数据集的简介 1.输入变量(基于物理化学测 ...

  8. 教你用R语言分析招聘数据,求职/转行不求人~(附代码、数据集)

    来源:R语言中文社区 作者:Joffy Zhong 本文共4500字,建议阅读8分钟. 本文针对招聘网站的数据分析岗位的数据进行分析与挖掘实战. 项目背景 在学习数据分析的路上,少不了经常逛知乎,这也 ...

  9. R语言回归模型构建、回归模型基本假设(正态性、线性、独立性、方差齐性)、回归模型诊断、car包诊断回归模型、特殊观察样本分析、数据变换、模型比较、特征筛选、交叉验证、预测变量相对重要度

    R语言回归模型构建.回归模型基本假设(正态性.线性.独立性.方差齐性).回归模型诊断.car包诊断回归模型.特殊观察样本分析.数据变换.模型比较.特征筛选.交叉验证.预测变量相对重要度 目录

最新文章

  1. IC/FPGA笔试/面试题分析(八)近期IC/FPGA笔试面试讨论群题目汇总解析
  2. 【Python】Numpy基础:数组和矢量运算
  3. Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现
  4. 在公司里,谁的不可代替性最强
  5. 树莓派C语言点灯,树莓派3 b GPIO 点亮小灯泡
  6. Javascript数据类型共有六种
  7. SQL HAVING 用法详解
  8. Java——抽象类和接口
  9. 动手学数据分析(三)- 数据重构
  10. 篮球c语言程序,源程序C代码:篮球比赛应用系统
  11. python天眼查爬虫_普通用户的天眼查爬取
  12. Codeforces Round #727 (Div. 2) B. Love Song
  13. php如何配置gii,PHP Framework YII的里的gii设置。
  14. 1968:Misspelling
  15. php 正则匹配中文
  16. 京东JD App签名/加密算法研究
  17. Flask实现JWS身份校验
  18. 华为手机无法安装ADB和HDB的处理
  19. 物料分拣系统matlab仿真,自动物料分拣机器人控制系统设计+Matlab源程序+图纸
  20. 神经网络性能评价指标

热门文章

  1. RTK固定解什么意思
  2. python 主力资金_邢不行 | 量化投资中如何计算机构、主力、散户资金流数据【视频】...
  3. 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感电工技术知识学习干货分享...
  4. 给南京沁恒芯片公司点个赞
  5. 【零基础】极星量化入门十一:远程遥控的简单办法
  6. 中衍期货开户|资深老师盘中交流
  7. Vue基础语法必知必会
  8. idea打开命令行窗口
  9. http://blog.csdn.net/anxpp/article/details/52108238
  10. 陕西师范大学,我终于来了!