寫在前面
R語言中基礎(chǔ)的機(jī)器學(xué)習(xí)主要有:分類衙熔、聚類澄暮、降維九孩、回歸(預(yù)測(cè)先馆,自變量和因變量)這積累問題。拿到數(shù)據(jù)和問題首先要會(huì)判定是這4類中的哪一種躺彬。
此前我們也用專門的教程介紹過在Python中的機(jī)器學(xué)習(xí):機(jī)器學(xué)習(xí)基礎(chǔ)手冊(cè)
本章學(xué)習(xí)Logistic 回歸煤墙、決策樹、隨機(jī)森林宪拥、支持向量機(jī)
1) 概念
監(jiān)督機(jī)器學(xué)習(xí)基于一組包含自變量和因變量的觀測(cè)值仿野。將全部數(shù)據(jù)集分為一個(gè)訓(xùn)練集和一個(gè)測(cè)試集;訓(xùn)練集用于預(yù)測(cè)模型她君,測(cè)試集用于測(cè)試模型的準(zhǔn)確度脚作。
本章將會(huì)用到rpart,rpart.plot和partykit包進(jìn)行決策樹模型及可視化;randomForest包擬合隨機(jī)森林缔刹;通過e1071包構(gòu)造支持向量機(jī)球涛。
2) 機(jī)器學(xué)習(xí)乳腺數(shù)據(jù)癌步驟:
1.讀取數(shù)據(jù)和預(yù)處理(篩選需要的變量)
2.拆分?jǐn)?shù)據(jù)集:訓(xùn)練集和預(yù)測(cè)集(7:3或8:2)
3.建模,數(shù)據(jù)單位一致則不需要標(biāo)準(zhǔn)化校镐,否則需要scale
4.預(yù)測(cè)結(jié)果不好則重新調(diào)整算法
5.預(yù)測(cè)結(jié)果好則應(yīng)用于新數(shù)據(jù)(新觀測(cè)值)
**16.1 數(shù)據(jù)準(zhǔn)備 **
本章數(shù)據(jù)集使用威斯康星州乳腺癌數(shù)據(jù)集亿扁,該數(shù)據(jù)集共11個(gè)變量:ID、腫塊厚度clumpThickness鸟廓、細(xì)胞大小的均勻性sizeUniformity从祝、細(xì)胞形狀的均勻性shapeUniformity襟己、邊際附著力maginalAdhesion、單個(gè)上皮細(xì)胞大小singleEpithelialCellSize牍陌、裸核bareNuclei擎浴、乏味染色體blandChromatin、正常核normalNucleoli毒涧、有絲分裂mitosis和類別class.
16.1.1 數(shù)據(jù)在MASS包中贮预,數(shù)據(jù)集名字為biopsy
library(MASS)head(biopsy)
## ID V1 V2 V3 V4 V5 V6 V7 V8 V9 class## 1 1000025 5 1 1 1 2 1 3 1 1 benign## 2 1002945 5 4 4 5 7 10 3 2 1 benign## 3 1015425 3 1 1 1 2 2 3 1 1 benign## 4 1016277 6 8 8 1 3 4 3 7 1 benign## 5 1017023 4 1 1 3 2 1 3 1 1 benign## 6 1017122 8 10 10 8 7 10 9 7 1 malignant
df <- biopsydf <- df[-1]head(df)
## V1 V2 V3 V4 V5 V6 V7 V8 V9 class## 1 5 1 1 1 2 1 3 1 1 benign## 2 5 4 4 5 7 10 3 2 1 benign## 3 3 1 1 1 2 2 3 1 1 benign## 4 6 8 8 1 3 4 3 7 1 benign## 5 4 1 1 3 2 1 3 1 1 benign## 6 8 10 10 8 7 10 9 7 1 malignant
names(df) <- c("clumpThickness","sizeUniformity","shapeUniformity","maginalAdhesion","singleEpithelialCellSize","bareNuclei","blandChromatin","normalNucleoli","mitosis","class")
class中benign為良性,malignant為惡性链嘀。
16.1.2 去除NA值
df <- na.omit(df)
16.1.3 抽樣(sample),抽訓(xùn)練集(train)和測(cè)試集(test)
抽樣前先加一個(gè)set.seed(1234),可以確保每次運(yùn)行程序時(shí)生成的隨機(jī)數(shù)序列是相同的档玻,從而實(shí)現(xiàn)結(jié)果的可重復(fù)性怀泊。需要注意的是,set.seed()函數(shù)應(yīng)該在隨機(jī)數(shù)生成之前調(diào)用误趴,以確保種子在生成隨機(jī)數(shù)之前被設(shè)置霹琼。
只有set.seed()函數(shù)中的設(shè)置的數(shù)字相同則隨機(jī)抽樣的結(jié)果相同
set.seed(1234)train <- sample(nrow(df),0.7*nrow(df),replace = F)df.train <- df[train,]View(df.train)df.test <- df[-train,]View(df.test)
這里的0.7也可以改成0.8。一般是7:3或8:2
16.1.4 table檢查數(shù)據(jù)的拆分情況
table(df.train$class)
## ## benign malignant ## 302 176
table(df.test$class)
## ## benign malignant ## 142 63
這步驟還有一個(gè)作用凉当,可與后面模型預(yù)測(cè)的結(jié)果對(duì)比枣申,觀察模型預(yù)測(cè)的效果。
16.2 建模
16.2.1 方法一:Logistic回歸(glm())
Logistic回歸即邏輯回歸看杭,屬于廣義線性回歸的一種忠藤。根據(jù)一組變量預(yù)測(cè)二元輸出(例如是否,好和壞)楼雹。
-
16.2.1.1 建模
fit.logit <- glm(class~.,data = df.train,family = binomial())summary(fit.logit)
## ## Call:## glm(formula = class ~ ., family = binomial(), data = df.train)## ## Coefficients:## Estimate Std. Error z value Pr(>|z|) ## (Intercept) -9.68650 1.29722 -7.467 8.20e-14 ***## clumpThickness 0.48002 0.15244 3.149 0.00164 ** ## sizeUniformity 0.05643 0.29272 0.193 0.84714 ## shapeUniformity 0.13180 0.31643 0.417 0.67703 ## maginalAdhesion 0.40721 0.14038 2.901 0.00372 ** ## singleEpithelialCellSize -0.03274 0.18095 -0.181 0.85643 ## bareNuclei 0.44744 0.11176 4.004 6.24e-05 ***## blandChromatin 0.48257 0.19220 2.511 0.01205 * ## normalNucleoli 0.23550 0.12903 1.825 0.06798 . ## mitosis 0.66184 0.28785 2.299 0.02149 * ## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1## ## (Dispersion parameter for binomial family taken to be 1)## ## Null deviance: 629.040 on 477 degrees of freedom## Residual deviance: 80.054 on 468 degrees of freedom## AIC: 100.05## ## Number of Fisher Scoring iterations: 8
注:AIC(Akaike Information Criterion)是一種模型選擇準(zhǔn)則模孩,用于比較不同模型的擬合優(yōu)度和復(fù)雜度。在統(tǒng)計(jì)學(xué)中贮缅,AIC值是一種用于評(píng)估統(tǒng)計(jì)模型的相對(duì)優(yōu)劣的指標(biāo)榨咐。
AIC值越低,表示模型對(duì)數(shù)據(jù)的擬合越好且復(fù)雜度較低谴供,因此更優(yōu)于AIC值較高的模型块茁。
結(jié)果中顯示9個(gè)自變量的P值并不都小于0.05,因此可以將不顯著的sizeUniformity和shapeUniformity桂肌、singleEpithelialCellSize去除后再次擬合模型数焊。
-
16.2.1.2 驗(yàn)證模型predict()
具體用法可以參考?predict()-predict.glm
prob <- predict(object = fit.logit,newdata = df.test,type = "response")prob
## 3 5 6 8 9 16 ## 0.0112449317 0.0258431337 0.9999625461 0.0051061434 0.0236199749 0.4672106476 ## 17 21 25 27 28 30 ## 0.0071994974 0.9997948553 0.0027758628 0.0048816533 0.0115838020 0.0013782551 ## 33 38 39 46 49 50 ## 0.9973585454 0.1877874448 0.9975955959 0.0033190843 0.0258431337 0.9814047180 ## 57 58 59 64 71 74 ## 0.9629829469 0.8156184585 0.7715802512 0.3224788592 0.0150250656 0.9997623868 ## 75 82 83 84 87 92 ## 0.8789463614 0.0107790970 0.0196950113 0.0726793680 0.7845629625 0.0041441570 ## 93 94 95 98 111 112 ## 0.0116130282 0.0017150684 0.0044784421 0.0186346093 0.0563315554 0.9205175298 ## 113 114 119 126 130 131 ## 0.9999639103 0.9980298628 0.0024243798 0.0017150684 0.0008153674 0.0150250656 ## 132 134 135 136 139 142 ## 0.0044784421 0.0056466030 0.0043238397 0.0454130370 0.0082054400 0.0017107090 ## 143 152 155 157 163 173 ## 0.9807771867 0.9871222852 0.0010592254 0.0020695344 0.0072177426 0.0017150684 ## 178 179 182 186 191 193 ## 0.9402769641 0.0116130282 0.0010592254 0.0046267909 0.9999560154 0.0115838020 ## 196 199 203 206 210 215 ## 0.0116130282 0.0010592254 0.0027758628 0.9999906580 0.0192428183 0.9999956479 ## 228 231 232 239 240 244 ## 0.9967019235 0.9928787724 0.9993185258 0.9999986898 0.9953604613 0.0419223255 ## 245 246 253 254 255 261 ## 0.0027758628 0.0427263017 0.9916847043 0.9979190679 0.9521833608 0.9999275421 ## 272 274 275 277 284 287 ## 0.0186346093 0.3161619709 0.0091169000 0.0044670902 0.9912296828 0.9999999001 ## 288 291 297 299 301 304 ## 0.0043238397 0.0010592254 0.7268339179 0.0284488362 0.9969425517 0.0027758628 ## 311 312 313 314 317 319 ## 0.0026798777 0.0010592254 0.9240485470 0.0010592254 0.8887971682 0.0025168532 ## 326 329 332 335 339 341 ## 0.0086003882 0.8792851364 0.0354998923 0.9912165606 0.0017720431 0.9973941797 ## 343 344 346 351 354 368 ## 0.0017107090 0.0010592254 0.0010592254 0.0160692402 0.9996650004 0.9999796693 ## 369 373 381 383 395 405 ## 0.0013782551 0.0082054400 0.0010592254 0.0164146326 0.0023604022 0.0031955036 ## 407 408 413 416 417 425 ## 0.0086776181 0.0017150684 0.9987294489 0.3017208118 0.9981615411 0.0027617842 ## 426 429 430 431 434 437 ## 0.9999965519 0.0017150684 0.0027688146 0.0024280604 0.0074914917 0.7622791536 ## 448 450 452 453 463 466 ## 0.0071812979 0.9998347506 0.0071812979 0.0062141459 0.0257150794 0.9998549548 ## 467 469 470 479 480 481 ## 0.9996824181 0.0044557670 0.0019562146 0.0075949935 0.9992835627 0.0074185118 ## 488 498 502 505 509 511 ## 0.9999971016 0.0047131973 0.0071994974 0.0010592254 0.0071812979 0.0010592254 ## 519 520 522 524 529 532 ## 0.0047252271 0.9888878694 0.0043128780 0.9990358935 0.0223519515 0.0086776181 ## 536 539 540 546 548 551 ## 0.0054147208 0.0071994974 0.0185880445 0.0115838020 0.0017675392 0.0044670902 ## 554 557 560 564 566 570 ## 0.1021246709 0.0214925224 0.0115838020 0.0044670902 0.9999763468 0.9998813632 ## 573 574 575 578 579 580 ## 0.0044670902 0.0017150684 0.9854868522 0.0017150684 0.0017150684 0.0027758628 ## 583 596 598 600 601 603 ## 0.9987812279 0.0115838020 0.0241193817 0.0116066211 0.0044670902 0.0071994974 ## 605 606 608 609 611 613 ## 0.9978381918 0.9998157200 0.0010592254 0.9998041683 0.9998905908 0.9999999873 ## 628 629 632 638 640 641 ## 0.0101570805 0.0017107090 0.0115838020 0.0386856158 0.0160692402 0.0100044442 ## 646 648 655 656 658 660 ## 0.0044670902 0.0023884049 0.0072177426 0.0044670902 0.0922590347 0.0010592254 ## 665 667 668 670 672 676 ## 0.0100297260 0.0248002530 0.0072177426 0.9982067529 0.0114264349 0.0066024464 ## 678 679 680 681 684 686 ## 0.0071812979 0.0010592254 0.0017107090 0.9999999658 0.0010592254 0.0010592254 ## 694 ## 0.0086227000
type= “response” 返回一個(gè)概率值崎场。結(jié)果得到了預(yù)測(cè)腫瘤為惡性的概率昌跌,概率大于0.5的病例被分為惡性腫瘤,概率小于或等于0.5的被分為良性照雁。
prob>0.5
## 3 5 6 8 9 16 17 21 25 27 28 30 33 ## FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE ## 38 39 46 49 50 57 58 59 64 71 74 75 82 ## FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE ## 83 84 87 92 93 94 95 98 111 112 113 114 119 ## FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE ## 126 130 131 132 134 135 136 139 142 143 152 155 157 ## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE ## 163 173 178 179 182 186 191 193 196 199 203 206 210 ## FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE ## 215 228 231 232 239 240 244 245 246 253 254 255 261 ## TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE ## 272 274 275 277 284 287 288 291 297 299 301 304 311 ## FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE ## 312 313 314 317 319 326 329 332 335 339 341 343 344 ## FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE ## 346 351 354 368 369 373 381 383 395 405 407 408 413 ## FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE ## 416 417 425 426 429 430 431 434 437 448 450 452 453 ## FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE ## 463 466 467 469 470 479 480 481 488 498 502 505 509 ## FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE ## 511 519 520 522 524 529 532 536 539 540 546 548 551 ## FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE ## 554 557 560 564 566 570 573 574 575 578 579 580 583 ## FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE ## 596 598 600 601 603 605 606 608 609 611 613 628 629 ## FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE ## 632 638 640 641 646 648 655 656 658 660 665 667 668 ## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE ## 670 672 676 678 679 680 681 684 686 694 ## TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
logit.pred <- factor(prob>0.5,levels = c(FALSE,TRUE),labels=c("benign","malignant"))
轉(zhuǎn)換為因子蚕愤,并且用良性和惡性作為標(biāo)簽來標(biāo)記
比較真實(shí)和預(yù)測(cè)的結(jié)果:
data.frame(Actual=df.test$class,Predict=logit.pred)#比較真實(shí)的和預(yù)測(cè)的結(jié)果
## Actual Predict## 3 benign benign## 5 benign benign## 6 malignant malignant## 8 benign benign## 9 benign benign## 16 malignant benign## 17 benign benign## 21 malignant malignant## 25 benign benign## 27 benign benign## 28 benign benign## 30 benign benign## 33 malignant malignant## 38 benign benign## 39 malignant malignant## 46 benign benign## 49 benign benign## 50 malignant malignant## 57 malignant malignant## 58 malignant malignant## 59 malignant malignant## 64 malignant benign## 71 benign benign## 74 malignant malignant## 75 malignant malignant## 82 benign benign## 83 benign benign## 84 benign benign## 87 malignant malignant## 92 benign benign## 93 benign benign## 94 benign benign## 95 benign benign## 98 benign benign## 111 benign benign## 112 malignant malignant## 113 malignant malignant## 114 malignant malignant## 119 benign benign## 126 benign benign## 130 benign benign## 131 benign benign## 132 benign benign## 134 benign benign## 135 benign benign## 136 benign benign## 139 benign benign## 142 benign benign## 143 malignant malignant## 152 malignant malignant## 155 benign benign## 157 benign benign## 163 benign benign## 173 benign benign## 178 malignant malignant## 179 benign benign## 182 benign benign## 186 benign benign## 191 malignant malignant## 193 benign benign## 196 benign benign## 199 benign benign## 203 benign benign## 206 malignant malignant## 210 benign benign## 215 malignant malignant## 228 malignant malignant## 231 malignant malignant## 232 malignant malignant## 239 malignant malignant## 240 malignant malignant## 244 benign benign## 245 benign benign## 246 benign benign## 253 benign malignant## 254 malignant malignant## 255 malignant malignant## 261 malignant malignant## 272 benign benign## 274 malignant benign## 275 benign benign## 277 benign benign## 284 malignant malignant## 287 malignant malignant## 288 benign benign## 291 benign benign## 297 benign malignant## 299 benign benign## 301 malignant malignant## 304 benign benign## 311 benign benign## 312 benign benign## 313 malignant malignant## 314 benign benign## 317 malignant malignant## 319 benign benign## 326 benign benign## 329 malignant malignant## 332 benign benign## 335 malignant malignant## 339 benign benign## 341 malignant malignant## 343 benign benign## 344 benign benign## 346 benign benign## 351 benign benign## 354 malignant malignant## 368 malignant malignant## 369 benign benign## 373 benign benign## 381 benign benign## 383 benign benign## 395 benign benign## 405 benign benign## 407 benign benign## 408 benign benign## 413 malignant malignant## 416 benign benign## 417 malignant malignant## 425 benign benign## 426 malignant malignant## 429 benign benign## 430 benign benign## 431 benign benign## 434 benign benign## 437 malignant malignant## 448 benign benign## 450 malignant malignant## 452 benign benign## 453 benign benign## 463 benign benign## 466 malignant malignant## 467 malignant malignant## 469 benign benign## 470 benign benign## 479 benign benign## 480 malignant malignant## 481 benign benign## 488 malignant malignant## 498 benign benign## 502 benign benign## 505 benign benign## 509 benign benign## 511 benign benign## 519 benign benign## 520 malignant malignant## 522 benign benign## 524 malignant malignant## 529 benign benign## 532 benign benign## 536 benign benign## 539 benign benign## 540 benign benign## 546 benign benign## 548 benign benign## 551 benign benign## 554 benign benign## 557 benign benign## 560 benign benign## 564 benign benign## 566 malignant malignant## 570 malignant malignant## 573 benign benign## 574 benign benign## 575 malignant malignant## 578 benign benign## 579 benign benign## 580 benign benign## 583 malignant malignant## 596 benign benign## 598 benign benign## 600 benign benign## 601 benign benign## 603 benign benign## 605 malignant malignant## 606 malignant malignant## 608 benign benign## 609 malignant malignant## 611 malignant malignant## 613 malignant malignant## 628 benign benign## 629 benign benign## 632 benign benign## 638 benign benign## 640 benign benign## 641 benign benign## 646 benign benign## 648 benign benign## 655 benign benign## 656 benign benign## 658 benign benign## 660 benign benign## 665 benign benign## 667 benign benign## 668 benign benign## 670 malignant malignant## 672 benign benign## 676 benign benign## 678 benign benign## 679 benign benign## 680 benign benign## 681 malignant malignant## 684 benign benign## 686 benign benign## 694 benign benign
logistic.pref <- table(df.test$class,logit.pred,dnn = c("Acutal","Predict"))#生成混淆矩陣logistic.pref
## Predict## Acutal benign malignant## benign 140 2## malignant 3 60
注:
table()函數(shù)中的參數(shù)dnn代表”dimnames”答恶,它用于指定結(jié)果表格的維度名稱。在特定情況下萍诱,dnn參數(shù)允許您為結(jié)果表的行和列提供自定義名稱悬嗓,以便更好地描述數(shù)據(jù)。
這里結(jié)果表的行名稱將被命名為”Actual”裕坊,列名稱將被命名為”Predict”包竹。這樣,生成的表格將具有更直觀的標(biāo)簽來表示實(shí)際值和預(yù)測(cè)值之間的關(guān)系籍凝。
混淆矩陣解讀:
預(yù)測(cè)中有140個(gè)為良性周瞎,其中2個(gè)預(yù)測(cè)錯(cuò)了,實(shí)際為142個(gè)為良性饵蒂;60個(gè)為惡性声诸,其中3個(gè)預(yù)測(cè)錯(cuò)了,實(shí)際上63個(gè)為惡性退盯。
準(zhǔn)確度計(jì)算
在該例子中彼乌,準(zhǔn)確度為(140+60)/205=98%。
-
16.2.1.3 優(yōu)化模型
在該例子中模型預(yù)測(cè)的準(zhǔn)確度還不錯(cuò)渊迁,可以不用優(yōu)化慰照。如果要優(yōu)化,可以將P值不顯著的那3個(gè)變量刪除后重新預(yù)測(cè)模型琉朽。
16.2.2 方法二:決策樹 rpart()
決策樹的基本思想是對(duì)自變量進(jìn)行二元分離毒租,從而構(gòu)造一顆可用于預(yù)測(cè)新觀測(cè)值所屬類別的樹。包括經(jīng)典決策樹和條件推斷樹箱叁。
-
16.2.2.1 經(jīng)典決策樹
1)建模-語法
library(rpart)library(rpart.plot)dtree <- rpart(formula, data=, method = "class", control = rpart.control(), ...)dtree$cptabledtree.pruned <- prune(dtree,cp=)#可選項(xiàng)蝌衔,用于修剪決策樹summary(dtree)rpart.plot(dtree,type=2)
rpart()參數(shù):
formula: 用于指定模型的公式,通常采用自變量和因變量的關(guān)系描述蝌蹂。
data: 包含數(shù)據(jù)的數(shù)據(jù)框或其他可用于模型擬合的對(duì)象噩斟。
method: 用于指定分裂規(guī)則的方法。默認(rèn)值為”anova”孤个,表示采用方差分析進(jìn)行分裂剃允。其他可選值包括”class”(分類問題)和”exp”(指數(shù)損失函數(shù))。
control: 控制決策樹構(gòu)建過程的參數(shù)設(shè)置齐鲤〕夥希可以使用rpart.control()函數(shù)創(chuàng)建一個(gè)控制參數(shù)對(duì)象,也可以直接提供參數(shù)的值给郊。
…: 其他可選參數(shù)牡肉,用于進(jìn)一步控制模型擬合過程。
rpart.plot()參數(shù):
type: 可視化類型的選擇淆九。默認(rèn)值為2统锤,表示繪制帶有節(jié)點(diǎn)標(biāo)簽和箭頭的決策樹毛俏。其他可選值包括0(只繪制決策樹的框架)和1(繪制帶有節(jié)點(diǎn)標(biāo)簽但沒有箭頭的決策樹)∷橇…: 其他可選參數(shù)辑奈,用于進(jìn)一步控制圖形的外觀和布局雕憔。
dtree$cptable
返回的結(jié)果中塔粒,cp為復(fù)雜度參數(shù)品追,用于懲罰過大的樹;nsplit為分支的數(shù)量鸦泳,確定樹的大小银锻,有n個(gè)分支則說明該樹有n+1個(gè)終端節(jié)點(diǎn);rel error 為訓(xùn)練集中各種樹對(duì)應(yīng)的誤差率做鹰;xerror為交叉驗(yàn)證誤差击纬,即基于訓(xùn)練集所得的10折交叉驗(yàn)證誤差;xstd為交叉驗(yàn)證誤差的標(biāo)準(zhǔn)差誊垢。
2)驗(yàn)證模型
方法如上掉弛。
3)舉例
library(rpart)library(rpart.plot)
## Warning: 程輯包'rpart.plot'是用R版本4.3.2 來建造的
dtree <- rpart(class~., data=df.train, method = "class")dtree$cptable
## CP nsplit rel error xerror xstd## 1 0.79545455 0 1.00000000 1.0000000 0.05991467## 2 0.07954545 1 0.20454545 0.2386364 0.03516748## 3 0.01704545 2 0.12500000 0.1818182 0.03104673## 4 0.01000000 5 0.07386364 0.1647727 0.02965484
summary(dtree)
## Call:## rpart(formula = class ~ ., data = df.train, method = "class")## n= 478 ## ## CP nsplit rel error xerror xstd## 1 0.79545455 0 1.00000000 1.0000000 0.05991467## 2 0.07954545 1 0.20454545 0.2386364 0.03516748## 3 0.01704545 2 0.12500000 0.1818182 0.03104673## 4 0.01000000 5 0.07386364 0.1647727 0.02965484## ## Variable importance## sizeUniformity shapeUniformity blandChromatin ## 21 18 15 ## singleEpithelialCellSize normalNucleoli maginalAdhesion ## 14 14 13 ## bareNuclei clumpThickness ## 4 2 ## ## Node number 1: 478 observations, complexity param=0.7954545## predicted class=benign expected loss=0.3682008 P(node) =1## class counts: 302 176## probabilities: 0.632 0.368 ## left son=2 (320 obs) right son=3 (158 obs)## Primary splits:## sizeUniformity < 3.5 to the left, improve=155.9749, (0 missing)## shapeUniformity < 3.5 to the left, improve=152.4471, (0 missing)## bareNuclei < 2.5 to the left, improve=141.3332, (0 missing)## blandChromatin < 3.5 to the left, improve=139.3239, (0 missing)## singleEpithelialCellSize < 2.5 to the left, improve=132.7007, (0 missing)## Surrogate splits:## shapeUniformity < 3.5 to the left, agree=0.937, adj=0.810, (0 split)## blandChromatin < 3.5 to the left, agree=0.900, adj=0.696, (0 split)## singleEpithelialCellSize < 3.5 to the left, agree=0.893, adj=0.677, (0 split)## normalNucleoli < 2.5 to the left, agree=0.879, adj=0.633, (0 split)## maginalAdhesion < 3.5 to the left, agree=0.874, adj=0.620, (0 split)## ## Node number 2: 320 observations, complexity param=0.07954545## predicted class=benign expected loss=0.084375 P(node) =0.6694561## class counts: 293 27## probabilities: 0.916 0.084 ## left son=4 (294 obs) right son=5 (26 obs)## Primary splits:## bareNuclei < 4.5 to the left, improve=26.54631, (0 missing)## normalNucleoli < 3.5 to the left, improve=20.08477, (0 missing)## clumpThickness < 6.5 to the left, improve=17.48577, (0 missing)## shapeUniformity < 3.5 to the left, improve=17.19825, (0 missing)## blandChromatin < 3.5 to the left, improve=15.97866, (0 missing)## Surrogate splits:## clumpThickness < 7.5 to the left, agree=0.944, adj=0.308, (0 split)## shapeUniformity < 4.5 to the left, agree=0.938, adj=0.231, (0 split)## normalNucleoli < 4.5 to the left, agree=0.938, adj=0.231, (0 split)## blandChromatin < 4.5 to the left, agree=0.931, adj=0.154, (0 split)## singleEpithelialCellSize < 3.5 to the left, agree=0.928, adj=0.115, (0 split)## ## Node number 3: 158 observations## predicted class=malignant expected loss=0.05696203 P(node) =0.3305439## class counts: 9 149## probabilities: 0.057 0.943 ## ## Node number 4: 294 observations, complexity param=0.01704545## predicted class=benign expected loss=0.02380952 P(node) =0.6150628## class counts: 287 7## probabilities: 0.976 0.024 ## left son=8 (272 obs) right son=9 (22 obs)## Primary splits:## bareNuclei < 2.5 to the left, improve=4.121212, (0 missing)## blandChromatin < 3.5 to the left, improve=2.639362, (0 missing)## normalNucleoli < 3.5 to the left, improve=2.349593, (0 missing)## sizeUniformity < 2.5 to the left, improve=2.245614, (0 missing)## shapeUniformity < 2.5 to the left, improve=1.924300, (0 missing)## Surrogate splits:## mitosis < 2.5 to the left, agree=0.929, adj=0.045, (0 split)## ## Node number 5: 26 observations, complexity param=0.01704545## predicted class=malignant expected loss=0.2307692 P(node) =0.05439331## class counts: 6 20## probabilities: 0.231 0.769 ## left son=10 (7 obs) right son=11 (19 obs)## Primary splits:## shapeUniformity < 1.5 to the left, improve=4.478890, (0 missing)## sizeUniformity < 1.5 to the left, improve=4.430769, (0 missing)## clumpThickness < 3.5 to the left, improve=3.591880, (0 missing)## normalNucleoli < 2 to the left, improve=3.230769, (0 missing)## singleEpithelialCellSize < 2.5 to the left, improve=2.355769, (0 missing)## Surrogate splits:## sizeUniformity < 1.5 to the left, agree=0.885, adj=0.571, (0 split)## singleEpithelialCellSize < 2.5 to the left, agree=0.885, adj=0.571, (0 split)## clumpThickness < 1.5 to the left, agree=0.846, adj=0.429, (0 split)## maginalAdhesion < 1.5 to the left, agree=0.769, adj=0.143, (0 split)## blandChromatin < 1.5 to the left, agree=0.769, adj=0.143, (0 split)## ## Node number 8: 272 observations## predicted class=benign expected loss=0 P(node) =0.5690377## class counts: 272 0## probabilities: 1.000 0.000 ## ## Node number 9: 22 observations, complexity param=0.01704545## predicted class=benign expected loss=0.3181818 P(node) =0.0460251## class counts: 15 7## probabilities: 0.682 0.318 ## left son=18 (14 obs) right son=19 (8 obs)## Primary splits:## clumpThickness < 4.5 to the left, improve=7.795455, (0 missing)## sizeUniformity < 2.5 to the left, improve=5.964502, (0 missing)## shapeUniformity < 2.5 to the left, improve=5.964502, (0 missing)## blandChromatin < 2.5 to the left, improve=4.454545, (0 missing)## singleEpithelialCellSize < 2.5 to the left, improve=2.366883, (0 missing)## Surrogate splits:## sizeUniformity < 1.5 to the left, agree=0.864, adj=0.625, (0 split)## shapeUniformity < 2.5 to the left, agree=0.864, adj=0.625, (0 split)## normalNucleoli < 1.5 to the left, agree=0.864, adj=0.625, (0 split)## maginalAdhesion < 3.5 to the left, agree=0.818, adj=0.500, (0 split)## blandChromatin < 3.5 to the left, agree=0.818, adj=0.500, (0 split)## ## Node number 10: 7 observations## predicted class=benign expected loss=0.2857143 P(node) =0.01464435## class counts: 5 2## probabilities: 0.714 0.286 ## ## Node number 11: 19 observations## predicted class=malignant expected loss=0.05263158 P(node) =0.03974895## class counts: 1 18## probabilities: 0.053 0.947 ## ## Node number 18: 14 observations## predicted class=benign expected loss=0 P(node) =0.0292887## class counts: 14 0## probabilities: 1.000 0.000 ## ## Node number 19: 8 observations## predicted class=malignant expected loss=0.125 P(node) =0.0167364## class counts: 1 7## probabilities: 0.125 0.875
rpart.plot(dtree,type=2)
class <- predict(object = dtree,newdata = df.test,type = "class")data.frame(Actual=df.test$class,Predict=class)#比較真實(shí)的和預(yù)測(cè)的結(jié)果
## Actual Predict## 3 benign benign## 5 benign benign## 6 malignant malignant## 8 benign benign## 9 benign benign## 16 malignant malignant## 17 benign benign## 21 malignant malignant## 25 benign benign## 27 benign benign## 28 benign benign## 30 benign benign## 33 malignant malignant## 38 benign benign## 39 malignant malignant## 46 benign benign## 49 benign benign## 50 malignant malignant## 57 malignant malignant## 58 malignant benign## 59 malignant malignant## 64 malignant benign## 71 benign benign## 74 malignant malignant## 75 malignant malignant## 82 benign benign## 83 benign benign## 84 benign benign## 87 malignant malignant## 92 benign benign## 93 benign benign## 94 benign benign## 95 benign benign## 98 benign benign## 111 benign benign## 112 malignant malignant## 113 malignant malignant## 114 malignant malignant## 119 benign benign## 126 benign benign## 130 benign benign## 131 benign benign## 132 benign benign## 134 benign benign## 135 benign benign## 136 benign benign## 139 benign benign## 142 benign benign## 143 malignant malignant## 152 malignant malignant## 155 benign benign## 157 benign benign## 163 benign benign## 173 benign benign## 178 malignant malignant## 179 benign benign## 182 benign benign## 186 benign benign## 191 malignant malignant## 193 benign benign## 196 benign benign## 199 benign benign## 203 benign benign## 206 malignant malignant## 210 benign benign## 215 malignant malignant## 228 malignant malignant## 231 malignant malignant## 232 malignant malignant## 239 malignant malignant## 240 malignant malignant## 244 benign benign## 245 benign benign## 246 benign benign## 253 benign malignant## 254 malignant malignant## 255 malignant malignant## 261 malignant malignant## 272 benign benign## 274 malignant malignant## 275 benign benign## 277 benign benign## 284 malignant malignant## 287 malignant malignant## 288 benign benign## 291 benign benign## 297 benign malignant## 299 benign benign## 301 malignant malignant## 304 benign benign## 311 benign benign## 312 benign benign## 313 malignant malignant## 314 benign benign## 317 malignant malignant## 319 benign benign## 326 benign benign## 329 malignant malignant## 332 benign benign## 335 malignant malignant## 339 benign benign## 341 malignant malignant## 343 benign benign## 344 benign benign## 346 benign benign## 351 benign benign## 354 malignant malignant## 368 malignant malignant## 369 benign benign## 373 benign benign## 381 benign benign## 383 benign benign## 395 benign benign## 405 benign benign## 407 benign benign## 408 benign benign## 413 malignant malignant## 416 benign benign## 417 malignant malignant## 425 benign benign## 426 malignant malignant## 429 benign benign## 430 benign benign## 431 benign benign## 434 benign benign## 437 malignant malignant## 448 benign benign## 450 malignant malignant## 452 benign benign## 453 benign benign## 463 benign benign## 466 malignant malignant## 467 malignant malignant## 469 benign benign## 470 benign benign## 479 benign benign## 480 malignant malignant## 481 benign benign## 488 malignant malignant## 498 benign benign## 502 benign benign## 505 benign benign## 509 benign benign## 511 benign benign## 519 benign benign## 520 malignant malignant## 522 benign benign## 524 malignant malignant## 529 benign benign## 532 benign benign## 536 benign benign## 539 benign benign## 540 benign benign## 546 benign benign## 548 benign benign## 551 benign benign## 554 benign malignant## 557 benign benign## 560 benign benign## 564 benign benign## 566 malignant malignant## 570 malignant malignant## 573 benign benign## 574 benign benign## 575 malignant malignant## 578 benign benign## 579 benign benign## 580 benign benign## 583 malignant malignant## 596 benign benign## 598 benign benign## 600 benign benign## 601 benign benign## 603 benign benign## 605 malignant malignant## 606 malignant malignant## 608 benign benign## 609 malignant malignant## 611 malignant malignant## 613 malignant malignant## 628 benign benign## 629 benign benign## 632 benign benign## 638 benign benign## 640 benign benign## 641 benign benign## 646 benign benign## 648 benign benign## 655 benign benign## 656 benign benign## 658 benign malignant## 660 benign benign## 665 benign benign## 667 benign benign## 668 benign benign## 670 malignant malignant## 672 benign benign## 676 benign benign## 678 benign benign## 679 benign benign## 680 benign benign## 681 malignant malignant## 684 benign benign## 686 benign benign## 694 benign benign
dtree.pref <- table(df.test$class,class,dnn = c("Acutal","Predict"))#生成混淆矩陣acc <- sum(diag(dtree.pref))/nrow(df.test)*100 #計(jì)算準(zhǔn)確度print(acc)
## [1] 97.07317
結(jié)果顯示準(zhǔn)確率達(dá)到97%
-
16.2.2.2 條件決策樹Conditional Inference Tree(ctree)
1)建模-語法
library(partykit)fit.ctree <- ctree(formula, data=, control = rpart.control(), ...)plot(fit.ctree)
2)舉例
library(partykit)
## Warning: 程輯包'partykit'是用R版本4.3.2 來建造的
## 載入需要的程輯包:libcoin
## Warning: 程輯包'libcoin'是用R版本4.3.2 來建造的
fit.ctree <- ctree(class~., data=df.train)plot(fit.ctree)
pred <- predict(object = fit.ctree,newdata = df.test,type = "response")pred
## 3 5 6 8 9 16 17 21 ## benign benign malignant benign benign malignant benign malignant ## 25 27 28 30 33 38 39 46 ## benign benign benign benign malignant benign malignant benign ## 49 50 57 58 59 64 71 74 ## benign malignant malignant benign malignant benign benign malignant ## 75 82 83 84 87 92 93 94 ## malignant benign benign benign malignant benign benign benign ## 95 98 111 112 113 114 119 126 ## benign benign benign malignant malignant malignant benign benign ## 130 131 132 134 135 136 139 142 ## benign benign benign benign benign benign benign benign ## 143 152 155 157 163 173 178 179 ## malignant malignant benign benign benign benign malignant benign ## 182 186 191 193 196 199 203 206 ## benign benign malignant benign benign benign benign malignant ## 210 215 228 231 232 239 240 244 ## benign malignant malignant malignant malignant malignant malignant benign ## 245 246 253 254 255 261 272 274 ## benign benign malignant malignant malignant malignant benign malignant ## 275 277 284 287 288 291 297 299 ## benign benign malignant malignant benign benign malignant benign ## 301 304 311 312 313 314 317 319 ## malignant benign benign benign malignant benign malignant benign ## 326 329 332 335 339 341 343 344 ## benign malignant benign malignant benign malignant benign benign ## 346 351 354 368 369 373 381 383 ## benign benign malignant malignant benign benign benign benign ## 395 405 407 408 413 416 417 425 ## benign benign benign benign malignant benign malignant benign ## 426 429 430 431 434 437 448 450 ## malignant benign benign benign benign malignant benign malignant ## 452 453 463 466 467 469 470 479 ## benign benign benign malignant malignant benign benign benign ## 480 481 488 498 502 505 509 511 ## malignant benign malignant benign benign benign benign benign ## 519 520 522 524 529 532 536 539 ## benign malignant benign malignant benign benign benign benign ## 540 546 548 551 554 557 560 564 ## benign benign benign benign malignant benign benign benign ## 566 570 573 574 575 578 579 580 ## malignant malignant benign benign malignant benign benign benign ## 583 596 598 600 601 603 605 606 ## malignant benign benign benign benign benign malignant malignant ## 608 609 611 613 628 629 632 638 ## benign malignant malignant malignant benign benign benign benign ## 640 641 646 648 655 656 658 660 ## benign benign benign benign benign benign malignant benign ## 665 667 668 670 672 676 678 679 ## benign benign benign malignant benign benign benign benign ## 680 681 684 686 694 ## benign malignant benign benign benign ## Levels: benign malignant
data.frame(Actual=df.test$class,Predict=pred)#比較真實(shí)的和預(yù)測(cè)的結(jié)果
## Actual Predict## 3 benign benign## 5 benign benign## 6 malignant malignant## 8 benign benign## 9 benign benign## 16 malignant malignant## 17 benign benign## 21 malignant malignant## 25 benign benign## 27 benign benign## 28 benign benign## 30 benign benign## 33 malignant malignant## 38 benign benign## 39 malignant malignant## 46 benign benign## 49 benign benign## 50 malignant malignant## 57 malignant malignant## 58 malignant benign## 59 malignant malignant## 64 malignant benign## 71 benign benign## 74 malignant malignant## 75 malignant malignant## 82 benign benign## 83 benign benign## 84 benign benign## 87 malignant malignant## 92 benign benign## 93 benign benign## 94 benign benign## 95 benign benign## 98 benign benign## 111 benign benign## 112 malignant malignant## 113 malignant malignant## 114 malignant malignant## 119 benign benign## 126 benign benign## 130 benign benign## 131 benign benign## 132 benign benign## 134 benign benign## 135 benign benign## 136 benign benign## 139 benign benign## 142 benign benign## 143 malignant malignant## 152 malignant malignant## 155 benign benign## 157 benign benign## 163 benign benign## 173 benign benign## 178 malignant malignant## 179 benign benign## 182 benign benign## 186 benign benign## 191 malignant malignant## 193 benign benign## 196 benign benign## 199 benign benign## 203 benign benign## 206 malignant malignant## 210 benign benign## 215 malignant malignant## 228 malignant malignant## 231 malignant malignant## 232 malignant malignant## 239 malignant malignant## 240 malignant malignant## 244 benign benign## 245 benign benign## 246 benign benign## 253 benign malignant## 254 malignant malignant## 255 malignant malignant## 261 malignant malignant## 272 benign benign## 274 malignant malignant## 275 benign benign## 277 benign benign## 284 malignant malignant## 287 malignant malignant## 288 benign benign## 291 benign benign## 297 benign malignant## 299 benign benign## 301 malignant malignant## 304 benign benign## 311 benign benign## 312 benign benign## 313 malignant malignant## 314 benign benign## 317 malignant malignant## 319 benign benign## 326 benign benign## 329 malignant malignant## 332 benign benign## 335 malignant malignant## 339 benign benign## 341 malignant malignant## 343 benign benign## 344 benign benign## 346 benign benign## 351 benign benign## 354 malignant malignant## 368 malignant malignant## 369 benign benign## 373 benign benign## 381 benign benign## 383 benign benign## 395 benign benign## 405 benign benign## 407 benign benign## 408 benign benign## 413 malignant malignant## 416 benign benign## 417 malignant malignant## 425 benign benign## 426 malignant malignant## 429 benign benign## 430 benign benign## 431 benign benign## 434 benign benign## 437 malignant malignant## 448 benign benign## 450 malignant malignant## 452 benign benign## 453 benign benign## 463 benign benign## 466 malignant malignant## 467 malignant malignant## 469 benign benign## 470 benign benign## 479 benign benign## 480 malignant malignant## 481 benign benign## 488 malignant malignant## 498 benign benign## 502 benign benign## 505 benign benign## 509 benign benign## 511 benign benign## 519 benign benign## 520 malignant malignant## 522 benign benign## 524 malignant malignant## 529 benign benign## 532 benign benign## 536 benign benign## 539 benign benign## 540 benign benign## 546 benign benign## 548 benign benign## 551 benign benign## 554 benign malignant## 557 benign benign## 560 benign benign## 564 benign benign## 566 malignant malignant## 570 malignant malignant## 573 benign benign## 574 benign benign## 575 malignant malignant## 578 benign benign## 579 benign benign## 580 benign benign## 583 malignant malignant## 596 benign benign## 598 benign benign## 600 benign benign## 601 benign benign## 603 benign benign## 605 malignant malignant## 606 malignant malignant## 608 benign benign## 609 malignant malignant## 611 malignant malignant## 613 malignant malignant## 628 benign benign## 629 benign benign## 632 benign benign## 638 benign benign## 640 benign benign## 641 benign benign## 646 benign benign## 648 benign benign## 655 benign benign## 656 benign benign## 658 benign malignant## 660 benign benign## 665 benign benign## 667 benign benign## 668 benign benign## 670 malignant malignant## 672 benign benign## 676 benign benign## 678 benign benign## 679 benign benign## 680 benign benign## 681 malignant malignant## 684 benign benign## 686 benign benign## 694 benign benign
t <- table(df.test$class,pred,dnn = c("Acutal","Predict"))#生成混淆矩陣acc <- sum(diag(t))/nrow(df.test)*100 #計(jì)算準(zhǔn)確度print(acc)
## [1] 97.07317
結(jié)果顯示條件決策樹方法下的結(jié)果準(zhǔn)確率也是97%
16.2.3 隨機(jī)森林(random forest, RF)
需要用的R包是randomForest,該包是基于經(jīng)典決策樹生成隨機(jī)森林症见。
-
16.2.3.1 語法
randomForest()函數(shù)的用法可以參考??randomForest()-randomForest::randomForest
library(randomForest)set.seed()fit.forest <- randomForest(y~.,data=train, importance= )fit.forestimportance(fit.forest,type=2)forest.pred <- predict(fit.forest,test)data.frame(Actual=test$y,Predict=forest.pred)#比較真實(shí)的和預(yù)測(cè)的結(jié)果randomForest.pref <- table(test$y,forest.pred,dnn = c("Acutal","Predict"))#生成混淆矩陣acc <- sum(diag(randomForest.pref))/nrow(test)*100 #計(jì)算準(zhǔn)確度print(acc)
注:
1)隨機(jī)森林可以計(jì)算/度量變量的重要性喂走,即設(shè)置importance=TRUE
importance: 這是一個(gè)邏輯值,用于指定是否計(jì)算變量的重要性谋作。設(shè)置為TRUE表示計(jì)算變量的重要性芋肠,設(shè)置為FALSE表示不計(jì)算。變量的重要性指標(biāo)可以幫助了解哪些變量對(duì)于模型的預(yù)測(cè)性能最為關(guān)鍵遵蚜。
2)type的設(shè)置:
type = 1:使用MeanDecreaseAccuracy方法計(jì)算變量重要性帖池。該方法通過對(duì)每個(gè)決策樹進(jìn)行預(yù)測(cè),并比較預(yù)測(cè)準(zhǔn)確率的變化來評(píng)估變量的重要性吭净。它衡量的是每個(gè)變量在模型預(yù)測(cè)中對(duì)準(zhǔn)確率的影響睡汹。
type = 2:使用MeanDecreaseGini方法計(jì)算變量重要性。該方法通過測(cè)量每個(gè)變量在決策樹節(jié)點(diǎn)中用于分割樣本的不純度減少來評(píng)估變量的重要性寂殉。它衡量的是每個(gè)變量在模型中的分割能力囚巴。
type = 3:使用MeanDecreaseImpurity方法計(jì)算變量重要性。該方法與MeanDecreaseGini方法類似友扰,但在計(jì)算每個(gè)變量的重要性時(shí)彤叉,考慮了每個(gè)變量在樹的分割中使用的權(quán)重。
type = “node”:計(jì)算每個(gè)變量在每個(gè)節(jié)點(diǎn)上被使用的次數(shù)村怪。
-
16.2.3.2 舉例
library(randomForest)
## Warning: 程輯包'randomForest'是用R版本4.3.2 來建造的
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## ## 載入程輯包:'randomForest'
## The following object is masked from 'package:rattle':## ## importance
## The following object is masked from 'package:psych':## ## outlier
## The following object is masked from 'package:ggplot2':## ## margin
## The following object is masked from 'package:dplyr':## ## combine
set.seed(1234)fit.forest <- randomForest(class~.,data=df.train, importance=TRUE)fit.forest
## ## Call:## randomForest(formula = class ~ ., data = df.train, importance = TRUE) ## Type of random forest: classification## Number of trees: 500## No. of variables tried at each split: 3## ## OOB estimate of error rate: 2.93%## Confusion matrix:## benign malignant class.error## benign 293 9 0.02980132## malignant 5 171 0.02840909
importance(fit.forest,type = 2)
## MeanDecreaseGini## clumpThickness 9.794852## sizeUniformity 58.635963## shapeUniformity 49.754466## maginalAdhesion 8.373530## singleEpithelialCellSize 16.814313## bareNuclei 36.621347## blandChromatin 25.179804## normalNucleoli 14.177153## mitosis 2.015803
可以看到sizeUniformity是最重要的變量秽浇,mitosis 是最不重要的變量。
forest.pred <- predict(fit.forest,df.test)data.frame(Actual=df.test$class,Predict=forest.pred)#比較真實(shí)的和預(yù)測(cè)的結(jié)果
## Actual Predict## 3 benign benign## 5 benign benign## 6 malignant malignant## 8 benign benign## 9 benign benign## 16 malignant benign## 17 benign benign## 21 malignant malignant## 25 benign benign## 27 benign benign## 28 benign benign## 30 benign benign## 33 malignant malignant## 38 benign benign## 39 malignant malignant## 46 benign benign## 49 benign benign## 50 malignant malignant## 57 malignant malignant## 58 malignant benign## 59 malignant malignant## 64 malignant benign## 71 benign benign## 74 malignant malignant## 75 malignant malignant## 82 benign benign## 83 benign benign## 84 benign benign## 87 malignant malignant## 92 benign benign## 93 benign benign## 94 benign benign## 95 benign benign## 98 benign benign## 111 benign benign## 112 malignant malignant## 113 malignant malignant## 114 malignant malignant## 119 benign benign## 126 benign benign## 130 benign benign## 131 benign benign## 132 benign benign## 134 benign benign## 135 benign benign## 136 benign benign## 139 benign benign## 142 benign benign## 143 malignant malignant## 152 malignant malignant## 155 benign benign## 157 benign benign## 163 benign benign## 173 benign benign## 178 malignant malignant## 179 benign benign## 182 benign benign## 186 benign benign## 191 malignant malignant## 193 benign benign## 196 benign benign## 199 benign benign## 203 benign benign## 206 malignant malignant## 210 benign benign## 215 malignant malignant## 228 malignant malignant## 231 malignant malignant## 232 malignant malignant## 239 malignant malignant## 240 malignant malignant## 244 benign benign## 245 benign benign## 246 benign benign## 253 benign malignant## 254 malignant malignant## 255 malignant malignant## 261 malignant malignant## 272 benign benign## 274 malignant malignant## 275 benign benign## 277 benign benign## 284 malignant malignant## 287 malignant malignant## 288 benign benign## 291 benign benign## 297 benign malignant## 299 benign benign## 301 malignant malignant## 304 benign benign## 311 benign benign## 312 benign benign## 313 malignant malignant## 314 benign benign## 317 malignant malignant## 319 benign benign## 326 benign benign## 329 malignant malignant## 332 benign benign## 335 malignant malignant## 339 benign benign## 341 malignant malignant## 343 benign benign## 344 benign benign## 346 benign benign## 351 benign benign## 354 malignant malignant## 368 malignant malignant## 369 benign benign## 373 benign benign## 381 benign benign## 383 benign benign## 395 benign benign## 405 benign benign## 407 benign benign## 408 benign benign## 413 malignant malignant## 416 benign benign## 417 malignant malignant## 425 benign benign## 426 malignant malignant## 429 benign benign## 430 benign benign## 431 benign benign## 434 benign benign## 437 malignant malignant## 448 benign benign## 450 malignant malignant## 452 benign benign## 453 benign benign## 463 benign benign## 466 malignant malignant## 467 malignant malignant## 469 benign benign## 470 benign benign## 479 benign benign## 480 malignant malignant## 481 benign benign## 488 malignant malignant## 498 benign benign## 502 benign benign## 505 benign benign## 509 benign benign## 511 benign benign## 519 benign benign## 520 malignant malignant## 522 benign benign## 524 malignant malignant## 529 benign benign## 532 benign benign## 536 benign benign## 539 benign benign## 540 benign benign## 546 benign benign## 548 benign benign## 551 benign benign## 554 benign benign## 557 benign benign## 560 benign benign## 564 benign benign## 566 malignant malignant## 570 malignant malignant## 573 benign benign## 574 benign benign## 575 malignant malignant## 578 benign benign## 579 benign benign## 580 benign benign## 583 malignant malignant## 596 benign benign## 598 benign benign## 600 benign benign## 601 benign benign## 603 benign benign## 605 malignant malignant## 606 malignant malignant## 608 benign benign## 609 malignant malignant## 611 malignant malignant## 613 malignant malignant## 628 benign benign## 629 benign benign## 632 benign benign## 638 benign benign## 640 benign benign## 641 benign benign## 646 benign benign## 648 benign benign## 655 benign benign## 656 benign benign## 658 benign benign## 660 benign benign## 665 benign benign## 667 benign benign## 668 benign benign## 670 malignant malignant## 672 benign benign## 676 benign benign## 678 benign benign## 679 benign benign## 680 benign benign## 681 malignant malignant## 684 benign benign## 686 benign benign## 694 benign benign
randomForest.pref<- table(df.test$class,forest.pred,dnn = c("Acutal","Predict"))#生成混淆矩陣acc <- sum(diag(randomForest.pref))/nrow(df.test)*100 #計(jì)算準(zhǔn)確度print(acc)
## [1] 97.56098
plot(fit.forest)#生成隨機(jī)森林的圖片
結(jié)果顯示隨機(jī)森林預(yù)測(cè)的準(zhǔn)確率達(dá)到97%甚负。
16.2.4 支持向量機(jī)(support vector machines,SVM)
SVM是一類可用于分類和回歸的監(jiān)督機(jī)器學(xué)習(xí)模型柬焕。
SVM 旨在多維空間中找到一個(gè)能將全部觀測(cè)值分成兩類的最優(yōu)平面审残,這一平面使得兩類中距離最近的觀測(cè)值的間距(margin)盡可能大,在間距邊界上的點(diǎn)被稱為支持向量击喂,分割的超平面位于間距的中間维苔。
-
16.2.4.1 語法
kernlab包的ksvm()函數(shù)和e1071包中的svm()函數(shù)都可以實(shí)現(xiàn)SYM,其中ksvm()功能更強(qiáng)大懂昂,但svm()相對(duì)更簡(jiǎn)單介时。
library(e1071)set.seed()fit.svm <- svm(y~.,data= train)fit.svmsvm.pred <- predict(fit.svm,test)#test指訓(xùn)練集data.frame(Actual=test$y,Predict=svm.pred)#比較真實(shí)的和預(yù)測(cè)的結(jié)果,y指因變量svm.pref <- table(test$y,svm.pred,dnn = c("Acutal","Predict"))#生成混淆矩陣acc <- sum(diag(svm.pref))/nrow(test)*100 #計(jì)算準(zhǔn)確度print(acc)
-
16.2.4.2 舉例
library(e1071)
## Warning: 程輯包'e1071'是用R版本4.3.2 來建造的
## ## 載入程輯包:'e1071'
## The following object is masked from 'package:flexclust':## ## bclust
## The following object is masked from 'package:Hmisc':## ## impute
set.seed(1234)fit.svm <- svm(class~.,data= df.train)fit.svm
## ## Call:## svm(formula = class ~ ., data = df.train)## ## ## Parameters:## SVM-Type: C-classification ## SVM-Kernel: radial ## cost: 1 ## ## Number of Support Vectors: 84
svm.pred <- predict(fit.svm,df.test)svm.pred
## 3 5 6 8 9 16 17 21 ## benign benign malignant benign benign malignant benign malignant ## 25 27 28 30 33 38 39 46 ## benign benign benign benign malignant benign malignant benign ## 49 50 57 58 59 64 71 74 ## benign malignant malignant malignant malignant malignant benign malignant ## 75 82 83 84 87 92 93 94 ## malignant benign benign benign malignant benign benign benign ## 95 98 111 112 113 114 119 126 ## benign benign benign malignant malignant malignant benign benign ## 130 131 132 134 135 136 139 142 ## malignant benign benign benign benign benign benign benign ## 143 152 155 157 163 173 178 179 ## malignant malignant benign benign benign benign malignant benign ## 182 186 191 193 196 199 203 206 ## benign benign malignant benign benign benign benign malignant ## 210 215 228 231 232 239 240 244 ## benign malignant malignant malignant malignant malignant malignant benign ## 245 246 253 254 255 261 272 274 ## benign benign malignant malignant malignant malignant benign malignant ## 275 277 284 287 288 291 297 299 ## benign benign malignant malignant benign benign malignant benign ## 301 304 311 312 313 314 317 319 ## malignant benign benign benign malignant benign malignant benign ## 326 329 332 335 339 341 343 344 ## benign malignant benign malignant benign malignant benign benign ## 346 351 354 368 369 373 381 383 ## benign benign malignant malignant benign benign benign benign ## 395 405 407 408 413 416 417 425 ## benign benign benign benign malignant benign malignant benign ## 426 429 430 431 434 437 448 450 ## malignant benign benign benign benign malignant benign malignant ## 452 453 463 466 467 469 470 479 ## benign benign benign malignant malignant benign benign benign ## 480 481 488 498 502 505 509 511 ## malignant benign malignant benign benign benign benign benign ## 519 520 522 524 529 532 536 539 ## benign malignant benign malignant benign benign benign benign ## 540 546 548 551 554 557 560 564 ## benign benign benign benign benign benign benign benign ## 566 570 573 574 575 578 579 580 ## malignant malignant benign benign malignant benign benign benign ## 583 596 598 600 601 603 605 606 ## malignant benign benign benign benign benign malignant malignant ## 608 609 611 613 628 629 632 638 ## benign malignant malignant malignant benign benign benign benign ## 640 641 646 648 655 656 658 660 ## benign benign benign benign benign benign malignant benign ## 665 667 668 670 672 676 678 679 ## benign benign benign malignant benign benign benign benign ## 680 681 684 686 694 ## benign malignant benign benign benign ## Levels: benign malignant
data.frame(Actual=df.test$class,Predict=svm.pred)#比較真實(shí)的和預(yù)測(cè)的結(jié)果
## Actual Predict## 3 benign benign## 5 benign benign## 6 malignant malignant## 8 benign benign## 9 benign benign## 16 malignant malignant## 17 benign benign## 21 malignant malignant## 25 benign benign## 27 benign benign## 28 benign benign## 30 benign benign## 33 malignant malignant## 38 benign benign## 39 malignant malignant## 46 benign benign## 49 benign benign## 50 malignant malignant## 57 malignant malignant## 58 malignant malignant## 59 malignant malignant## 64 malignant malignant## 71 benign benign## 74 malignant malignant## 75 malignant malignant## 82 benign benign## 83 benign benign## 84 benign benign## 87 malignant malignant## 92 benign benign## 93 benign benign## 94 benign benign## 95 benign benign## 98 benign benign## 111 benign benign## 112 malignant malignant## 113 malignant malignant## 114 malignant malignant## 119 benign benign## 126 benign benign## 130 benign malignant## 131 benign benign## 132 benign benign## 134 benign benign## 135 benign benign## 136 benign benign## 139 benign benign## 142 benign benign## 143 malignant malignant## 152 malignant malignant## 155 benign benign## 157 benign benign## 163 benign benign## 173 benign benign## 178 malignant malignant## 179 benign benign## 182 benign benign## 186 benign benign## 191 malignant malignant## 193 benign benign## 196 benign benign## 199 benign benign## 203 benign benign## 206 malignant malignant## 210 benign benign## 215 malignant malignant## 228 malignant malignant## 231 malignant malignant## 232 malignant malignant## 239 malignant malignant## 240 malignant malignant## 244 benign benign## 245 benign benign## 246 benign benign## 253 benign malignant## 254 malignant malignant## 255 malignant malignant## 261 malignant malignant## 272 benign benign## 274 malignant malignant## 275 benign benign## 277 benign benign## 284 malignant malignant## 287 malignant malignant## 288 benign benign## 291 benign benign## 297 benign malignant## 299 benign benign## 301 malignant malignant## 304 benign benign## 311 benign benign## 312 benign benign## 313 malignant malignant## 314 benign benign## 317 malignant malignant## 319 benign benign## 326 benign benign## 329 malignant malignant## 332 benign benign## 335 malignant malignant## 339 benign benign## 341 malignant malignant## 343 benign benign## 344 benign benign## 346 benign benign## 351 benign benign## 354 malignant malignant## 368 malignant malignant## 369 benign benign## 373 benign benign## 381 benign benign## 383 benign benign## 395 benign benign## 405 benign benign## 407 benign benign## 408 benign benign## 413 malignant malignant## 416 benign benign## 417 malignant malignant## 425 benign benign## 426 malignant malignant## 429 benign benign## 430 benign benign## 431 benign benign## 434 benign benign## 437 malignant malignant## 448 benign benign## 450 malignant malignant## 452 benign benign## 453 benign benign## 463 benign benign## 466 malignant malignant## 467 malignant malignant## 469 benign benign## 470 benign benign## 479 benign benign## 480 malignant malignant## 481 benign benign## 488 malignant malignant## 498 benign benign## 502 benign benign## 505 benign benign## 509 benign benign## 511 benign benign## 519 benign benign## 520 malignant malignant## 522 benign benign## 524 malignant malignant## 529 benign benign## 532 benign benign## 536 benign benign## 539 benign benign## 540 benign benign## 546 benign benign## 548 benign benign## 551 benign benign## 554 benign benign## 557 benign benign## 560 benign benign## 564 benign benign## 566 malignant malignant## 570 malignant malignant## 573 benign benign## 574 benign benign## 575 malignant malignant## 578 benign benign## 579 benign benign## 580 benign benign## 583 malignant malignant## 596 benign benign## 598 benign benign## 600 benign benign## 601 benign benign## 603 benign benign## 605 malignant malignant## 606 malignant malignant## 608 benign benign## 609 malignant malignant## 611 malignant malignant## 613 malignant malignant## 628 benign benign## 629 benign benign## 632 benign benign## 638 benign benign## 640 benign benign## 641 benign benign## 646 benign benign## 648 benign benign## 655 benign benign## 656 benign benign## 658 benign malignant## 660 benign benign## 665 benign benign## 667 benign benign## 668 benign benign## 670 malignant malignant## 672 benign benign## 676 benign benign## 678 benign benign## 679 benign benign## 680 benign benign## 681 malignant malignant## 684 benign benign## 686 benign benign## 694 benign benign
svm.pref <- table(df.test$class,svm.pred,dnn = c("Acutal","Predict"))#生成混淆矩陣svm.pref
## Predict## Acutal benign malignant## benign 138 4## malignant 0 63
acc <- sum(diag(svm.pref))/nrow(df.test)*100 #計(jì)算準(zhǔn)確度print(acc)
## [1] 98.04878
結(jié)果顯示預(yù)測(cè)準(zhǔn)確度達(dá)到98%。
16.3 選擇預(yù)測(cè)效果最好的模型
首先凌彬,與混淆矩陣對(duì)應(yīng)的也有一個(gè)2x2矩陣沸柔,分別為第一行:TP(True positive)、FN(False negative)铲敛;第二行:FP(False positive)和TN(True negative)褐澎。在這2x2矩陣中,只有對(duì)角線的TP和TN是正確的伐蒋,另外2個(gè)是錯(cuò)誤的工三。
一般我們通過敏感度、特異性先鱼、正例命中率俭正、負(fù)例命中率和準(zhǔn)確度來度量模型預(yù)測(cè)的好壞:
16.3.1 語法
performance <- function(table,n=2){ if(!all(dim(table)==c(2,2))) stop("Must be a 2x2 table") tn=table[1,1] fp=table[1,2] fn=table[2,1] tp=table[2,2] sensitivity=tp/(tp+fn) specificity=tn/(tn+fp) ppp=tp/(tp+fp) npp=tn/(tn+fn) hitrate=(tp+tn)/(tp+tn+fp+fn) result <- paste("sensitivity= ",round(sensitivity,n), "\nspecificity= ",round(specificity,n), "\nPositive Predictive Value= ",round(ppp,n), "\nNegative Predictive Value= ",round(npp,n), "\nAccuracy= ",round(hitrate,n),"\n",sep = "") cat(result)}performance()
這段代碼中的tn tp fp fn等在表格中的位置是根據(jù)前面數(shù)據(jù)集預(yù)測(cè)得到的混淆矩陣進(jìn)行一一對(duì)應(yīng)的,在這一數(shù)據(jù)集預(yù)測(cè)中焙畔,benign良性為真陰性(tn),malignant惡性為真陽性(tp)掸读,因?yàn)槲覀円獧z測(cè)惡性的占比。
cat() 是一個(gè)用于將文本或表達(dá)式輸出到控制臺(tái)的函數(shù)宏多。它的作用類似于 print() 函數(shù)儿惫,但在輸出時(shí)不會(huì)自動(dòng)添加換行符。在這段代碼中伸但,cat(result) 用于將計(jì)算結(jié)果 result 輸出到控制臺(tái)肾请。這樣,當(dāng)你調(diào)用 performance() 函數(shù)時(shí)更胖,會(huì)將計(jì)算結(jié)果打印到控制臺(tái)上铛铁,而不是返回一個(gè)值。
16.3.2 舉例
performance <- function(table,n=2){ if(!all(dim(table)==c(2,2))) stop("Must be a 2x2 table") tn=table[1,1] fp=table[1,2] fn=table[2,1] tp=table[2,2] sensitivity=tp/(tp+fn) specificity=tn/(tn+fp) ppp=tp/(tp+fp) npp=tn/(tn+fn) hitrate=(tp+tn)/(tp+tn+fp+fn) result <- paste("sensitivity= ",round(sensitivity,n), "\nspecificity= ",round(specificity,n), "\nPositive Predictive Value= ",round(ppp,n), "\nNegative Predictive Value= ",round(npp,n), "\nAccuracy= ",round(hitrate,n),"\n",sep = "") cat(result)}performance(logistic.pref)
## sensitivity= 0.95## specificity= 0.99## Positive Predictive Value= 0.97## Negative Predictive Value= 0.98## Accuracy= 0.98
performance(dtree.pref)
## sensitivity= 0.97## specificity= 0.97## Positive Predictive Value= 0.94## Negative Predictive Value= 0.99## Accuracy= 0.97
performance(randomForest.pref)
## sensitivity= 0.95## specificity= 0.99## Positive Predictive Value= 0.97## Negative Predictive Value= 0.98## Accuracy= 0.98
performance(svm.pref)
## sensitivity= 1## specificity= 0.97## Positive Predictive Value= 0.94## Negative Predictive Value= 1## Accuracy= 0.98
完整教程請(qǐng)查看