Tech Trend Tokyo #7に参加してきました
はじめに
Tech Trend Tokyo #7にメディア・ブログ枠で参加してきました。テーマは「【Pythonで機械学習】機械学習と言語処理を活用してみる」でした。
感想
PyConJP 2018で「テキストマイニングによるTwitter個人アカウントの性格推定」というタイトルでLTをしてきましたが、そこでランダムフォレストを使ったので知っている内容が多くあり良い復習になりました!
GridSearchCVは知らなかったので勉強になりました!活用していきたいです。
早速アウトプットとして、今回のボストンデータセットの練習問題をGitHubにあげました。
私はpyenvやanacondaはトラブルが多くて好きじゃないのでPipenvを用いた環境構築をしています。
利用される方はPython3.7とPipenvをインストールしてください。
中島さんのリポジトリはこちらです。
ネットワーキングも素敵な方とお話できましたし、ピザも美味しかったです。ごちそうさまです。ありがとうございました。
今回お話できなかった方もぜひつながりましょう〜!
フォローお待ちしております。
主催の株式会社GIGのスキルシェアサービス Workship、
講師の中島さんがCTOを務めるIGS株式会社のSPI、ESに続く第3の新卒採用ツール Grow360 も面白そうなサービスなので要チェックですね。
以下メモ書きです。(メモしきれなかった部分もあります。すみません。)
メモ書き
自己紹介
中島正成さん(IGS株式会社 執行役員CTO)
2011年、株式会社メタップスの取締役CTOとして立ち上げに参画。機械学習とデータサイエンスのプロダクトインプリメントに取り組む。
その後、エン・ジャパン株式会社経営戦略室、個人事業での技術アドバイザー、経営アドバイザーを経て、IGS株式会社に執行役員CTOとしてジョイン。HR領域、人材評価領域のA.I活用プロダクト開発と、教育領域へのA.I活用プロダクト開発に取り組む。
AIといいたくないけどAIの話 part4
- 第六回ある
- 今回はスコア予測の実践
回帰と判別
- 回帰モデル
- 単回帰モデル
- 重回帰モデル
- 判別(分類)モデル
教師なし学習
- 出力すべきものがあらかじめ決まっていないという点が教師あり学習と異なる。
- データの背後に存在する本質的な構造を抽出するために用いられる。
教師あり学習
- 事前に与えられたデータをいわば例題とみなしてガイドラインにのっとり学習させる。
教師あり学習
- 回帰
- 線形回帰
- ロジスティック回帰
- SVM *
- ツリー
- 決定木
- 回帰木
- ランダムフォレスト *
- 勾配ブースティング
- ニューラルネットワーク
- CNN
- RNN
- パーセプトロン *
教師なし学習
練習問題
ランダムフォレストとは
ボストンデータセットとは
精度を向上するためにはどうすれば良いか
- ハイパーパラメータチューニング
- データクリーニング
ランダムフォレストのハイパーパラメータ
ハイパーパラメータ | 説明 |
---|---|
n_estimators | バギングに用いる決定木の個数 |
max_features | 最適な分割をするために考慮するフィーチャーの数 |
max_depth | 決定木の深さの最大値、過学習対策にこの値の調整が有効 |
min_samples_split | ノードを分割するために必要な最少サンプルサイズ |
min_samples_leaf | 葉を構成するのに必要な最小限のサンプルの数 |
max_leaf_nodes | 生成される決定木における最大の葉の数 |
n_jobs | フィットおよび予測の際に用いるスレッド数 |
random_state | 乱数シード |
warm_start | Trueを設定するとすでにフィットしたモデルに学習を追加 |
自動でいい感じのチューニング
- sklearnのGridSearchCVを使う
from sklearn.model_selection import GridSearchCV params = {'n_estimators': [3, 10, 100, 1000, 10000], 'n_jobs': [-1]} cv = GridSearchCV( RandomForestRegressor(), params, cv=10, scoring='mean_squared_error', n_jobs=-1, verbose=True ) warnings.filterwarnings('ignore') cv.fit(train_data_bs, train_labels_bs)
※ 注意
- GridSearchCVを利用する場合は、scikit-learn以外にnumpy, scipyが必要。
from sklearn.grid_search import GridSearchCV
だとno module named 'sklearn.grid_search'
となってしまうため、from sklearn.model_selection import GridSearchCV
とする。
はじめてのPyPIを公開しました
はじめに
PyPIデビューをしましたので、登録したライブラリとPyPI登録方法を紹介させていただきます。
aws-sm
Secrets Managerからデータベースの認証情報やAPIKeyなどのアプリケーションの環境変数を安全に取得することができます。
CircleCIでテスト・文法チェック・コードメトリクス計測のCI構築や、pyupでサードパーティ自動セキュリティアップデートの構築を行いました。
Secrets Managerの説明や利用するシチュエーションなどの詳細は別記事をご覧ください。
インストール
pipで簡単にインストールできます。
$ pip install aws-sm
使い方
SecretsManager
クラスをインポートして、シークレット名と取得したい環境変数名を適切に設定することで環境変数を取得できます。
from aws_sm import SecretsManager AWS_ACCESS_KEY_ID = *************** AWS_SECRET_ACCESS_KEY = *************** secretsmanager = SecretsManager('ap-northeast-1', AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) secrets = secretsmanager.get_secret_values('tutorials/MyFristTutorialSecret') USER_NAME = secretsmanager.get_secret_value('USER_NAME', secrets) PASSWORD = secretsmanager.get_secret_value('PASSWORD', secrets)
PyPI登録方法
Packaging Python Projects — Python Packaging User Guide
公式ドキュメントにPyPIの登録方法がまとまっているのでこの通りに行いましたが、私の環境では一点だけうまくいきませんでした。
それは、TestPyPIやPyPIへのアップロードで利用するtwineコマンドを利用する時です。
$ twine upload dist/*
-bash: twine: command not found
ドキュメント通りにコマンドを叩いたのですが、 twine: command not found
と怒られてしまいました。
検索してみると同じような現象に遭遇している方がいらっしゃいました。
$ python3 -m twine upload dist/*
とすることで正常に動作しました。ちなみに、 -m
は -m mod : run library module as a script (terminates option list)
というオプションです。
おわりに
OSSへの貢献は身につく力が大きいなと改めて感じました。はじめてのこととなると失敗も多かったですが、そのトライアンドエラーの工程が自分を大きく成長させてくれたと思います。 PyPIへの登録自体はドキュメントのおかげで比較的簡単にできましたので興味のある方はぜひ試してみてはいかがでしょうか。
コテコテのGitLabユーザがCircleCIに入門してみた
はじめに
GitLabユーザがGitHubでCI構築するためにCircleCIに入門する物語です。
GitLab 10.6でGitLab CI/CD for Githubがリリースされているのにもかかわらず、CircleCIを選定した理由は以下です。
- GitHub.comで利用されているCIサービス第2位(2017年時点)
- ForresterにLeaderという最上位のランクに認定されている
- 単純にほかのCIサービスを触ってみたかった
- CircleCI 2.0がいい感じらしい
ちなみに、GitLab CI/CD以外に他のCIサービスを触るのは初めてです。なんだがいけないことをしているような気分です。
まずは、GitLab CI/CD、CircleCIがそれぞれどんなサービスで何を売りとしているのかを理解してみます。
GitLab CI/CDって何?
GitLab has integrated CI/CD pipelines to build, test, deploy, and monitor your code Rated #1 in the Forrester CI Wave™
Forresterに認められたNo.1CIサービス。
https://about.gitlab.com/features/gitlab-ci-cd/
GitLab supports development teams with a well-documented installation and configuration processes, an easy-to-follow UI, and a flexible per-seat pricing model that supports self service. GitLab’s vision is to serve enterprise-scale, integrated software development teams that want to spend more time writing code and less time maintaining their tool chain
Forresterのレポートによると、整備されたドキュメントや使いやすいUI、GitLabのビジョンが賞賛されています。
GitLabへの移行で他のCIサービス使っているというケースは考えられますが、よっぽどの変態でもない限り、GitLabを使っているならGitLab CI/CDを選択するのがおそらく一般的なのではないでしょうか。
CircleCIって何?
Power, Flexibility, and Control CircleCI gives your team more speed and configurability than ever before.
他サービスとの柔軟な連携や容易な設定が売りのようです。 ForresterにはGitLabと同じくLeaderに認定されています。
Organizations striving to be lean and stay lean will appreciate the simplified, nearly zero-maintenance approach CircleCI provides. Existing customers will appreciate the new features of CircleCI 2.0 that appear to completely address all the top asks that customers are looking for.
Forresterのレポートによると、ほぼ保守が不要な点と2.0の新機能が賞賛されています。
GitHubであればTravis CIに続いて2番目のシェア率と利用者も多いようです。
それぞれ何となくどんなサービスなのかはわかりましたが、まだボヤけているのでGitLab CI/CDとCircleCIの違いを調べてみることにしました。
GitLab CI/CD vs CircleCI
なんと、それぞれサービスであのCIサービスとはここが違うという主張がまとまっているページがありました。 それぞれの主張を列挙してみます。
GitLab CI/CDの主張
- CLI, API, Webhookを提供しており、これらを活用することで他サービスとの連携が可能である。
- GitLab CI/CD にあってCircleCIにない機能が29個ある。
- Application performance monitoring and alerts
- Preview your changes with Review Apps
- Code Quality
- Show code coverage rate for your pipelines
- Auto DevOps
- Easy integration of existing Kubernetes clusters
- Easy creation of Kubernetes clusters on GKE
- etc...
CircleCIの主張
- チームの成長段階に合った最適なツールとの統合ができる。
- CI/CDにのみ焦点を当てたサービスである。
- buildersの管理が容易。
- GitLab Runnerは独自で管理する必要がある。
CircleCIのGitLabはこうだという主張に誤りがあるように感じますが、まとめると、
GitLab CI/CD「GitLabは、DevOpsを実現するための統合ツールであり、我々はその一つのサービスである。DevOpsを実現するための機能をたくさん提供している。」
CircleCI「私たちは何かのツールに依存したサービスではない。CI/CDにのみ焦点を当てており、他サービスとの連携・切り替えが容易である。」
みたいなイメージかなと思います。
CircleCIを使ってみた
実際のリポジトリはこちらです。
version: 2 jobs: build: working_directory: ~/aws-sm docker: - image: circleci/python:3.7 steps: - checkout - run: sudo chown -R circleci:circleci /usr/local/bin - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages - restore_cache: key: deps1-{{ .Branch }}-{{ checksum "Pipfile.lock" }} - run: command: | pipenv install --system --dev - save_cache: key: deps1-{{ .Branch }}-{{ checksum "Pipfile.lock" }} paths: - ".venv" - "/usr/local/bin" - "/usr/local/lib/python3.7/site-packages" - run: command: | py.test --tb=line --cov-report=html - store_artifacts: path: htmlcov/ - run: command: | flake8 - run: command: | radon cc -n C . radon mi -n B .
テスト、文法チェック、コードメトリクス計測を走らせてみました。
以下の config.yml
を参考にさせていただきました。
感想
いい感じ
- GitHubのアカウントを持っていれば簡単に利用を始められる
- OSと言語を選択することでYAMLの雛形を生成してくれる
- GitLab CI/CDに似た構文である(CIサービス自体がそこまで異なる構文になるとは思っていませんでしたが)
なんだかなぁ
- プルリクを作成するまでCIの実行結果をGitHub上で確認できない(Failした時はメールで通知される)
- ジョブが失敗していてもマージできてしまう
- coverageのバッジを生成できない
「なんだかなぁ」に関してはこれを解消するための方法があるかもしれません。入門者が「あれ?」と思った点です。
おわりに
使っている時間が全く違うのでかなりGitLab CI/CDに偏った意見になりますが、統合ツールとしてのGitLabの使いやすさを実感する時間になりました。
GitLabはGitLab上でCI/CDの実行結果の確認ができ、CIが失敗した際にはマージボタンが押せません。また、coverageのバッジを自動生成してくれるような設定が可能です。
しかし、かなりの短時間でテストの自動化が実現できたCircleCIは素晴らしいCIツールだと思います。GitHubではCircleCI使っていきたいです。
今回試したのはテストのみだったのでビルド、デプロイも実装してみるとCircleCIの便利さがより見えてくるかもしれません。 今後機会があれば試してみたいです。