![f268f1d21ea494e8401774b0e0187b70.png](https://i-blog.csdnimg.cn/blog_migrate/83d2ea5321df5877ae76c0138dcb8789.png)
相信一些同学对分类算法中决策算法已经有了一定的了解。
概念上可以参考:
- 决策树--信息增益,信息增益比,Geni指数的理解 - 张小呱 - 博客园
- 决策树算法 - hermione1985 - 博客园
- 决策树原理与应用:C5.0
下面我们说如何用R实现决策树算法. 采用数据集Pima- Indians- diabetes
##################决策树之C5.0###########################################
##################1、获取数据和简单了解数据##############################
diabetes=read.table("E:2019分享LearningRPima- Indians- diabetes.txt",header = FALSE,sep=',',stringsAsFactors = FALSE)
# Number of times pregnant 怀孕次数
# Plasma glucose concentration a 2 hours in an oral glucose tolerance test 口服葡萄糖耐受试验中,2小时的血浆葡萄糖浓度。
# Diastolic blood pressure (mm Hg) 舒张压(mm Hg)
# Triceps skin fold thickness (mm) 三头肌皮肤褶层厚度(mm)
# 2-Hour serum insulin (mu U/ml) 2小时血清胰岛素含量(μU/ ml)
# Body mass index (weight in kg/(height in m)^2) 体重指数(体重,kg /(身高,m)^ 2)
# Diabetes pedigree function 糖尿病家族史
# Age (years) 年龄(岁)
# Class variable (0 or 1) 类变量(0 或 1)
colnames(diabetes)<-c("PregntCnt","Pla_glus","bloodPressure","Triceps","insulin","massIndex","function","Age","Class")#给数据列命名
head(diabetes)
summary(diabetes)#查看数据整体情况
nrow(diabetes)#查看行数
########################2、变量初步筛选########################################
#####对于连续变量和分类变量,采用方差分析法(https://www.jianshu.com/p/cf0f637d5db7)########################
#####分析各解释变量与因变量之间的关系################
diabetes$Class<-as.factor(diabetes$Class)#将分类变量因子化
shapiro.test(diabetes$PregntCnt) #在进行方差分析时,需要对变量进行正态检验,若P-value<W则认为不能拒绝假设,认为数据是正态的
bartlett.test(diabetes$PregntCnt,diabetes$Class)#P<<0.5(显著性水平),方差齐次性检验不通过,方差不通过用oneway.test().通过用ano()
oneway.test(PregntCnt~Class,data=diabetes)#P<<0.5,拒绝原假设,认为有糖尿病和非糖尿病患者在怀孕次数这个变量上显著性差异
#同上方式:正态检验-->齐次性检验-->齐次则用oneway.test-->非其次用anova.lm
fac<-colnames(diabetes[,1:8])
p<-c()
F<-c()
for(i in 1:(ncol(diabetes)-1)){
shapiro<-shapiro.test(diabetes[,i])
if(shapiro$p.value<0.05){
bartlett_result<-bartlett.test(diabetes[,i],diabetes$Class)
if (bartlett_result$p.value<0.05){
oneway<-oneway.test(diabetes[,i]~diabetes$Class) #方差不齐次采用oneway.test检验
p[i]<-oneway$p.value
F[i]<-oneway[1]$statistic
}
else{
anov<-anova(lm(