フリーランチ食べたい

No Free Lunch in ML and Life. Pythonや機械学習のことを書きます。

Amazon PersonalizeとServerless Frameworkを使って半日でレコメンドAPIを作成する

前回の記事でGAになったばかりのAmazon Personalizeの使い方の解説をしました。 ただ、前回の記事では実際にアプリケーションから利用するところ、つまりWeb APIとして公開するところまでは書くことができませんでした。

ということでこの記事では、Serverless Frameworkと組み合わせることで半日でレコメンドAPIを公開する方法を書きたいと思います。

基本的なワークフローの解説については下の記事を参照してください。

blog.ikedaosushi.com

またコード全体はGitHubにアップロードしており、記事の最後に記載しています。

それでは早速レコメンドAPIを作成していきましょう。

続きを読む

Amazon Personalize使い方まとめ / CloudFormationとPythonでレコメンドアプリケーションを学習・デプロイする

今週、Amazon PersonalizeがGAになりました。東京リージョンでも使うことができます。

この記事ではAmazon Personalizeの概要、使い方の解説を行います。PythonのAWS SDKを使ってレコメンドアプリケーションを作成していきます。

また事前準備のS3やIAM Roleの作成で、AWSの公式ドキュメントだと手作業が発生しているのですが、それだと大変なので一発で構築できるCloudFormationも紹介します。

aws.amazon.com

最初に触った感想

少し触ってみたのですが、以下の点で非常に良いと思いました。

  • 学習・予測(レコメンド取得)が全てサーバーレスで行える
  • 事前に準備されているアルゴリズムはDeep Learningベースで多く、それ以外も高度なもの

逆に以下のような不満な点もありました。

  • 用語が機械学習で一般的に使うものとかけ離れていて混乱する
  • ARNを引数に渡す処理が多く、CloudFormationで管理したいがまだ対応していない

1つめの不満点はこの記事で図解して解説してみました。2点目はCloudFormationに対応するのを待ちたいですね。

続きを読む

【組み合わせ最適化入門】カンファレンスのタイムテーブル決めをマッチング問題としてGoogle OR-Tools/Pulp/munkresで解く

f:id:ikedaosushi:20190606171352p:plain

PyCon JPの運営メンバーとして自分は、昨年度のPyCon JP 2018のタイムテーブル決めに組み合わせ最適化問題を用いました。ちなみに最終的なタイムテーブルはアルゴリズムで算出された結果を人間がレビューして調整しています。 昨年度は時間の制約があり、いくつか反省点があったので今年は改善したいと考えています。

pyconjp.blogspot.com

そういうわけで事前調査も兼ねて、カンファレンスのタイムテーブル決めを組み合わせ最適化問題として考え、それをPythonのライブラリを使って解く方法を書きたいと思います。

続きを読む

【機械学習】混同行列を表示するのに便利な「pycm」

機械学習のクラス分類モデルを評価する際に用いる混同行列を簡単に表示できるちょっとしたライブラリがあったので紹介します。

f:id:ikedaosushi:20190526171950p:plain

混同行列とは、機械学習で予測したクラス分類の結果をまとめた行列です。ちょうど上の画像のように「どのクラスに分類されて」「実際はどのクラスだったか」がひと目でわかる表のことですね。

続きを読む

Aurora Serverless Data APIとLambdaでAPIをServerless Framework(CloudFormation)で作る

昨年末のAurora Serverless Data APIの登場で、Lambdaからの利用が簡単になりました。この記事ではServerless Framework、CloudFormationを用いて、Aurora Serverless Data APIとLambdaを使ったAPIを構築する方法を紹介します。

f:id:ikedaosushi:20190525233641p:plain

使ったコードはすべてGitHubに上げています。記事内ではわかりやすさのためコードを抜粋して記載しますのでコード全体を確認したい場合はそちらを参照してください。GitHubのリンクは記事の最後に貼っています。

続きを読む

【Python】 機械学習の可視化が捗るライブラリ「Yellowbrick」

f:id:ikedaosushi:20190516184158p:plain

機械学習Podcast「TWiML&AI」で先週取り上げられた可視化ライブラリ「Yellowbrick」が非常に便利だったので紹介します!ちなみにPodcastには作者の1人であるRebecca Bilbroさんが出演しているので興味持った方は是非聞いてみてください。

twimlai.com

www.scikit-yb.org

Yellowbrickとは

一言で言うと、機械学習に特化した可視化ライブラリです。実装的な面で言うと(こちらの方がわかりやすいかもしれません)、scikit-learnとmatplotlibをラップして、scikit-learnライクなAPIで使うことができるものです。

例えば相関行列のヒートマップをプロットしたい場合は次のように書くだけでグラフを作ることができます。

visualizer = Rank2D(features=features, algorithm='pearson')
visualizer.fit(X, y)
visualizer.transform(X);

f:id:ikedaosushi:20190516144509p:plain

なんと、たった3行で書くことができてしまいます。

※一応補足ですが、matplotlibやseabornでは相関係数の計算は自分で行う必要があります(seabornで書く場合のコード)。そこをYellowbrickが良い感じにやってくれる、ということですね。

続きを読む

CloudFormationのOutputsを活用してServerlessプロジェクト内の情報を外部と共有する

Serverless内で使っている環境変数を外部と共有する方法を紹介します。Serverlessでは設定ファイル内でCloudFormationを書くことができ、そこで作成したS3などのResourceをServerlessプロジェクトから使うことができます。この機能はとても便利なのですが、作りたいアプリケーションが、常にServerlessだけで完結できるとは限らず、ときにはServerlessプロジェクト外のスクリプトから、Resourceの値を参照したい場合があります。

例えば、以下の記事ではSageMakerの学習にあたってServerlessプロジェクト外の環境からSageMakerのAPIを呼び出しています。具体的には、「ローカルスクリプトで学習」「Serveless(Lambda)から予測」という感じです。

blog.ikedaosushi.com

こんなときに、どうやってServerlessプロジェクト外のスクリプトからServerless内のResourceを参照すれば良いか、について書きたいと思います。

続きを読む