a、邏輯迴歸是廣義線性模型的一種,可根據一組數值變量預測二元輸出,R中的基本函數glm()可用於擬合邏輯迴歸模型。git
b、glm()函數自動將預測變量 中的分類變量編碼爲相應的虛擬變量。由於此例的所有預測變量都是數值型的變量,所以沒必要要對其編碼dom
> fit.logit <- glm(class ~.,data=df.train,family = binomial()) #擬合邏輯迴歸,family = binomial()表示二項式 > summary(fit.logit) #class是響應變量,其餘的爲預測變量 Call: glm(formula = class ~ ., family = binomial(), data = df.train) Deviance Residuals: Min 1Q Median 3Q Max -2.75813 -0.10602 -0.05679 0.01237 2.64317 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -10.42758 1.47602 -7.065 1.61e-12 *** clumpThickness 0.52434 0.15950 3.287 0.00101 ** sizeUniformity -0.04805 0.25706 -0.187 0.85171 shapeUniformity 0.42309 0.26775 1.580 0.11407 maginalAdhesion 0.29245 0.14690 1.991 0.04650 * singleEpithelialCellSize 0.11053 0.17980 0.615 0.53871 bareNuclei 0.33570 0.10715 3.133 0.00173 ** blandChromatin 0.42353 0.20673 2.049 0.04049 * normalNucleoli 0.28888 0.13995 2.064 0.03900 * mitosis 0.69057 0.39829 1.734 0.08295 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 612.063 on 482 degrees of freedom Residual deviance: 71.346 on 473 degrees of freedom (6 observations deleted due to missingness) AIC: 91.346 Number of Fisher Scoring iterations: 8
採用基於df.train 創建的模型來對 df.validate數據集中的樣本單元分類,predict()函數默認輸出腫瘤爲惡性的機率,指定參數 type="response"函數
> prob <- predict(fit.logit,df.validate,type="response") > logit.pred <- factor(prob > 0.5,levels = c(FALSE,TRUE),labels = c("bengin","maligant")) #樣本單元中,機率大於0.5被分爲惡性腫瘤,機率小於等於0.5的被分爲良性腫瘤類
評估預測的準確性編碼
> logit.perf <- table(df.validate$class,logit.pred,dnn = c("Actual","Predicted")) > logit.perf Predicted Actual bengin maligant benign 118 2 malignant 4 76 #給出預測與實際狀況對比的交叉表(即混淆矩陣,confusionn matrix)。 #模型正確判別了118個類別爲良性的患者和17個類別爲惡性的患者,另外,di.validate數據集中有10個樣本單元因包含缺失值數據沒法判別 #驗證集上,正確分類的模型(即準確率,acuracy)爲(76+118)/200=97%
在該案例中注意到三個預測變量(sizeUniformity,shapeUniformity,singleEpithelalCellSize)的係數未經過顯著性檢驗(即 p 值大於0.1),從預測變量的角度來講,通常不會將這些變量歸入模型,當這類不包含相關信息的變量特別多時,能夠直接將其都認爲模型中的噪聲spa
去除後再擬合,獲得一個更小的 AIC 值code
logit.fit.reduced <- step(fit.logit) #可利用這種方法獲得一個移除上述三個變量的精簡模型,這種模型在驗證集上的偏差相對全變量模型更小