Naive-Basianを用いて糖尿病を予測する(R)
9069 ワード
0.必要なパッケージのロード
install.packages('tidyverse')
install.packages('ggplot2')
install.packages('caret')
install.packages('caretEnsemble')
install.packages('psych')
install.packages('Amelia')
install.packages('mice')
install.packages('GGally')
install.packages('rpart')
install.packages('randomForest')
install.packages("Rcpp")
install.packages("MASS")
install.packages('e1071', dependencies=TRUE)
update.packages(checkBuilt=TRUE, ask=FALSE)
library(tidyverse)
library(ggplot2)
library(caret)
library(caretEnsemble)
library(psych)
library(Amelia)
library(mice)
library(GGally)
library(rpart)
library(randomForest)
library(Rcpp)
library(MASS)
library(e1071)
1.データのインポート
#data불러오기
data<-read.csv("/Users/karen/Downloads/diabetes.csv")
data$Outcome <- factor(data$Outcome, levels = c(0,1), labels = c("False", "True"))
ここでの結果は0と1で、糖尿病かどうかを予測します.1-1. データ検証
str(data)
head(data)
describe(data)
結果:str(data)
'data.frame': 768 obs. of 9 variables:
$ Pregnancies : int 6 1 8 1 0 5 3 10 2 8 ...
$ Glucose : int 148 85 183 89 137 116 78 115 197 125 ...
$ BloodPressure : int 72 66 64 66 40 74 50 0 70 96 ...
$ SkinThickness : int 35 29 0 23 35 0 32 0 45 0 ...
$ Insulin : int 0 0 0 94 168 0 88 0 543 0 ...
$ BMI : num 33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
$ DiabetesPedigreeFunction: num 0.627 0.351 0.672 0.167 2.288 ...
$ Age : int 50 31 32 21 33 30 26 29 53 54 ...
$ Outcome : Factor w/2 levels "False","True": 2 1 2 1 2 1 2 1 2 2 ...
head(data)
Pregnancies Glucose BloodPressure SkinThickness Insulin BMI
1 6 148 72 35 0 33.6
2 1 85 66 29 0 26.6
3 8 183 64 0 0 23.3
4 1 89 66 23 94 28.1
5 0 137 40 35 168 43.1
6 5 116 74 0 0 25.6
DiabetesPedigreeFunction Age Outcome
1 0.627 50 True
2 0.351 31 False
3 0.672 32 True
4 0.167 21 False
5 2.288 33 True
6 0.201 30 False
describe(data)
vars n mean sd median trimmed mad min
Pregnancies 1 768 3.85 3.37 3.00 3.46 2.97 0.00
Glucose 2 768 120.89 31.97 117.00 119.38 29.65 0.00
BloodPressure 3 768 69.11 19.36 72.00 71.36 11.86 0.00
SkinThickness 4 768 20.54 15.95 23.00 19.94 17.79 0.00
Insulin 5 768 79.80 115.24 30.50 56.75 45.22 0.00
BMI 6 768 31.99 7.88 32.00 31.96 6.82 0.00
DiabetesPedigreeFunction 7 768 0.47 0.33 0.37 0.42 0.25 0.08
Age 8 768 33.24 11.76 29.00 31.54 10.38 21.00
Outcome 9 768 1.35 0.48 1.00 1.31 0.00 1.00
max range skew kurtosis se
Pregnancies 17.00 17.00 0.90 0.14 0.12
Glucose 199.00 199.00 0.17 0.62 1.15
BloodPressure 122.00 122.00 -1.84 5.12 0.70
SkinThickness 99.00 99.00 0.11 -0.53 0.58
Insulin 846.00 846.00 2.26 7.13 4.16
BMI 67.10 67.10 -0.43 3.24 0.28
DiabetesPedigreeFunction 2.42 2.34 1.91 5.53 0.01
Age 81.00 60.00 1.13 0.62 0.42
Outcome 2.00 1.00 0.63 -1.60 0.02
describle dataはAmalia Libraryにロードする必要があります.
データ記述によると、Glucose、BloodPresure、皮膚痩せ度、Insulin、BMIの最小値がゼロのデータがあるが、このような人はいないため、実測データと見なすことができる.
describe関数はmassライブラリに読み込まなければ使用できません
2.欠落値の除去
data[, 2:7][data[, 2:7] == 0] <- NA
ゼロ値をNAに変更2-1.測定値の可視化
missmap(data)
missmap関数はAmaliaライブラリに読み込むときに使用できます
2-2. miceパッケージで最終値を予測する
mice_mod <- mice(data[, c("Glucose","BloodPressure","SkinThickness","Insulin","BMI")], method='rf')
mice_complete <- complete(mice_mod)
結果:mice_mod <- mice(data[, c("Glucose","BloodPressure","SkinThickness","Insulin","BMI")], method='rf')
iter imp variable
1 1 Glucose BloodPressure SkinThickness Insulin BMI
1 2 Glucose BloodPressure SkinThickness Insulin BMI
1 3 Glucose BloodPressure SkinThickness Insulin BMI
1 4 Glucose BloodPressure SkinThickness Insulin BMI
1 5 Glucose BloodPressure SkinThickness Insulin BMI
2 1 Glucose BloodPressure SkinThickness Insulin BMI
2 2 Glucose BloodPressure SkinThickness Insulin BMI
2 3 Glucose BloodPressure SkinThickness Insulin BMI
2 4 Glucose BloodPressure SkinThickness Insulin BMI
2 5 Glucose BloodPressure SkinThickness Insulin BMI
3 1 Glucose BloodPressure SkinThickness Insulin BMI
3 2 Glucose BloodPressure SkinThickness Insulin BMI
3 3 Glucose BloodPressure SkinThickness Insulin BMI
3 4 Glucose BloodPressure SkinThickness Insulin BMI
3 5 Glucose BloodPressure SkinThickness Insulin BMI
4 1 Glucose BloodPressure SkinThickness Insulin BMI
4 2 Glucose BloodPressure SkinThickness Insulin BMI
4 3 Glucose BloodPressure SkinThickness Insulin BMI
4 4 Glucose BloodPressure SkinThickness Insulin BMI
4 5 Glucose BloodPressure SkinThickness Insulin BMI
5 1 Glucose BloodPressure SkinThickness Insulin BMI
5 2 Glucose BloodPressure SkinThickness Insulin BMI
5 3 Glucose BloodPressure SkinThickness Insulin BMI
5 4 Glucose BloodPressure SkinThickness Insulin BMI
5 5 Glucose BloodPressure SkinThickness Insulin BMI
mice_complete <- complete(mice_mod)
2-3. メジャー値をプライマリ・データセットに適用
data$Glucose <- mice_complete$Glucose
data$BloodPressure <- mice_complete$BloodPressure
data$SkinThickness <- mice_complete$SkinThickness
data$Insulin<- mice_complete$Insulin
data$BMI <- mice_complete$BMI
3.モデルの作成
3-1. データセット/テストセット
indxTrain <- createDataPartition(y = data$Outcome,p = 0.75,list = FALSE)
training <- data[indxTrain,]
testing <- data[-indxTrain,]
3-2. Xはプリ判定変数Yは応答変数
x = training[,-9]
y = training$Outcome
3-3. ベージュ色のモデルをして、モデルを確認します。
model = train(x,y,'nb',trControl=trainControl(method='cv',number=10))
(コンソールボックスにモデルを入力してモデルを検証)model
Naive Bayes
576 samples
8 predictor
2 classes: 'False', 'True'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 518, 519, 518, 518, 519, 519, ...
Resampling results across tuning parameters:
usekernel Accuracy Kappa
FALSE 0.7448578 0.4333469
TRUE 0.7449486 0.4446317
Tuning parameter 'fL' was held constant at a value of 0
Tuning
parameter 'adjust' was held constant at a value of 1
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were fL = 0, usekernel = TRUE
and adjust = 1.
4.モデル評価
4-1融合マトリクスの作成
上記モデルをテストデータに適用する
Predict <- predict(model,newdata = testing )
コンソールボックスにconfusionMatrix(Predict,テスト$Outcome)を入力します.confusionMatrix(Predict, testing$Outcome)
Confusion Matrix and Statistics
Reference
Prediction False True
False 106 25
True 19 42
Accuracy : 0.7708
95% CI : (0.7048, 0.8283)
No Information Rate : 0.651
P-Value [Acc > NIR] : 0.0002216
Kappa : 0.4849
Mcnemar's Test P-Value : 0.4509823
Sensitivity : 0.8480
Specificity : 0.6269
Pos Pred Value : 0.8092
Neg Pred Value : 0.6885
Prevalence : 0.6510
Detection Rate : 0.5521
Detection Prevalence : 0.6823
Balanced Accuracy : 0.7374
'Positive' Class : False
77%の電流を持つモデルの作成
Reference
この問題について(Naive-Basianを用いて糖尿病を予測する(R)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyeonkyeong/Naive-Baysian을-사용해-당뇨-예측Rテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol