Windows Azure

Web Appsには、PHPランタイムが標準でインストールされているので気軽にPHPを使ってコーディングすることができます。Azure Storage ServiceをPHPから使いたい場合は、Azure SDK for PHP を使用すると簡単に処理を書くことができます。

でも、動作させるのに一部不明点もあり、はまったので回避策をメモしておきます。この回避策がいいのか、回避しなくても公式ドキュメント通りで良いのかは不明。

Azure SDK for PHPの環境準備

公式ドキュメントによると、Composer経由でのインストールや、PEARパッケージでのインストールが案内されています。まぁこの通りにやれば動作すると思うのです。

でも、これで環境を作成した場合は、インスタンスが移動したり、スケールアップ/ダウンさせた場合、環境は残っているのだろうか。永続化されるのだろうか…?

これに関しては正解は調べきれてないのだけど、なんとなく永続化対象外になりそうだったので、永続化されるように環境を作りました。

.user.ini ファイルの準備

githabuを使用した自動デプロイメントの環境でWeb Appsにデプロイしているので、githubにコミットしたもので構築した環境なら永続化されるだろうって、ことでコミットしまくります。

Azure SDK for PHPの依存ライブラリを使うために、依存ライブラリを配置するディレクトリを、.user.iniファイル(これは、rootディレクトリに配置。githubでコミットする際のルートディレクトリ配下。)を作成して、以下内容を記述しました。

include_path = ‘.;D:\home\site\wwwroot\php’

ついでに、デバッグしやすいようにログの出力先の変更と画面への表示を許可することにしました。

error_log=D:\Home\site\wwwroot\php_errors.log
display_errors=On 
html_errors=On 
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT

これで下準備OK!

依存ライブラリのインストール

依存ライブラリを配置します。配置場所は、rootディレクトリ直下にphpディレクトリを作成し、そこに配置しました。
配置したのは、HTTP/Request2、Net/URL2、PEARの3つ。

image

 

Azure SDK for PHP のインストール

ここまでで準備が完了したので、Azure SDK for PHPを実際にダウンロードして配置します。

後は、公式ドキュメント通り。

require_once ‘.\WindowsAzure\WindowsAzure.php’;

use WindowsAzure\Common\ServicesBuilder;
use WindowsAzure\Common\ServiceException;

読み込んで、名前空間を宣言します。そのあと、接続文字列を書いて、それをProxyに渡すと。

$connectionString = “DefaultEndpointsProtocol….”;
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);

これで、例えばBlockBlobを追加するなら、それを呼び出すと。

try {
     //Upload blob
     $blobRestProxy->createBlockBlob(“traning”, $blob_name, $content);
}
catch(ServiceException $e){
     // Handle exception based on error codes and messages.
     // Error codes and messages are here:
     // http://msdn.microsoft.com/library/azure/dd179439.aspx
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.”: “.$error_message.”<br />”;
}

これで処理完了。簡単ですね。

Windows Azure

お名前.comで購入したドメインを使用して、Azure App Serviceのカスタムドメインを設定した時のメモ。

  1. Azure App Serviceのプラン/価格レベルの変更
    F1 Freeではカスタムドメインを設定できないので、D1 Sharedに変更
  2. カスタムドメインを設定するために、onamae.comにログインし、ネームサーバーの設定をする
    [ネームサーバーの設定]-[DNS関連機能の設定]を選択し、対象のドメインの設定をする
    設定するのは、次の3レコード。
    SNAGHTML6cd6448a

    example.comをAレコードでIPアドレス(IPアドレスはポータルで確認)
    www.example.comをCNAMEレコードでexample.azurewebsites.net
    awverify.example.comをCNAMEレコードでawverify.example.azurewebsites.net

  3. Azureポータルで、Webサイトの設定で、カスタムドメインを設定する
    [設定]-[ルーティング]-[カスタムドメインおよびSSL]を選択する
    image
  4. 外部ドメインの使用を選択する
  5. ドメイン名に次の2つを設定する
    www.example.com
    example.com

    この画面で表示されるIPを2番で設定する。

Windows Azure

image

MSDNに、Azure Active Directory を削除するための手順を説明したブログ「Delete an Azure Active Directory」が投稿されています。Azure Active Directory を削除するにはポータルで操作する前に、Azure Active Directory PowerShellを使用する必要があります。

課題

Azure Active Directory を削除しようとすると、イラッとするかもしれません。
消してみましょう。

 

エラーが出ます。

image

 

すべてのユーザーを消しても、まだエラーが出ます。

image

 

アプリケーション一覧からすべてのアプリケーションを削除しましょう。「自分の会社が所有するアプリケーション」を選択し、フィルター表示します。
アプリケーションはありません。

 

image

 

しかし、「自分の会社が使用するアプリケーション」には登録があります。

 

image

 

解決策

Azure Active Directory PowerShellを使用します。

image

 

Azure Active Directory Module for Windows PowerShell (64-bit version)からダウンロードして入手することができます。

 

deleteというユーザーを作成します。

 

image

 

image

 

image

 

image

 

パスワードを変更する必要があります。
https://login.microsoftonline.com/ にログインして、パスワードを変更します。

 

image

 

このユーザーは、PowerShellでログインするのに必要です。

 

Import-Module MSOnline
Connect-MsolService

ログインプロンプトが開きます。Global Adminのユーザー名とパスワードを入れます。

 

image

 

Get-MsolServicePrincipal | Remove-MsolServicePrincipal

大量のエラーがでますが無視してください。

 

image

 

ポータルにアクセスし、ユーザーを削除します。

今度こそ削除できます。

image

Windows Azure

Azure DSC 拡張機能

Azure DSCは、Microsoft Azure PowerShell SDKの一部で、Azure仮想マシン用のPowerShell Desired State Configuration拡張機能です。

Azure DSC Extension v2.8

エクステンションの依存関係を指定して、依存関係のマッピングに従って関連ファイルをダウンロードします。

Azure DSC Extension v2.7

Windows Management Framework 4.0の最新バージョンへのサポートを追加しました。JSONファイルで、「WmfVersion」プロパティでフレームワークのバージョンを指定(4.0、5.0PP、latest)します。(参考:How to use WMF 4 with Azure DSC Extension in Azure Cloud Service Manager (ASM)

Azure DSC Extension v2.6

いくつかのネットワークの問題を分析するのに役立つデバッグ情報を追加しました。今回のアップデートには追加機能はありません。

Azure DSC Extension v2.5

マイナーアップデートで機能追加はありません。

ネットワーク問題を解析するのに役立つデバッグ情報の追加といくつかの軽微な更新です。

Windows Management Framework 5.0 Production Previewに依存しています。

仮想マシンにインストールするには、「Set-AzureVMDscExtension -Version 2.5」を使用します。

Azure DSC Extension v2.4

機能追加はありません。

Windows Management Framework 5.0 Production Previewに対応しました。

仮想マシンにインストールするには、「Set-AzureVMDscExtension -Version 2.4」を使用します。

Azure DSC Extension v2.3

Windows Server 2016 Technical Previewに対応しました。

Windows Server 2016 で拡張機能を使うのに、WMFが不要になり、仮想マシンの再起動が不要になりました。そのため、拡張機能を使い始めるのにかかる時間がとても短くなりました。

Windows Management Framework 5.0 Preview April 2015に依存しています。

Azure DSC Extension V2.2

Publish-AzureVMDscConfigurationコマンドレットに新しい機能が追加されました。

Azure Resource Manager(ARM)で、Azure DSC拡張機能でデプロイするコマンドレッドセットが提供されます。

リリース履歴(リリースノート)

2015/10/21 Version 2.8

2015/10/01 Version 2.7

2015/09/20 Version 2.6

2015/09/16 Version 2.5

2015/09/01 Version 2.4

2015/08/22 Version 2.3

2015/08/17 Version 2.2

2015/07/21 Version 2.1

2015/06/17 Version 2.0

2015/05/15 Version 1.10.1

2015/04/29 Version 1.9

2015/04/28 Version 1.8

2015/02/24 Version 1.7

2015/02/23 Version 1.6.3

2014/11/20 Version 1.5

2014/10/23 Version 1.4

2014/10/13 Version 1.3

2014/10/07 Version 1.2

2014/09/08 Version 1.1

2014/08/01 Version 1.0

参考サイト

Windows Azure

image

Microsoft FEST 2015 で、砂金さんが実施した「今から始める Azure Machine Learning 最初の一歩」をまとめてみました。

How-old.net という写真から年齢を抽出するサイトがあります。
まだ見たことがない人はぜひ見てください。
見て欲しいのは、年齢ではなくて、The magic behind How-Old.net という、How-Oldの技術構成を説明したページがありますので、そこはぜひ見てください。

Machine Lerningは、何に使えるのでしょうか?

いろいろ使えます。

  • 異常検知(ログが流れていて、ぽっと異常なログが出た時に検知)
  • パターン認識(ルールに基づいてモデルを作って、そのモデルにあたるのは何%ですか?)
  • リコメーションシステム
  • 売上予測(人間よりはよほどうまくやれます)

 

image

Machine Learning は、Azure Machine Learningだけ詳しくてもダメで、周辺のデータの扱い方やほかのアプリからどうやってAPIでアクセスするのかを理解する必要があります。
VisualizeではPowerBI、データ送信にはDataLakeというテクノロジーも抑えておく必要があります。

 

image

Azure Machine Learning がやろうとしていることは、機械学習の民主化です。
今までも、SassやSPSSでもできたけど、誰でも簡単にできるようにしようと思っています。

Azure Machine Learning は、皆さんに世の中を変えるようなアルゴリズムを0から考えてもらおうとは思っていません。
誰かが作ってくれたアルゴリズムを気軽に使えるAzure ML Studioがあって、ここでうまくデータを扱えるサイエンティストがいてくれたら良いと思います。

Azure ML との3つのかかわり方

image

  • APIをただ叩くだけでいい人
  • テンプレートを利用し、カスタマイズして利用する人
  • ゼロからモデルを作成する人

 

APIをたたく

image

http://gallery.azureml.net というサイトがあります。

image

例えば、コンピュータービジョンAPIで、Face APIというものがあります。
これは、アダルト画像ではありませんという判定です。
単に肌色識別だけでやっていると、ご認識しそうですがちゃんと判定されています。

 

image

Face APIを使ってみました。
Face APIからは属性データが返ってきます。
アプリケーションからロジックとして属性データを利用して、加工・抽出することができます。

 

image

難しいことはマイクロソフトが裏側でやってくれるというのを信じてもらえるのなら、すでに多くのAPIが組み込み可能な状態で多くのAPIが提供されています。

 

image

まだ日本語に対応していませんが、英語の文章を与えると気分が上がったり下がったりしているのを分析しましょうというAPIです。
Happy Friday と書くと、95%ぐらいの確率で能天気ですね。
悪いことをかくと残念そうねと判定した結果が返ってきます。

 

テンプレートを使う

image

やろうと思うとそれなりに大変です。
一見便利そうなんですが、いろんな前提知識がないとうまく扱えない代物です。

 

image

モデルを作るという作業は決められたとおりに組めば終わりという代物ではなくて、モデルを作って、精度が悪いので、もう少し工夫をしてモデルを改良して精度をあげましょうという形で、ぐるぐる繰り返す作業が必要になります。

 

image

実際にやってみましょうか。
ギャラリーにいくつかのサンプルが提供されています。

 

image

異常検知をするパッケージを見てみましょうか。上のほうで、データを読み込んでいます。

 

image

このあたりで、One-Class Support Vectorを使って予測学習モデルを作成しています。

 

image

一番下のほうには、モデルを評価するEvaluate Modelがあります。

image

これを実行しデータをみると、Rとかをしている人には見慣れたグラフが表示されます。

 

image

言葉的にわかりやすいところで、Accuracyで確からしさが70%というの示してます。

データを読み込むデータセットがついているので実行することができます。
データを増やしたり減らしたりしたらどうなるか?モデルを変えたらどうなるのかというのを繰り返しテストして評価できます。

 

image

今度は売上予測モデルを見てみましょう。
Rスクリプトというのがあります。

 

image
これはRスクリプトをぺろっとはっつけてあります。これはマイクロソフトのAPIをあまり利用せず、自分たちがすでに持っているスクリプト、ライブラリをそのまま使えます。

 

学習方法

image

ビジネスシナリオはいったんおいておいて、もっと学習したいんだ!って場合は、サンプルがたくさん提供されています。このサンプルをまずはいじり倒してください。

 

アーキテクチャ

image

いろんなビジネスシナリオで使えるのなのですが、バッチなのかリアルタイムなのかを意識してください。
学習結果に基づいて、リアルタイムに予測することはできます。
学習をリアルタイムにするのは結構大変です。
モデルを書き換えるのは、週次、月次でやろう。モデルを変えていくのはバッチでやろう。
予測は一か月に待ってくださいてのはビジネスに合わないのでリアルタイムでやりましょう。

 

ゼロからモデルを作成する

image

機械学習という広いカテゴリををなんとなく2つに分けると、教師あり学習(スーパーバイゾン)か、教師無し学習かの2つに分けます。

教師あり学習はラベルが重要です。
正解をわかっているデータを用意できるのなら、そのサンプルの正解(こういう行動をしたらやめる/やめない、こういう顔立ちは日本人だ男性だ)がわかるのなら教師あり学習。

まったく正解がない場合は、どーんとあるデータから特徴量を見つけながら、その特徴量がなぜ発生しているのかを紐といていって、パターンが分かっていくという分析の場合は正解がなくてもできる。
ただ、やれることは限られるので、なんとかラベルリングしたデータを用意できるといいですね。

 

image

レコメンデーションしましょう!となると、いろんな方法があります。
いろんな方法がある中で、どれを選びましょうかというのは自分で選ばないといけません。

ルールベースというのは、If文でロジックを書くものですね。
協調フィルタリングはAmazonで有名になったもので、自分と似たような人を見つけて、そこから購買パターンを導き出すものですね。

 

image

結果の評価が一般人には大変なんですよね。
どの値をどう見たらいいのかがわかりにくいですもんね。何がどう正解なのかがわからない。

基本的にはROC曲線てのがあって、AUCの値が大きければ大きいほど正解率が高いモデルというふうに規定されます。
正解率が高いであって、100%ではないんですね。
機械学習を通して、ビジネス的問題を解決するときに、100%保障しないといけないシナリオでは使いにくいですね。
正解率が例えば91%だとしたら、9%は外れることを前提に、どこに適用するのかを考える必要があります。

 

image

砂金モデルがあります。
砂金モデルに投入するデータは、モビルスーツです。
このモデルは二項分類で、このモビルスーツは連邦っぽいか、ジオンっぽいかを判定するものです。

データを用意するのに面倒な作業が発生します。
きちんとしたデータを用意しないといけないのですが、それをやりきるだけのパッションを与えてくれるデータが必要になります。
自分で学ぼうというときには、自分が楽しめるものを選定するといいでしょ。
(お金好きなら株、ギャンブル好きなら競馬etc

 

image

まずは、Readerでデータの入り口を定義します。
この例では、Azure Blobからデータを取得してきています。

 

image

次はノイズを減らしています。
利用するデータカラムを4列から2列にし、Nullや0だったらスキップするなどを定義しています。
データのクレイジングと呼んでいます。

 

image

スプリットという処理をしています。
学習するデータと、予測だけするデータに分けています。

 

image

どの項目を正解と定義するかを定義します。

 

image

モデルをスコアリングします。このモデルがどれぐらいの制度があるのかをスコアリングします。

image

スコアの評価結果を確認します。

 

image

実際に実行してみましょう。どのステップを今処理しているのかが見えます。
AzureMLは、実行している時だけに課金されます。モデルを作成している時には課金されません。

 

image

Web Service output っというのを定義しています。
Webフロント用にWeb Serviceとしてさらしてくれます。

 

image

特徴的なのは、Excelマークですね。
これをクリックしてダウンロードして開いて、マクロを実行してみましょう。

 

image

インプットとアウトプットを定義されています。
値をいれると結果が表示されます。

 

image

RX-75といれると、連邦ですねっと結果がでてきますね。

 

image

実際にやってみたい人はレコメンデンションシステムの丁寧な手順書がありますので、やってみてください。

 

image

マシーンアルゴリズムチートシートがあります。
http://aka.ms/AzureMachineLearningCheatSheet