R_Studio(決策樹算法)鳶尾花卉數據集Iris是一類多重變量分析的數據集【精】


 

 

  鳶尾花卉數據集Iris是一類多重變量分析的數據集

  通過花萼長度,花萼寬度,花瓣長度,花瓣寬度4個屬性預測鳶尾花卉屬於(Setosa,Versicolour,Virginica)三個種類中的哪一類

  針對iris數據集實踐決策樹算法(C4.5、C5.0),並用交叉矩陣評估模型

  

  iris數據RStudio系統自帶

 

  

 

  

Gary<-iris
#建立決策樹模型,來預測鳶尾花的種類
#重命名變量名,將預測鳶尾花卉轉換為class 通過前四個變量預測class屬於哪一個類
Gary.names<-c('sepal length','sepal width','petal length','petal width', 'class')
names(Gary)<-Gary.names
#查看維度 150條數據 5維變量
dim(Gary)
#str()查看數據框中每個變量的屬性
str(Gary)
#summary()提供最小值、最大值、四分位數和數值型變量的均值,以及因子向量和邏輯型向量的頻數統計
summary(Gary)
#設定生成隨機數的種子,種子是為了讓結果具有重復性
set.seed(1)
#將數據集拆分為訓練集和測試集,拆分比例為0.75
index<-sample(nrow(Gary),0.75*nrow(Gary),replace = F)
train<-Gary[index,]
test<-Gary[-index,]
library(C50)
#訓練數據用於建立決策樹模型
#測試集用於模型評估
mod<-C5.0(train[,-5],train[,5])
summary(mod)
#預測模型
pre1<-predict(mod,newdata=test,type='class')
tab<-table(pre1,test$class)
tab
sum(diag(tab))/sum(tab)
Gary.Script

 

 

實現過程

 

  將數據保存並重命名變量名

Gary<-iris

Gary.names<-c('sepal length','sepal width','petal length','petal width', 'class')

names(Gary)<-Gary.names

 

  dim():查看數據的維度 

  str():查看數據框中每個變量的屬性

  summary():提供最小值、最大值、四分位數和數值型變量的均值,以及因子向量和邏輯型向量的頻數統計

 

> dim(Gary)        #150條數據 5維變量
[1] 150   5

> str(Gary)        #查看了前四個數據框的屬性值
'data.frame':    150 obs. of  5 variables:
 $ sepal length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ sepal width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ petal length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ petal width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ class       : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

> summary(Gary)
  sepal length    sepal width     petal length    petal width           class   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  

 

  設定生成隨機數的種子,種子是為了讓結果具有重復性

  set.seed()只對運行該命令后的第一次隨機產生結果有效(偽隨機)

set.seed(1)

 

  將數據集拆分為訓練集和測試集,拆分比例為0.75

index<-sample(nrow(Gary),0.75*nrow(Gary),replace = F)
train<-Gary[index,]
test<-Gary[-index,]

 

  加載C50包

  C5.0算法則是C4.5算法的商業版本,較C4.5算法提高了運算效率,它加入了boosting算法,使該算法更加智能化

library(C50)

 

  訓練數據用於建立決策樹模型

  測試集用於模型評估

  C5.0(x, y, ...):其中x指定自變量(數據框或矩陣的形式),y指定因變量

 

> C5.0(train[,-5],train[,5])

Call:
C5.0.default(x = train[, -5], y = train[, 5])

Classification Tree        分類樹
Number of samples: 112     樣本樹
Number of predictors: 4     預測樹

Tree size: 3   樹高:3  
Non-standard options: attempt to group attributes    #嘗試分組屬性

 

  

> summary(mod)

Call:
C5.0.default(x = train[, -5], y = train[, 5])


C5.0 [Release 2.07 GPL Edition]      
-------------------------------

Class specified by attribute `outcome'         #"class"屬性指定的類

Read 112 cases (5 attributes) from undefined.data  #112例(5讀取從undefined.data屬性)

Decision tree:                #決策樹:

petal length <= 1.9: setosa (38)          #花瓣長度≤1.9:setosa(38)
petal length
> 1.9:                  #花瓣長度>1.9: :...petal width <= 1.6: versicolor (38/1)     #petal寬度:≤1.6:雲芝(38/1) petal width > 1.6: virginica (36/2)      #花瓣寬度>1.6:錦葵(36/2) Evaluation on training data (112 cases):      #評估在訓練數據(112例): Decision Tree                 #決策樹 ---------------- Size Errors                 #尺寸錯誤    3 3( 2.7%) <<              #3 3(2.7 %)<< (a) (b) (c) <-classified as      ---- ---- ---- 38 (a): class setosa    37 2 (b): class versicolor 1 34 (c): class virginica Attribute usage:                    #屬性 100.00% petal length                #100%的花瓣長度 66.07% petal width                 #占66.07%花瓣寬度 Time: 0.0 secs

 

  預測鳶尾花卉屬於哪一類

  用交叉矩陣評估模型

> pre1<-predict(mod,newdata=test,type='class')
> tab<-table(pre1,test$class)
> tab
            
pre1         setosa versicolor virginica
  setosa         12          0         0
  versicolor      0         11         3
  virginica       0          0        12

 

 

  預測了38組數據,其中35組數據正確,3組數據預測出錯

  對角線上的數據實際值和預測值相同,非對角線上的值為預測錯誤的值

 

  評估模型(預測)的正確率

sum(diag(tab))/sum(tab)
[1] 0.9210526

 

    diag(x = 1, nrow, ncol) 

    diag(x) <- value 

  解析: 

    x:一個矩陣,向量或一維數組,或不填寫。 

    nrow, ncol:可選 行列。 

    value :對角線的值,可以是一個值或一個向量

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM