鳶尾花卉數據集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<-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 :對角線的值,可以是一個值或一個向量
