Создание среды разработки и производства для машинного обучения в Power BI - Часть 2
В прошлом посте мы объясняли, как мы можем создать функцию с целью параметризации процесса машинного обучения. В этой статье мы расскажем, как мы можем создать среду разработки и производства.
Создание другой среды в Power Query
Для создания новой среды в Power Query мы создали две основные группы: одну для «Develop», а другую для «Production». Чтобы создать другую группу, мы просто щелкаем правой кнопкой мыши в окне запроса и создаем две отдельные группы.
Разработка (тестирование и обучение)
Во-первых, мы создаем функцию для обучения модели и получения результата оценки. В этом сообщении мы покажем, как можно использовать «rpart» алгоритм дерева решений и «knn» как для классификации.
Сначала мы пишем некоторые R-коды для обучения моделей, а также для оценки алгоритма.
для «rpart» у нас есть:
Модель обучения
1
2
3
4
5
6
7
8
9
10
11
12
13
|
library(rpart)
library(hydroGOF)
Nrows<-nrow(dataset)
ShufffelData<-sample(Nrows,0.8*Nrows)
Train<-dataset[ShufffelData,]
Test<-dataset[-ShufffelData,]
DT <- rpart(Survived~., data = Train, method = "class")
predictions <- predict(DT, Test)
Pred<-data.frame(Test$Survived)
names(Pred)[1]<-paste("actual")
i=1 for(i in 1:nrow(Test))
if(predictions[i,1]>=predictions[i,2]) { Pred[i,2]<-"0"} else { Pred[i,2]<-"1")}
names(Pred)[2]<-paste("prediction")
|
Модель тестирования
1
2
3
4
5
6
7
8
9
10
11
12
|
cm <-as.matrix(table(Actual = Pred$actual, Predicted =Pred$prediction ))
sumtest<-sum(cm)
NrowTest<-nrow(cm)
diag <- diag(cm)
rowsums = apply(cm, 1, sum)
colsums = apply(cm, 2, sum)
p = rowsums / sumtest
q = colsums / sumtest
accuracy = sum(diag) / sumtest
precision = diag / colsums
recall = diag / rowsums
f1 = 2 * precision * recall / (precision + recall)
|
Затем следуем шагам в последнем посте, чтобы создать функцию и передать такие параметры, как «набор данных» для обучения, процент разделения, имя столбца для прогнозирования.
Код M для функции с параметрами в Power Query для обучения и отображения результата теста алгоритма rpart будет выглядеть следующим образом:
1
2
3
4
5
6
7
8
9
|
(#"Source Table" as table,#"Prediction Column"as text,Split as number,Method as text) as table=>
let
Source = #"Source Table",
#"Run R Script" = R.Execute("library(rpart)#(lf)library(hydroGOF)#(lf)Nrows<-nrow(dataset)#(lf)ShufffelData<-sample(Nrows,"&Text.From(Split)&"*Nrows)#(lf)Train<-dataset[ShufffelData,]#(lf)Test<-dataset[-ShufffelData,]#(lf)#(lf)DT <- rpart("&#"Prediction Column"&"~., data = Train, method = """&Method&""")#(lf)predictions <- predict(DT, Test)#(lf) Pred<-data.frame(Test$"&#"Prediction Column"&")#(lf) names(Pred)[1]<-paste(""actual"")#(lf)#(lf) i=1#(lf)for(i in 1:nrow(Test))#(lf){#(lf)if(predictions[i,1]>=predictions[i,2])#(lf) { Pred[i,2]<-""0""}#(lf)else #(lf) { Pred[i,2]<-""1""#(lf)}#(lf) #(lf)}#(lf) #(lf) names(Pred)[2]<-paste(""prediction"")#(lf) #(lf) #(lf)cm <-as.matrix(table(Actual = Pred$actual, Predicted =Pred$prediction ))#(lf)sumtest<-sum(cm)#(lf)NrowTest<-nrow(cm)#(lf)diag <- diag(cm)#(lf)rowsums = apply(cm, 1, sum)#(lf)colsums = apply(cm, 2, sum) #(lf)p = rowsums / sumtest #(lf)q = colsums / sumtest #(lf)accuracy = sum(diag) / sumtest #(lf)precision = diag / colsums #(lf) recall = diag / rowsums #(lf)f1 = 2 * precision * recall / (precision + recall) #(lf) #(lf)DTrpartEval<- data.frame(accuracy,precision, recall, f1)",[dataset=Source]),
DTrpartEval1 = #"Run R Script"{[Name="DTrpartEval"]}[Value],
#"Kept Last Rows" = Table.LastN(DTrpartEval1, 1)
in
#"Kept Last Rows"
|
Поэтому в Power Query мы создаем новый пустой запрос:
Затем в вкладке «Главная» -> «Запрос» нажмите «Advanced Editor».
Затем просто скопируйте и наложите M-код, который мы написали выше, чтобы создать функцию с параметрами.
Наконец, просто измените имя функции.
Мы попытались подготовить два разных набора данных (данные о Титанике и раке) и посмотреть результат оценки
Как вы можете видеть на приведенных выше рисунках, мы вызываем функцию для разных наборов данных с целью классификации.
Таким образом, мы создали среду для обучения развития для задачи классификации.