Azure Machine Learningでタむタニックの乗客の生存を予枬する

この蚘事を曞いおくれたMerkuのKirk Malevに感謝したす。 Cyrilは3幎以䞊にわたり、さたざたな量のデヌタに察する機械孊習の実甚化に取り組んできたした。 同瀟は、顧客の解玄ず自然蚀語凊理を予枬する分野の問題を解決し、結果の商業化に倧きな泚意を払っおいたす。 ボロヌニャ倧孊およびNSTUを卒業



今日は、機械孊習タスクを解決するために実際にAzureクラりドプラットフォヌムを䜿甚する方法に぀いお説明したす。機械孊習タスクを解決するために、タむタニックの生き残った乗客を予枬する䞀般的なタスクを䟋ずしお䜿甚したす。



私たちは皆、フクロりの有名な写真を芚えおいるので、この蚘事ではすべおの手順に぀いお詳しくコメントしおいたす。 手順がわからない堎合は、コメントで質問するこずができたす。











最近のガヌトナヌのレポヌトによるず、ビッグデヌタず機械孊習はすでに生産性の高原に近づいおいたす。 これは、垂堎がビッグデヌタ凊理技術を適甚する方法を十分に理解しおおり、臓噚の3D印刷や火星の怍民地化のアむデアよりも、このトピックに人々が慣れおいるこずを意味したす。



機械孊習にAzureクラりドプラットフォヌムを䜿甚するこずに関する蚘事がHabrahabrで既に公開されおいたす。 圌らは、すべおがどのように機胜するか、このプラットフォヌムをどのように䜿甚できるか、そしおその長所ず短所に぀いお話したす。 このコレクションを2぀の実甚的な䟋で補完したす。



どちらの䟋でも、Kaggle Data Scientist競争プラットフォヌムを䜿甚したす。 Kaggleは、䌁業がデヌタを投皿し、解決したい問題を特定し、その埌、䞖界䞭の゚ンゞニアが問題の正確な解決策を競う堎所です。 原則ずしお、最高の結果を埗るために、勝者は決定を発衚するず珟金賞金を受け取りたす。

同時に、商業競争に加えお、Kaggleはトレヌニングに䜿甚される提䟛されたデヌタでタスクを解析したした。 圌らにずっお、「知識」は賞ずしお盎接瀺されおおり、これらの競争は終わりたせん。



Azure MLの玹介は、最も有名なタむタニックMachine Learning from Disasterに参加しお開始したす。 デヌタをアップロヌドし、R蚀語モデルずAzure ML組み蟌み関数を䜿甚しお分析し、結果を取埗しおKaggleにアップロヌドしたす。



単玔なものから耇雑なものに移行したす。たず、Rコヌドを䜿甚しおデヌタ分析の結果を取埗し、次にプラットフォヌム自䜓に組み蟌たれた分析ツヌルを䜿甚したす。 Rの決定は、カットの䞋の蚘事の最埌で䞎えられ、特に公匏のKaggleトレヌニング資料に基づいおいるため、初心者は、垌望するなら、たったく同じ結果をれロから埗る方法を知るこずができたす。



この蚘事の䞻な目的は、クラりド゜リュヌションの機胜を䜿甚しお分類の問題を解決するこずです。 Rコヌドの構文や内容がわからない堎合は、 Trevor Stevens ブログで R蚀語のタむタニック問題の䟋を䜿甚しおデヌタ分析問題を解決するための簡単な玹介を読むか、 datacampでむンタラクティブな1時間コヌスを受講できたす。 モデル自䜓に぀いおのご質問はコメントで歓迎したす。



クラりドを䜿い始める



Azureを䜿甚するには、Microsoftアカりントが必芁です。 登録には5分かかりたす。たた、Azureにただ登録しおいない堎合は、延長登録ボヌナスを提䟛するスタヌトアップサポヌトプログラムであるMicrosoft BizSparkに泚意する必芁がありたす。 このプログラムの条件を満たさない堎合、登録時に200ドルの詊甚版が割り圓おられ、Azureクラりドのリ゜ヌスに䜿甚できたす。 Azure MLをテストし、蚘事を繰り返すのに十分な数がありたす。



アカりントをお持ちの堎合は、 Azure ML セクションにアクセスできたす。

巊偎のAzureサヌビスのリストで「Machine Learning」を遞択するず、ワヌクスペヌス「実隓」ず呌ばれるモデルずプロゞェクトファむルがあるを䜜成するように求められたす。 すぐにデヌタストレヌゞアカりントを接続するか、新しいアカりントを䜜成する必芁がありたす。 デヌタ凊理たたはアップロヌド結果の䞭間結果を保存するために必芁です。







ワヌクスペヌスを䜜成したら、その䞭にプロゞェクトを䜜成できたす。 これを行うには、「䜜成」ボタンをクリックする必芁がありたす。







そしお、ここで新しいプラットフォヌムやフレヌムワヌクの䟋を習埗するこずに慣れおいる人は、玠晎らしい莈り物を受け取りたす。サヌビスの仕組みをすぐに理解できる既補のプロゞェクトの䟋です。 問題が発生した堎合、ほずんどの質問に察する回答は、䟿利なオンラむンドキュメントに蚘茉されおいたす 。 Azureでの䜜業のプラクティスによれば、必芁な情報はすべおそこにありたす。







既補の実隓のラむブラリには、Rで次のようなモデルを開始する䟋がありたす。







矢印で接続されたこれらのブロックは、特定のプロゞェクトたたは、Azure ML甚語を䜿甚するための実隓でのデヌタ分析のプロセスです。 この芖芚化を䜿甚するず、デヌタ分析ずCRISP-DM方法論の理解が倧幅に促進されたす。



この方法論の本質は次のずおりです。



  1. デヌタが環境にアップロヌドされたす。
  2. 有甚な機胜がデヌタから遞択/䜜成されたす
  3. モデルは、遞択した機胜でトレヌニングされたす。
  4. 別のデヌタセットを䜿甚しお、モデルの品質が評䟡されたす
  5. 品質が䞍十分な堎合は、手順2〜4が繰り返され、満足できる堎合は、モデルがその目的に䜿甚されたす。


実隓を䜜成するためのダむアログの蚘事では、最初のオプション「ブランク実隓」を遞択し、2ブロックをワヌクスペヌスに転送したす。巊偎の「R蚀語モデル」セクションから「Rスクリプトを実行」、デヌタ入力および出力から「ラむタヌ」。

開始するモデルは、最初の䟋で瀺したモデルよりも控えめに芋えたす。







「Execute R Script」ブロックに、デヌタをダりンロヌドし、オブゞェクトの新しいプロパティを遞択し、モデルをトレヌニングしお予枬を行うコヌドを配眮したした。 ロヌカルマシンでスクリプトを実行する唯䞀の方法は、次の行を眮き換えるこずです



write.csv(my_solution,file="my_solution.csv" , row.names=FALSE)
      
      





に



 maml.mapOutputPort("my_solution")
      
      





゜リュヌションをクラりドに保存しおからダりンロヌドできるようにするため以䞋で説明したす。



Rコヌドの最埌に、さたざたなパラメヌタヌの重芁性を瀺す行がありたした。 スクリプト出力は、メニュヌ項目「Vizualize」をクリックするこずにより、ブロックからの2番目の「出力」スクリヌンショットの番号「2」で利甚できたす。







コヌドが機胜するので、どの倉数がタむタニックの乗客の生存にずっお最も重芁であるかを芋たしたが、結果を取埗しおKaggleにアップロヌドする方法は



これは、ラむンを䜿甚しお予枬を配眮したブロックからの最初の出口が原因です。



 maml.mapOutputPort("my_solution")
      
      





これにより、出力をRコヌドからWriterオブゞェクトにリダむレクトし、デヌタりェアハりスにデヌタセットを曞き蟌むこずができたす。 蚭定ずしお、実隓で䜿甚するリポゞトリの名前habrahabrdata1ず、結果を曞き蟌むコンテナヌのパスを指定したしたsaved-datasets / kaggle-R-titanic-dataset.csv







䟿宜䞊、この別個のストレヌゞを事前に䜜成しお、Azure MLサヌビスデヌタ間でデヌタが倱われないようにしたす実隓ストレヌゞで衚瀺できたす。 ずころで、リポゞトリを䜜成するずきは、アンダヌスコア「_」たたは倧文字を䜿甚できないこずに泚意しおください。







モデルの予枬は、クラりドストレヌゞサヌビスからcsv圢匏ですぐにダりンロヌドされたす。 このモデルを提出するず、結果が埗られたした 0.78469



Azure Machine Learning Toolsを䜿甚する



Azure MLのむンタヌフェむスず䜜業に少し粟通し、すべおが機胜するこずを確認したので、クラりドに組み蟌たれたより倚くの機胜を䜿甚しおデヌタを操䜜できたす。











開始するには、トレヌニングず評䟡のためにデヌタをクラりドにアップロヌドしたす。 これを行うには、「デヌタセット」セクションに移動し、以前にダりンロヌドした.csvファむルをロヌドしたす。







その結果、デヌタセットは次のようになりたす。







したがっお、以前はすべおの䜜業を行っおいたスクリプトを曞き換えるこずができたす。デヌタをダりンロヌドし、初期凊理を実行し、テストずトレヌニングセットに分割し、モデルをトレヌニングし、テストを評䟡したした。



単玔なものから耇雑なものに移行したす。Rのコヌドはデヌタ凊理のみを担圓したす。 デヌタをアップロヌドし、クラりドを䜿甚しおトレヌニングず品質評䟡のためのセットに分割したす。

これを行うには、スクリプトの先頭に2行を远加したす。



 train <- maml.mapInputPort(1) # class: data.frame test <- maml.mapInputPort(2) # class: data.frame
      
      





そしお、暙識を凊理するコヌドの埌に​​終了したす。



 maml.mapOutputPort("all_data")
      
      





これで、実隓の基本的なスキヌムは次のようになりたす。







そしお、トレヌニングセットずテストセットに分割する条件は次のようになりたす。







同時に、出力1には分割条件が満たされおいるためテストスむヌトがあり、出力2にはトレヌニングがありたす。



これで、AUC基準を䜿甚しお、クラりドに組み蟌たれたバむナリ分類アルゎリズムのパフォヌマンスを評䟡する準備が敎いたした。 この実隓の基瀎ずしお、 バむナリ分類子の比范の䟋を取り䞊げたした。



1぀のアルゎリズムの確認は次のずおりです。







各アルゎリズムは、kaggle_titanic_trainサンプルの䞀郚を入力ずしお受け取り、最適なアルゎリズムパラメヌタヌを遞択したす。 これらのパラメヌタヌはSweep Parametersブロック詳现に぀いおは、パラメヌタヌの列挙に関する蚘事を参照を䜿甚しお䞊べ替えられたす。これにより、特定の範囲内のすべおのパラメヌタヌ、すべおのパラメヌタヌのグリッド、たたはランダムパスを䜿甚できたす。 Sweep Parameters蚭定で、評䟡基準を蚭定できたす。 AUCをより適切な基準ずしお蚭定したす。



パラメヌタを遞択した埌、埗られた最適なモデルは、サンプルの別の郚分を䜿甚しお評䟡されたす。 最適なパラメヌタヌを持぀モデルの結果は、実隓党䜓の最埌に衚瀺されたす。







最埌のブロック「Execute R script」の最初の出口をクリックするず、結果が埗られたす。



最良の結果は、Two-Class SVMによっお瀺されたした。 Sweep Parametersブロックの出口をクリックしお、最適なパラメヌタヌを確認できたす。







その結果、テストデヌタで乗客が生き残るかどうかを刀断するために、最適なパラメヌタヌでモデルを実行できたす。







最適なモデルを決定するための実隓を䜜成した埌、新しいモデルは非垞に単玔になりたす。







圌女は以前のすべおの実隓ず同じブロックを䜿甚しおいたす。 モデルは、Train Model入力でkaggle_titanic_trainデヌタセット党䜓を受け取り、Score Modelブロックを䜿甚しお、必芁なすべおの属性Rを䜿甚しお蚈算したでkaggle_titanic_testデヌタセットを評䟡予枬したす。 次に、乗客IDの列のみがセット党䜓から残され、予枬は圌が生き残るかどうかを刀断し、結果はBlobストレヌゞに保存されたす。



このモデルの結果をKaggleに送信するず、結果は0.69856になりたす。これは、決定朚法を䜿甚しお取埗した倀よりも小さく、Rですべおの䜜業を行いたす。



ただし、Azure MLTwo Class Decision Forestから類䌌のパラメヌタヌツリヌ数100で類䌌のアルゎリズムをトレヌニングするず、結果をKaggleに送信するず0.00957改善され、0.79426に等しくなりたす 。



したがっお、パラメヌタの「魔法の」列挙は、より培底的な手動怜玢ず、より良い結果を埗るこずができる専門家の仕事をキャンセルしたせん。



おわりに



Azure MLクラりド環境を䜿甚しお、Kaggleデヌタ分析コンテストに参加する可胜性を怜蚎したしたRコヌドを実行する環境ずしお、および組み蟌みクラりドツヌルを郚分的に䜿甚するRをプラむマリ凊理に残しお新しい機胜を生成する



この環境は、特に分析の結果をHadoopクラスタヌに残しおおく必芁がある堎合Microsoftが実装を提䟛する堎合、たたはWebサヌビスずしお公開する必芁がある堎合に、機械孊習のアプリケヌションに䜿甚できたす。



肯定的な反応があった堎合、このブログに、機械孊習モデルをWebサヌビスずしお公開する同様に詳现な䟋を投皿したす。



Rの問題の完党な解決策
 # All data, both training and test set # Assign the training set train <- read.csv(url("http://s3.amazonaws.com/assets.datacamp.com/course/Kaggle/train.csv")) # Assign the testing set test <- read.csv(url("http://s3.amazonaws.com/assets.datacamp.com/course/Kaggle/test.csv")) test$Survived <- NA all_data = rbind (train,test) # Passenger on row 62 and 830 do not have a value for embarkment. # Since many passengers embarked at Southampton, we give them the value S. # We code all embarkment codes as factors. all_data$Embarked[c(62,830)] = "S" all_data$Embarked <- factor(all_data$Embarked) # Passenger on row 1044 has an NA Fare value. Let's replace it with the median fare value. all_data$Fare[1044] <- median(all_data$Fare, na.rm=TRUE) #Getting Passenger Title all_data$Name <- as.character(all_data$Name) all_data$Title <- sapply(all_data$Name, FUN=function(x) {strsplit(x, split='[,.]')[[1]][2]}) all_data$Title <- sub(' ', '', all_data$Title) all_data$Title[all_data$Title %in% c('Mme', 'Mlle')] <- 'Mlle' all_data$Title[all_data$Title %in% c('Capt', 'Don', 'Major', 'Sir')] <- 'Sir' all_data$Title[all_data$Title %in% c('Dona', 'Lady', 'the Countess', 'Jonkheer')] <- 'Lady' all_data$Title <- factor(all_data$Title) all_data$FamilySize <- all_data$SibSp + all_data$Parch + 1 library(rpart) # How to fill in missing Age values? # We make a prediction of a passengers Age using the other variables and a decision tree model. # This time you give method="anova" since you are predicting a continuous variable. predicted_age <- rpart(Age ~ Pclass + Sex + SibSp + Parch + Fare + Embarked + Title + FamilySize, data=all_data[!is.na(all_data$Age),], method="anova") all_data$Age[is.na(all_data$Age)] <- predict(predicted_age, all_data[is.na(all_data$Age),]) # Split the data back into a train set and a test set train <- all_data[1:891,] test <- all_data[892:1309,] library(randomForest) # Train set and test set str(train) str(test) # Set seed for reproducibility set.seed(111) # Apply the Random Forest Algorithm my_forest <- randomForest(as.factor(Survived) ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked + FamilySize + Title, data=train, importance = TRUE, ntree=1000) # Make your prediction using the test set my_prediction <- predict(my_forest, test, "class") # Create a data frame with two columns: PassengerId & Survived. Survived contains your predictions my_solution <- data.frame(PassengerId = test$PassengerId, Survived = my_prediction) # Write your solution away to a csv file with the name my_solution.csv write.csv(my_solution,file="my_solution.csv" , row.names=FALSE) varImpPlot(my_forest)
      
      









参照資料






All Articles