Логистическая регрессия в R |
Здравствуйте, гость ( Вход | Регистрация )
Логистическая регрессия в R |
2.07.2017 - 15:21
Сообщение
#16
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
p2004r
смотрите, у меня родилась мысль вот результаты классификации random forest Confusion matrix: 0 1 class.error 0 831 3 0.003597122302 1 103 528 0.163232963550 Как мне найти номера наблюдений единиц, которые попали в нули, 103 штучки?)) |
|
2.07.2017 - 15:42
Сообщение
#17
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
p2004r смотрите, у меня родилась мысль вот результаты классификации random forest Confusion matrix: 0 1 class.error 0 831 3 0.003597122302 1 103 528 0.163232963550 Как мне найти номера наблюдений единиц, которые попали в нули, 103 штучки?)) Два вектора v1 и v2 (обучение df$Y и решение_RF res.rf$predicted) which(v1==1&v2==0) |
|
2.07.2017 - 20:54
Сообщение
#18
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
p2004r, у меня все получилось:)
Но возник такой вопрос. Как можно по каждой КАТЕГОРИАЛЬНОЙ переменной сосчитать процент определенных значений для нуля и единицы? На выходе это выглядит так: df$X1 (посчитать нули для категорий "0 " и "1") 0 1 68% 89% т.е. по переменной Х1 у нас 68% значений 0 и 32% соответственно единиц для выходной категории "0" и по переменной Х1 у нас 89% значений 0 и 11% соответственно единиц для выходной категории "1" |
|
3.07.2017 - 17:25
Сообщение
#19
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
Терпение и труд, все перетрут) Сделала, но вот гугль не помог по такому вопросу:
df=read.csv(mydata) df=na.omit(df) library("randomForest") model=randomForest(y ~. ,df, sampsize=c("0"=300, "1"=300)) newdata=х.csv newdata=data.frame(lapply(newdata, factor)) str(df) xq=rbind(newdata,df) str(xq) xqtest=xq[1:17,] str(xqtest) View(xqtest) pred <- predict(model, newdata = xqtest,type="class") str(df) str(newdata) ошибка Error in predict.randomForest(model, newdata = xqtest, type = "class") : Type of predictors in new data do not match that of the training data. подскажите ,как победить эту ошибку[attachment=1521:x.zip]
Прикрепленные файлы
|
|
3.07.2017 - 22:10
Сообщение
#20
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Терпение и труд, все перетрут) Сделала, но вот гугль не помог по такому вопросу: df=read.csv(mydata) df=na.omit(df) library("randomForest") model=randomForest(y ~. ,df, sampsize=c("0"=300, "1"=300)) newdata=х.csv newdata=data.frame(lapply(newdata, factor)) str(df) xq=rbind(newdata,df) str(xq) xqtest=xq[1:17,] str(xqtest) View(xqtest) pred <- predict(model, newdata = xqtest,type="class") str(df) str(newdata) ошибка Error in predict.randomForest(model, newdata = xqtest, type = "class") : Type of predictors in new data do not match that of the training data. подскажите ,как победить эту ошибку[attachment=1521:x.zip] сравните str(df) и str(xqtest) и вопросов не будет |
|
3.07.2017 - 22:13
Сообщение
#21
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
p2004r, у меня все получилось:) Но возник такой вопрос. Как можно по каждой КАТЕГОРИАЛЬНОЙ переменной сосчитать процент определенных значений для нуля и единицы? На выходе это выглядит так: df$X1 (посчитать нули для категорий "0 " и "1") 0 1 68% 89% т.е. по переменной Х1 у нас 68% значений 0 и 32% соответственно единиц для выходной категории "0" и по переменной Х1 у нас 89% значений 0 и 11% соответственно единиц для выходной категории "1" Код > table(df$Y)
0 1 1537 631 > table(df$Y)/nrow(df) 0 1 0.7089483 0.2910517 > (table(df$Y)/nrow(df))*100 0 1 70.89483 29.10517 > |
|
4.07.2017 - 13:23
Сообщение
#22
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
К сожалению вопросы есть
Код str(df) 'data.frame': 823 obs. of 17 variables: $ isOneDay : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ sizeList : Factor w/ 4 levels "0","1","2","3": 1 1 1 2 1 1 1 1 1 1 ... $ licensesList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosWinnerNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosWinnerSumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosPlacerNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosPlacerSumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ inspectionsInFutureNumList : Factor w/ 4 levels "0","1","2","8": 2 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsNumList : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsNoViolationsNumList : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsFailsList: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ courtPracticeList : Factor w/ 2 levels "0","1": 2 2 2 1 2 2 2 1 2 1 ... $ digestGreenList : Factor w/ 9 levels "1","2","3","4",..: 4 3 4 1 4 3 2 2 3 3 ... $ linkedEntitiesByCeoNumList : Factor w/ 2 levels "0","1": 2 2 1 2 1 2 2 1 2 2 ... $ linkedEntitiesByFounderNumList : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 1 ... $ linkedEntitiesChildrenNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ digestGreyList : Factor w/ 8 levels "0","1","2","3",..: 2 3 3 5 2 2 3 5 3 4 ... - attr(*, "na.action")=Class 'omit' Named int [1:1345] 12 14 17 26 29 42 43 49 50 57 ... .. ..- attr(*, "names")=8322456 [1:1345] "12" "14" "17" "26" ... вот реальные данные newdata=read.csv("x.csv") удалите из наборе x.csv переменную Y, я хочу ее предсказать newdata=data.frame(lapply(newdata, factor)) там не должно быть Y Код 'data.frame': 11 obs. of 16 variables: $ sizeList : Factor w/ 4 levels "0","1","2","3": 2 1 2 4 2 4 1 1 4 3 ... $ licensesList : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ... $ gosWinnerNumList : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ... $ gosWinnerSumList : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ... $ gosPlacerNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ gosPlacerSumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsInFutureNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsNoViolationsNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsFailsList: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ courtPracticeList : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 1 2 1 2 ... $ digestGreenList : Factor w/ 5 levels "4","5","6","7",..: 1 1 1 3 2 5 4 3 3 3 ... $ linkedEntitiesByCeoNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ linkedEntitiesByFounderNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 1 1 ... $ linkedEntitiesChildrenNumList : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 2 2 2 ... $ digestGreyList : Factor w/ 3 levels "0","1","2": 1 3 2 2 2 2 3 3 2 2 ... все переменные одинаковые у тип у них фактор! Error in predict.randomForest(model, newdata = newdata, type = "class") : Type of predictors in new data do not match that of the training data. Кстати если в наборе х.csv есть переменная Y он дает предсказания. Но смысл, мне нужно на новых данных это сделать, а на них заведомо нет игрика |
|
4.07.2017 - 14:54
Сообщение
#23
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
Y это isOneDay
поскольку мне сдавать нужно ,я переименовала обратно с иксов |
|
4.07.2017 - 20:18
Сообщение
#24
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
К сожалению вопросы есть Код str(df) 'data.frame': 823 obs. of 17 variables: $ isOneDay : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ sizeList : Factor w/ 4 levels "0","1","2","3": 1 1 1 2 1 1 1 1 1 1 ... $ licensesList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosWinnerNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosWinnerSumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosPlacerNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ gosPlacerSumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ inspectionsInFutureNumList : Factor w/ 4 levels "0","1","2","8": 2 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsNumList : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsNoViolationsNumList : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsFailsList: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ courtPracticeList : Factor w/ 2 levels "0","1": 2 2 2 1 2 2 2 1 2 1 ... $ digestGreenList : Factor w/ 9 levels "1","2","3","4",..: 4 3 4 1 4 3 2 2 3 3 ... $ linkedEntitiesByCeoNumList : Factor w/ 2 levels "0","1": 2 2 1 2 1 2 2 1 2 2 ... $ linkedEntitiesByFounderNumList : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 1 ... $ linkedEntitiesChildrenNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ... $ digestGreyList : Factor w/ 8 levels "0","1","2","3",..: 2 3 3 5 2 2 3 5 3 4 ... - attr(*, "na.action")=Class 'omit' Named int [1:1345] 12 14 17 26 29 42 43 49 50 57 ... .. ..- attr(*, "names")=8322456 [1:1345] "12" "14" "17" "26" ... вот реальные данные newdata=read.csv("x.csv") удалите из наборе x.csv переменную Y, я хочу ее предсказать newdata=data.frame(lapply(newdata, factor)) там не должно быть Y Код 'data.frame': 11 obs. of 16 variables: $ sizeList : Factor w/ 4 levels "0","1","2","3": 2 1 2 4 2 4 1 1 4 3 ... $ licensesList : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ... $ gosWinnerNumList : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ... $ gosWinnerSumList : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ... $ gosPlacerNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ gosPlacerSumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsInFutureNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsNoViolationsNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ inspectionsHasViolationsFailsList: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ courtPracticeList : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 1 2 1 2 ... $ digestGreenList : Factor w/ 5 levels "4","5","6","7",..: 1 1 1 3 2 5 4 3 3 3 ... $ linkedEntitiesByCeoNumList : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ... $ linkedEntitiesByFounderNumList : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 1 1 ... $ linkedEntitiesChildrenNumList : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 2 2 2 ... $ digestGreyList : Factor w/ 3 levels "0","1","2": 1 3 2 2 2 2 3 3 2 2 ... все переменные одинаковые у тип у них фактор! Error in predict.randomForest(model, newdata = newdata, type = "class") : Type of predictors in new data do not match that of the training data. Кстати если в наборе х.csv есть переменная Y он дает предсказания. Но смысл, мне нужно на новых данных это сделать, а на них заведомо нет игрика ну так уровни факторов улетели, они могут быть только подмножеством от обучающего датасета Код levels(newdata$digestGreyList) <- levels(df$digestGreyList) или автоматом для совпадающих Код for(n in intersect(names(df), names(newdata))) levels(newdata[,n]) <- levels(df[,n]) ЗЫ а вообще не надо этих групп плодить, все данные вместе должны быть и просто признак принадлежности (тогда и геморроя такого меньше) Сообщение отредактировал p2004r - 4.07.2017 - 20:21 |
|
5.07.2017 - 17:51
Сообщение
#25
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
Да, Вы правы! p2004r, последний вопрос, интерпретационного плана. Имею ли я право вероятности до 0.7 не принимать в расчет?
Например, у меня наблюдение класса "0", но предсказал вероятность 0,62(арифметически округлим - это единица будет). Есть и 0,76(тут я считаю за неверную классификацию). Я считаю, что меньше 0,7 вообще не стоит рассматривать вероятность. Скажите, права я или нет? |
|
5.07.2017 - 21:33
Сообщение
#26
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Да, Вы правы! p2004r, последний вопрос, интерпретационного плана. Имею ли я право вероятности до 0.7 не принимать в расчет? Например, у меня наблюдение класса "0", но предсказал вероятность 0,62(арифметически округлим - это единица будет). Есть и 0,76(тут я считаю за неверную классификацию). Я считаю, что меньше 0,7 вообще не стоит рассматривать вероятность. Скажите, права я или нет? Это называется "точка принятия решения" -- thresholds. Вся ROC состоит по сути из этих точек. Выбрать наилучшую точку принятия решения можно зная частоты исходов в популяции и соотношение стоимости ошибок первого и второго рода. Код In addition, weights can be supplied if false positive and false
negative predictions are not equivalent: a numeric vector of length 2 to the ?best.weights? argument. The indices define 1. the cost of of a false negative classification 2. the prevalence, or the proportion of cases in the total population (n.cases/(n.controls+n.cases)). The optimality criteria are modified as proposed by Perkins and Schisterman: ?youden? max(sensitivities + r \times specificities) ?closest.topleft? min((1 - sensitivities)^2 + r \times (1- specificities)^2) with r = (1 - prevalence) / (cost * prevalence) By default, prevalence is 0.5 and cost is 1 so that no weight is applied in effect. Note that several thresholds might be equally optimal. References: Neil J. Perkins, Enrique F. Schisterman (2006) ``The Inconsistency of "Optimal" Cutpoints Obtained using Two Criteria based on the Receiver Operating Characteristic Curve''. _American Journal of Epidemiology_ *163*(7), 670-675. DOI: 10.1093/aje/kwj063. |
|
6.07.2017 - 17:15
Сообщение
#27
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
с RoC получилось разобраться. А как мне в отчете правильно писать.?
Например, предсказанное значение вероятности 0,86. А точность классификации модели 90%. Я могу сказать, что с 90% точностью вероятность наступления события 0,86? Или как это корректно будет по-русски? |
|
8.07.2017 - 23:06
Сообщение
#28
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
с RoC получилось разобраться. А как мне в отчете правильно писать.? Например, предсказанное значение вероятности 0,86. А точность классификации модели 90%. Я могу сказать, что с 90% точностью вероятность наступления события 0,86? Или как это корректно будет по-русски? Если в терминах ReOpCu, то для выбранной (оптимальной для условий применения модели) точки принятия решения указывается соответствующая "чувствительность" и "специфичность". В целом модель оценивается безотносительно конкретной точки принятия решения по величине ArUnCu |
|
12.07.2017 - 15:08
Сообщение
#29
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
p2004r, подскажите
я рассчитала spec and sens как на базе этих значений мне вручную высчитать AUC? |
|
12.07.2017 - 15:12
Сообщение
#30
|
|
Группа: Пользователи Сообщений: 76 Регистрация: 27.04.2014 Пользователь №: 26375 |
spec=0,06,sens=0.94
|
|