macOS環境構築メモ (2020/05)
久々にMacBookProを新調したので、環境構築のメモ。
My new gear… (やってみたかっただけ pic.twitter.com/JUx80izHkE
— やぐ (@yag_ays) 2020年5月23日
なんと以前の記事がまだインターネット上に残っていたが、もう10年以上経ってしまった。使わなくなったアプリなどもあるが、基本はほぼ変わっていない……。
システム環境設定
- デスクトップとスクリーンセーバー
- スクリーンセーバー: 開始までの時間 30分
- Dock
- Dockを自動的に表示/非表示: on
- サウンド
- メニューバーに音量を表示
- キーボード
- キーボード
- キーのリピート: 速い
- リピート入力認識までの時間: 短い
- 修飾キー: Caps Lockを「アクションなし」
- Control Stripをカスタマイズ: 「画面をロック」を追加
- ユーザ辞書
- 英字入力中にスペルを自動変換: off
- 文頭を自動で大文字にする: off
- スペースバーを2回押してピリオドを入力: off
- ショートカット
- Spotlight検索を表示: ⌃⇧スペース
- 次のウィンドウを操作対象にする: ^⇧Z
- 入力ソース
- ことえりを削除、Google日本語入力のみ
- キーボード
- トラックパッド
- ポイントとクリック
- 調べる&データ検出: off
- その他ジェスチャ
- ページ間をスワイプ:3本指でスワイプ
- アプリケーションExpose: on
- ポイントとクリック
- 省エネルギー
- バッテリー
- ディスプレイをオフにするまでの時間: 15分
- バッテリー電源使用時はディスプレイを少し暗くする: off
- 電源アダプタ
- ディスプレイがオフのときにコンピュータを自動でスリープさせない: on
- バッテリー
- 日付と時刻
- 時計
- 秒を表示: on
- 日付を表示: on
- 時計
- 共有
- コンピュータ名: 変更
メニューバー
- バッテリー
- 割合(%)を表示: on
Finder
- 一般
- デスクトップに表示する項目: すべてoff
- 新規Finderウィンドウで次を表示: $HOME
- フォルダを新規ウィンドウではなくタブで開く: off
- サイドバー
- $HOME: on
- 最近の項目: off
詳細
- すべてのファイル名拡張子を表示: on
- 拡張子を変更する前に警告を表示: off
- 検索実行時: 現在のフォルダ内を検索
表示
- リスト
- パスバーを表示
Dock
- 起動していないアプリをすべてDockから削除
Google日本語入力
- 一般
- ¥キーで入力する文字: バックスラッシュ
- 入力補助
- アルファベット: 変換前文字列/変換中文字列: 半角
- 数字: 変換前文字列/変換中文字列: 半角
フォント
アプリケーション
- Chrome
- Dropbox
- Slack
- https://slack.com/signin/find からログインするとGmailに紐づくチャンネルに一括で入れる
- Skitch
- 1password
- DaisyDisk
- Authy Desktop
- Karabiner-Elements
- right_shift -> escape
- Final Cut Pro X
- Notion
- Alfred
Terminal
スクリーンショットの保存先を変更
$ mkdir Documents/ss/ $ defaults write com.apple.screencapture location ~/Documents/ss/ ;killall SystemUIServer
- フローティングサムネールを表示: off
「データ活用のための数理モデリング入門」で、アイデアを数式に落とし込む
「データ活用のための数理モデリング入門」をご恵贈いただきましたので、このブログで紹介したいと思います。私は著者の一人からお声がけいただき出版前に原稿をレビューさせていただく機会がありましたので、実はあとがきにこっそり名前が載っていたりします。
本書について
この本は、ビジネスにおける様々な課題を数理モデリングを通じて解決するための入門書です。ビッグデータから人工知能/AIへと言葉を変えつつも、世の中の流行として注目され続ける企業のデータ活用ですが、どういったデータに対して何をするかという活用の実態は多種多様です。ECサイトにおける商品のレコメンドに始まり、広告配信の配信の最適化や業務効率化、または社内に眠っている情報を素早くアクセスできるようにする検索技術であったり、データから新たな知見を生み出すデータマイニングといったものもあります。企業によって使えるデータが違えば課題も異なり、データ活用という言葉が意味するものも異なってきます。その活用へのアプローチとして用いられる技術が「数理モデリング」です。
そういったビジネスにおける数理モデリングを解説した入門書が「データ活用のための数理モデリング入門」です。
アイデアを数式に落とし込む
私も機械学習エンジニアとして様々な案件に携わるなかでもっとも重要な技術だと感じるのが、本記事のタイトルにも示した「アイデアを数式に落とし込む」ことです。ECサイトの商品レコメンドを例に考えてみましょう。なにかユーザがもっと商品を買うようなレコメンドをしよう!と思ったとき、あなたは何を考えるでしょうか。
- 売れている商品をおすすめしよう
- ユーザが前に買った商品と似ている商品をおすすめしよう
- 今後人気が出て売れそうな商品をおすすめしよう
レコメンドに詳しくない人でも、こういったアイデアはパッと出せると思います。では、このアイデアをどう具現化すれば良いでしょうか。売れている商品ならば集計すれば簡単に出せるかもしれないですが、ある商品に似ている商品ってなんだ?と考えた時に、どう「似ている」を表現しましょう?色が似ている、形が似ている、ブランドが似ている、といろいろな似ているがありますが、ユーザに次に購入してもらうための「似ている」というのは、意外と考えるのが難しいものです。とあるマンガの最新刊という商品を考えた時に、ある意味一番似てそうなのは同じマンガの一つ前の巻ですが、最新刊を買う人はその前の巻も持ってそうなのでレコメンドしても効果は薄そうです。また、今後人気が出て売れそうというのも、未来のことを予測しなければいけないので難しいですよね?人間が全部の商品の売上を毎日チェックして予想するのは大変ですし、予測を当てることは賭博のようなものです。
こうした時に強力なツールとなるのが「数理モデリング」です。数理/数学と聞くと拒否反応が出てしまう人もいるかもしれませんが(わたしもです!)、アイデアを形にするときにすべてを数字の上で表現することが、ビジネスにおける活用の第一歩です。似ている度合や売れ行きの予測を、自分なりの考えを数式に落とし込んで、ようやくビジネスやサービスに活用できる形になります。
この本は、数理モデリングを道具として使いこなす上で、その手助けとなる本と言えます。
アイデアを形にしたい人におすすめ
本書は実務で数理モデリングをおこなう必要がある人はもちろんのこと、ビジネスサイドでデータ活用を推進する立場の人にもおすすめできます。数学的に難しいところは読み飛ばしてもらいつつ大雑把に全体感を掴むことができれば、数理モデル屋さんがどういった観点でデータを捉え、予測や最適化をしようと考えているかが理解できると思います。データ活用の具体事例も豊富に出てくるので、こういう分析をやりたいと思った時に逆引き的にも使えます。
データ活用に困った際は、ぜひ本書を手にとってみてはいかがでしょうか?
OpenAI Retro Contestの「Gym Retro Integration」でソニック・ザ・ヘッジホッグをプレイする
つい先日、OpenAIが主催するOpenAI Retro Contestが終了したようです。このコンテストでは"Sonic The Hedgehog"を題材に、ゲームをプレイするエージェントを作成しその性能を競うものでした。コンテストの結果は実際にプレイ動画とともにleaderboardから見ることができるのですが、上位陣のエージェントのプレイを眺めていると、深層強化学習の進歩をひしひしと感じます。中でも1位の"Dharmaraja"というアリババのチームは途中でオブジェクトの隙間に入り込むバグを発見して大きくスコアを伸ばしていたようです。この先機械がゲームをプレイする未来を考えると、実用的には機械がテストプレイをしたり、非実用的にはTASを自動で作成したりと、色々と夢が広がるものでした。
ソニックのAIコンペ1位の人のやつ、バグっぽい挙動発見してて面白いhttps://t.co/K9xUAqgpN0 pic.twitter.com/dHwZ0BzRgp
— koyumeishi (@koyumeishi_) June 25, 2018
さて、私もちょっと強化学習を勉強してみようと思ってOpenAI Retro Contestのドキュメントを眺めていたのですが、その中で実際にゲーム画面を見ながら開発ができるよう、ゲームの状態を確認したり操作を行うGym Retro Integrationというユーザインターフェイスが開発されていたので、ちょっと試してみました。それほどハマるポイントがあるわけではないのですが、色々とやることがあって若干ややこしいので、利用するまでの手順を書いておきます。
環境
Gym Retro Integrationの準備
1. retoレポジトリをgit cloneする
2018/06/27現在はdevelop
ブランチからコンパイルする必要がありますので、ソースコードをcloneしてきてdevelop
ブランチをチェックアウトします。
$ git clone https://github.com/openai/retro/ $ git checkout develop
2. Gym Retro Integrationをコンパイルする
ここからはdevelop
ブランチのREADME.md
に記載されている通りにコマンドを実行します。
$ brew install pkg-config capnp lua@5.1 qt5 $ cmake . -DCMAKE_PREFIX_PATH=/usr/local/opt/qt -DBUILD_UI=ON -UPYLIB_DIRECTORY $ make -j$(sysctl hw.ncpu | cut -d: -f2)
なお、fish shellの場合は$()
が利用できません。ここではマシンのCPUコア数を指定しているだけなので、make -j4
といった形で実行します。
これが終われば、retro
ディレクトリにGym Retro Integration.app
が作成されていますので、ダブルクリックまたはopen "Gym Retro Integration.app"
で実行します。
プレイするROMの準備("Sonic The Hedgehog"の場合)
プレイする環境は準備ができたので、次にプレイするソフトウェアの準備をします。ここの部分はOpenAI Retro ContestのDetailにも記載されている内容と同様のものです。
1. Steamで購入する
Steamで今回のOpenAI Retro Contestで対象となっている下記のゲームを購入します。SteamではWindows用と表示されていますが、気にせず購入して問題ありません。
ちなみに、2018/06/27現在はサマーセール中ということで、通常は1本498円のところ、66%引きの168円で購入することができました。
2. gym-retro
でsteamからROMをダウンロードする
Steamで購入したソフトをダウンロードします。ゲームを遊ぶときのようにSteam.appからダウンロードする方法もあるのですが、openai/retro
では直接ダウンロードするPythonスクリプトが用意されているので、そちらを利用します。
まず、openai/retro
をインストールします。上記でソースコードをcloneしているので、そちらを利用しても問題ありません。
$ pip install gym-retro
次にretro.import.sega_classics
を実行します。ここではSteamにログインするときのUsernameとPasswordnほかに、Steam ガードコードと呼ばれるメールで届くワンタイムトークンの入力が求められます。ここでソニックのソフトを購入できていれば、下記のように3つのゲームが無事ダウンロードできます。
$ python -m retro.import.sega_classics Steam Username: yag_ays Steam Password (leave blank if cached): Downloading games... Installing games... Importing SonicAndKnuckles3-Genesis Importing SonicTheHedgehog2-Genesis Importing SonicTheHedgehog-Genesis Imported 3 games
さて、肝心のゲームのROMはというと、gym-retro
のパッケージのdata/
ディレクトリ以下に配置されます。"Sonic The Hedgehog"の場合はSonicTheHedgehog-Genesis/rom.md
がROMに当たります。これをGym Retro Integration.app
で開くことになるので、参照しやすいディレクトリにコピーしておくと良いと思います。
なお、これは利用している環境によって場所が異なりますので注意してください。私の場合はpyenvを利用しているので$HOME/.pyenv/versions/3.6.3/envs/main/lib/python3.6/site-packages/retro/data
にありました。この場所を探すときはipythonでgym-retro
をインポートしてどこから読み込んでるのかを確認するのが手っ取り早いと思います。
In [1]: import retro In [2]: retro? Type: module String form: <module 'retro' from '/Users/yag_ays/.pyenv/versions/3.6.3/envs/main/lib/python3.6/site-packages/retro/__init__.py'> File: ~/.pyenv/versions/3.6.3/envs/main/lib/python3.6/site-packages/retro/__init__.py Docstring: <no docstring>
Gym Retro Integrationを使ってみる
ようやく準備が終わりました。それではGym Retro Integrationを使ってゲームを実行してみます。
まずGym Retro Integration.appを開くと、以下のような画面が表示されます。まだ何も表示されていないサラの状態です。
次にゲームのROMを読み込む必要があります。メニューバーの"Game"→"Open"(または"Load Game...")からROMを選択します。ここではSonicTheHedgehog-Genesis
のrom.md
を指定しました。
ようやくゲームが実行できました!!!ゲームが進むにつれて画面右の"Senario Information"ではFrameやTimestepの値がインクリメントされており、状態がきちんと取得できているようでした。実際には各ステージのシナリオ等を読み込む必要があると思いますが、ここでは割愛します。
そしてゲームのプレイですが、矢印キーで操作したりzキーでジャンプできます。操作方法は、メニューバーの"Window"→"Controls.."で確認したり変更することができます。
さて、ここまで色々準備してきましたが、まだエージェントを作成する準備が整っただけです。ここからopenai gymを使って様々な強化学習などの手法を用いてエージェントを学習させていく必要があります。そちらはまだ勉強途中ということもありますので、別の機会にアウトプットできればと思います。
参考
XGBoostのScikit-Learn APIでearly stoppingを利用する
この記事では、XGBoostのScikit-Learn APIを使いながらもearly stoppingを利用する方法を紹介します。
一般的な方法
XGBoostのLearning APIとは違って、Scikit-Learn APIのXGBClassifier
クラス自体にはearly stoppingのパラメータがありません。その代わりにXGBClassifier.fit()
の引数にearly_stopping_rounds
がありますので、こちらを利用します。その際にはeval_set
を同時に指定する必要があります。
xgb_model = XGBClassifier()
xgb_model.fit(X_train,
y_train,
early_stopping_rounds=100,
eval_set=[[X_test, y_test]])
Python API Reference — xgboost 0.6 documentation
GridSearchCV/RandomizedSearchCVを併用する方法
実際にscikit-learnと組み合わせている場合には単体でのfitよりも、GridSearchCVやRandomizedSearchCVといったグリッドサーチと併用することが多いです。その際には、以下のようにfit_params
を指定することによって、グリッドサーチ内でのearly stoppingが可能になります。
fit_params = {"early_stopping_rounds": 100, "eval_set": [[X_test, y_test]]} xgb_model = xgb.XGBClassifier() gs = GridSearchCV(xgb_model, params, fit_params=fit_params, cv=10, n_jobs=-1, verbose=2) gs.fit(X_train, y_train)
参考
転職しました
- from: 株式会社リクルートテクノロジーズ (株式会社リクルートホールディングス)(2015.04-2017.12)
- to: Sansan株式会社(2018.01-)
前職では様々な方に大変お世話になりました。ありがとうございました。
年明けから新たな職場でのスタートになります。引き続きどうぞよろしくお願いいたします。
タイトルで煽らない、かしこまった見出しもつけない、ウィッシュリストのせない、東亜飯店張らない、fromとtoを両方書く。職場崩壊を暴露しない。キラキラしない。これが私の求める退職エントリです。
— laiso (@laiso) August 1, 2017