kakakakakku blog

Weekly Tech Blog: Keep on Learning!

GRC (git-remote-codecommit) をサポートした ghq v1.2.0 を試した

Git リポジトリを操作するために使っている ghq が,2021年5月にリリースされた v1.2.0(bugfix も含めると v1.2.1)で AWS CodeCommit の HTTPS GRC (git-remote-codecommit) をサポートしていた.さっそく動作確認をしてみた!

github.com

brew upgrade ghq コマンド

まず,Homebrew を使って ghq アップデートする.現時点で最新となる v1.2.1 を使えるようになった.

$ brew upgrade ghq

$ ghq --version
ghq version 1.2.1 (rev:dd139fb)

ghq get コマンド

さっそく ghq get コマンドを使って AWS CodeCommit リポジトリを取得する.今回は検証用に playground-ghq リポジトリを作った.GRC の場合,URL は codecommit://${RepositoryName}codecommit::${RegionName}://${RepositoryName} となり,以下の通り,うまく取得できた!今まで必要だった「AWS CodeCommit の HTTPS Git 認証情報」を使わずに簡単にリポジトリを操作できるようになる.

$ ghq get codecommit::ap-northeast-1://playground-ghq
     clone codecommit::ap-northeast-1://playground-ghq -> /Users/kakakakakku/ghq/ap-northeast-1/playground-ghq
       git clone --recursive codecommit::ap-northeast-1://playground-ghq /Users/kakakakakku/ghq/ap-northeast-1/playground-ghq
Cloning into '/Users/kakakakakku/ghq/ap-northeast-1/playground-ghq'...
warning: You appear to have cloned an empty repository.

関連記事

Scratch で機械学習を楽しめちゃう!「Scratch ではじめる機械学習」を読んだ

最近「Scratch ではじめる機械学習」を読んで,とても楽しめたので紹介したいと思う.本書は Scratch を使って「機械学習で実現できること」を実際に体験できる.そして「機械学習」をあまり意識せずに読むことができるので(特に前半),例えば「子供と一緒に楽しみながら読む」こともできる!読み方はいろいろ!

目次

目次を見ると難しく感じるけど,実際には Scratch を使って「体験ベース」で楽しめる.キャプチャも多く,文章量も少ないため,サクサク読める.正誤表や Scratch ファイル(.sb3 ファイル)も公開されている.

  • 序章 : 10分で体験できる機械学習
  • 1章 : [画像認識編] ジャンケンゲームを作ろう
  • 2章 : [音声認識編] 声を聞き分けるデジタルペットを作ろう
  • 3章 : [姿勢推定編] 体を使った楽器プログラムを作ろう
  • 4章 : [知識編] 機械学習について学ぼう
  • 5章 : [上級編] 遺伝的アルゴリズムでネコの動きを進化させよう
  • 付録 : その他の拡張機能を使った機械学習

www.oreilly.co.jp

カスタマイズされた Scratch

本書を読む前に「どうやって Scratch で機械学習を実現するんだろう?」と思ったけど,本書を読んでいたら「カスタマイズされた Scratch」を使っていた.以下の URL でアクセスすることができて,実際に「拡張機能」を見ると,見たことがない拡張機能が多くある.

stretch3.github.io

本書の「序章」には「画像認識」のサンプルがあり,簡単に機械学習を体験できるようになっている.具体的には「ImageClassifier2Scratch」「翻訳」を使って「物体認識をして日本語に翻訳」することができる.以下はサンプルとして「マグカップ」を試してみた.僕です...😇

f:id:kakku22:20210614211002p:plain

画像認識 : ジャンケンゲーム

1章「[画像認識編] ジャンケンゲームを作ろう」では,画像認識を使ったより実践的なサンプルとして「ジャンケンゲーム」を作る.最初に「ラベル(グー/チョキ/パー)」を認識するモデルを構築するところから試す.今回は「計60回」も撮影をして,結果的にうまく識別できるようになった.以下は「ラベル2(チョキ)」を認識できているところ.なお,少ない枚数で識別できるのは「転移学習」を使っている!からという解説も載っていた.

f:id:kakku22:20210614211038p:plain

姿勢推定 : 体を使った楽器

3章「[姿勢推定編] 体を使った楽器プログラムを作ろう」では,ポーズ(姿勢)推定ができる PoseNet と Scratch を組み合わせたサンプルを試せる.「目」「鼻」の場所を特定できるので,Scratch のスプライトと組み合わせるとメガネを付けられる!わいわい!もしかしたら「黒い布の Scratch スプライト」さえあれば五条悟(呪術廻戦)になれるのでは?(なれない🤞)本書ではこの後に PoseNet を使って「体の動きの検知」をして「右腕を横に伸ばしたら音を鳴らす」という楽器を実装する.

f:id:kakku22:20210614211029p:plain

単純パーセプトロン

本書を楽しむことにフォーカスして読むなら「3章」までで良いと思う.「4章」以降は難易度が高くなっていく.なお「4章」では「単純パーセプトロン」の概要を学ぶことができる.とても面白かったため,以下の記事で紹介した.合わせて読んでもらえると!

kakakakakku.hatenablog.com

遺伝的アルゴリズムを使って障害物をよけるネコ

最後に5章「[上級編] 遺伝的アルゴリズムでネコの動きを進化させよう」では「遺伝的アルゴリズム」を Scratch で実装していく.難易度はとても高くなる.テーマは「遺伝的アルゴリズムを使って障害物をよけるネコ」でとてもよく考えられて実装されているし,アルゴリズムの基本的な思想も理解できるようになった.もし試す場合は以下に公開されている.結構時間がかかるため Scratch の「ターボモード(Shift を押しながら緑色の旗をクリックする)」を使った方が良いと思う.

具体的にはネコの移動方向を「上 (U) 下 (D) 左 (L) 右 (R)」として,以下のように遺伝子を定義する(実際にはもっと長い).

DDDULDRDLURU

そして遺伝子と遺伝子を交叉(二点交叉)して世代を増やしたり,突然変異を作ったり,自然淘汰が行われたり,本当に Scratch で「遺伝的アルゴリズム」を楽しんで学べるようになっている.以下の例はデフォルト設定のまま「105 世代」まで増やしたところ.

f:id:kakku22:20210614194256p:plain

またデフォルト 3% に設定されている変数「突然変異が起こる確率 (%)」0% にすると,世代を増やすほどに優秀になっていく.以下は「155 世代」まで増やしたところ.現実的ではないかもしれないけど,実際に設定を変更しながら試すこともできる.

f:id:kakku22:20210614194806p:plain

Scratch プロジェクト自体も大規模に実装されているけど,本書にも重要な部分は解説が載っているため,理解を深めることができる.特に「ブロック定義」が重要なので1個1個調べていくと良さそう.

  • xy を交叉させる
  • 遺伝子を作る
  • 次世代の遺伝子を作る
  • 自然淘汰
  • 突然変異
  • etc

f:id:kakku22:20210614202949p:plain

まとめ

最近「Scratch ではじめる機械学習」を読んだ.本書は Scratch を使って「機械学習で実現できること」を実際に体験できる.とても楽しめた!「音声認識」など今回紹介しなかった Scratch プロジェクトもあるため,興味があれば本書を読んでみると良いのではないでしょうか!

「単純パーセプトロン」を使った分類(フルーツのグループ分け)を体験できる Scratch プロジェクト

最近「Scratch ではじめる機械学習」を読んでいる.Scratch を使って「機械学習」を体験することができて,非常に楽しめている.書評記事はまた別に書く予定!本書の中で「第4章 : 機械学習について学ぼう」を読んでいたら「単純パーセプトロン」を使った分類(フルーツのグループ分け)を体験できる Scratch プロジェクトが紹介されていた.実際に試すことができるので紹介する!

フルーツのグループ分け(単純パーセプトロン) on Scratch

さっそく試す🍎🍌

緑色の旗🚩を押すとランダムに「10個」のリンゴ🍎が配置される.その中から自由にリンゴを1個選んでクリックするとバナナ🍌になり,そこから学習をする.最適な境界線を導き出すまで繰り返し学習をするので,その過程を見るのも面白い.最初は分類しやすい場所のリンゴを選ぶと良いと思う.最終的には境界線が収束する.他にもリンゴを選んでクリックするとバナナになり,その状態からもう1度学習をする.

f:id:kakku22:20210613154309p:plain
右上のリンゴを1個バナナにしたところ

f:id:kakku22:20210613154331p:plain
さらに3個のリンゴをバナナにしたところ

そして次に好きな場所で「スペース」を押すと,重みを計算してリンゴ🍎かバナナ🍌が配置される.以下は試しに中央あたりに追加してみた.このように境界線によってうまく分類(フルーツのグループ分け)できていることを確認できる.

f:id:kakku22:20210613154451p:plain
中央あたりに追加したらバナナに分類されたところ

「単純パーセプトロン」とは

そもそも今回紹介した Scratch プロジェクトのテーマになっている「単純パーセプトロン」とは,深層学習(ディープラーニング)に必要となるニューラルネットワークの基礎になるモデルで「複数の入力と重み」から「単一の出力 (0 or 1)」を返す.以下のような数式で表現できる.


y =
\begin{cases}
1  & (w_1x_1 + w_2x_2 \cdots w_nx_n \geq \theta ) \\
0 & (w_1x_1 + w_2x_2 \cdots w_nx_n < \theta )
\end{cases}

とは言え,あくまで「直線(線形分離)」になるため,うまく分類できないこともある.Scratch の例だと,リンゴとリンゴに挟まれた場合など,場所によってはうまく境界線を導き出すことができず,ずっと学習をし続けてしまうこともある.「単純パーセプトロン」に関しては解説記事などを読んでもらえればと!

www.slideshare.net

実装を確認する

Scratch プロジェクトの実装も簡単に調べられる.詳細な実装解説は「Scratch ではじめる機械学習」には載っていないけど,座標を入力値として繰り返し重みを修正していくなど「ブロック定義(学習する)」の解説は載っている.実装を全体的に確認して理解できないところもあったけど,勉強になる.またそもそも Scratch の実装 Tips としても参考になる部分も多く,拡張機能「ブロック(ペンを上げる/ペンを下げる)」を使って線を引いたり,「ブロック定義」を使ってモジュール化をしたり.

f:id:kakku22:20210613154605p:plain

まとめ

最近「Scratch ではじめる機械学習」を読んでいる.本書で「単純パーセプトロン」を使った分類(フルーツのグループ分け)を体験できる Scratch プロジェクトが紹介されていて,面白かったので紹介した.次は本書の書評記事を書く予定!

Jamboard のフレーム背景にテンプレート画像を設定して効率的に描く Tips

Jamboard でホワイトボードを描くときによく使っている Tips を紹介する.と言っても本当に「ちょっとした Tips」で,簡単に言うと「Jamboard のフレーム背景にテンプレート画像を設定して効率的に描く」という Tips 🎨 以上!

f:id:kakku22:20210609112939p:plain

テンプレート画像とは 🎨

もう少し整理しておく.例えば「リモート研修」を何度も担当していると「毎回同じ構成で」ホワイトボードを描くことがある.例えば「比較表」「アーキテクチャ図」を書く場合で,最初から書くのは面倒だし,その場で書く時間も無駄になるけど,重要なところは描きながら説明したいこともある.まぁホワイトボードに描かずに PowerPoint のアニメーションを使えば十分なこともある.それはそれとして!

そこで💡PowerPoint や Keynote などを使って「テンプレート画像」を作って Jamboard のフレーム背景に設定しておくと,重要なところを効率的に描けるし,描き直すときは「フレームを消去」ボタンを押せば解決する.以下はブログ用のサンプルとして載せておく.

f:id:kakku22:20210609122328p:plain
サンプル : A と B と C の機能比較をする

f:id:kakku22:20210609122348p:plain
サンプル : A と B の関係性を整理する

iPad Air + Apple Pencil + Jamboard 🎨

実際に描くと以下のようになる.便利!なお,最近 iPad AirApple Pencil を買って快適にホワイトボードを描けるようになった.

f:id:kakku22:20210610085200j:plain

まとめ 🎨

ホワイトボードを効率的に描くために「Jamboard のフレーム背景にテンプレート画像を設定する」という Tips を紹介した.あまりに普通すぎて今までブログに書いてなかったけど,最近社内で紹介する機会があり,まとめておくことにした.Public URL-ize!

なお iPad AirApple Pencil を買うまでは安く買える Elemiya を使ってて満足していたけど,やはり Apple Pencil はレベルが違った!

kakakakakku.hatenablog.com

NumPy / Pandas / Matplotlib / scikit-learn などの理解度確認ができる「Python 3 エンジニア認定データ分析試験」に合格した

先週末に「Python 3 エンジニア認定データ分析試験」を受験して合格した🎉とても良い試験で,特に試験勉強をする過程で知識の幅が広がった.試験の認知度向上のためにも紹介したいと思う.当然ながら試験問題に関しては何も書かず,基本的に公開情報をベースにまとめていく!

www.pythonic-exam.com

試験概要 : Python 3 エンジニア認定データ分析試験 📊

試験名にもある通り「Python 3 エンジニア認定データ分析試験」は Python を使った「データ分析」に関する理解を問う試験で「数学」「Python ライブラリ」に関する出題が多くある.詳しくは以下に出題範囲を載せる.

セクション 出題数 出題率
データエンジニアの役割 2 5.0%
Python と環境 : 実行環境構築 1 2.5%
Python と環境 : Python の基礎 3 7.5%
Python と環境 : Jupyter Notebook 1 2.5%
数学の基礎 : 数式を読むための基礎知識 1 2.5%
数学の基礎 : 線形代数 2 5.0%
数学の基礎 : 基礎解析 1 2.5%
数学の基礎 : 確率と統計 2 5.0%
ライブラリによる分析実践 : NumPy 6 15.0%
ライブラリによる分析実践 : pandas 7 17.5%
ライブラリによる分析実践 : Matplotlib 6 15.0%
ライブラリによる分析実践 : scikit-learn 8 20.0%
応用 : データ収集と加工 0 0.0%

出題は「40問」で合格ラインは「70%」なので,単純計算で「28問」以上で合格になる.上記の通り「出題数」も明確なので対策自体はしやすいと思う.出題範囲をザッと分割すると以下のようになる.とにかく「ライブラリによる分析実践」の比重が高く,確実に理解を深めておく必要がある.とは言え,本質的に重要なのは試験に合格することよりも「学んだ知識を実務に活かすこと」であるため,バランス良く全体を勉強することを意識した.

  • データエンジニアの役割 : 2問(5.0%)
  • Python と環境 : 5問(12.5%)
  • 数学の基礎 : 6問(15.0%)
  • ライブラリによる分析実践 : 27問(67.5%)

関連試験 : Python 3 エンジニア認定基礎試験 📊

なお,関連する試験に「Python 3 エンジニア認定基礎試験」もある.同じく「一般社団法人 Python エンジニア育成推進協会」から提供されている.僕自身は2019年に合格して以下の記事にまとめている.「Python 3 エンジニア認定データ分析試験」の受験前提にはなっていないと思うけど,そもそも Python 自体に慣れていない場合は理解度確認も兼ねて,先に「Python 3 エンジニア認定基礎試験」を受験すると良さそう.

kakakakakku.hatenablog.com

受験結果 📊

僕自身の受験結果としては「900点(1000点満点)」だった.4問も間違えてしまった!楽勝だと思っていた「Python と環境」を間違えてしまったのは逆に笑ってしまった😇逆に「数学の基礎」「ライブラリによる分析実践」は自信を持って回答できてほぼ満点だったため,結果としては満足している!なお,時間配分としては「1周目 : 30分」「2周目 : 20分」で,十分に見直しもできたため,少し時間を残して退出した.特に計算用紙などは配布されないため,各種計算は頭で考える必要がある点は注意が必要かも!

主教材 : Python によるあたらしいデータ分析の教科書 📊

本試験は主教材として「Python によるあたらしいデータ分析の教科書」が指定されていて,本書の構成通りに出題されるため,基本的に本書をベースに勉強をしていく形になる.とは言え,教科書ではなく「主教材」なので,本試験を受験しないとしても,機械学習や機械学習に関連する Python ライブラリに興味があれば「Python によるあたらしいデータ分析の教科書」を読んでみると良いと思う.具体例や図解やコードサンプルもあり,専門用語も多くなく,非常に読みやすく書かれている.目次も載せておくけど出題範囲と同じで,例えば「第5章」など,試験には出題されない範囲の内容も載っている.

  • 第1章「データ分析エンジニアの役割」
    • 1.1 データ分析の世界
    • 1.2 機械学習の位置づけと流れ
    • 1.3 データ分析に使う主なパッケージ
  • 第2章「Pythonと環境」
    • 2.1 実行環境構築
    • 2.2 Pythonの基礎
    • 2.3 Jupyter Notebook
  • 第3章「数学の基礎」
    • 3.1 数式を読むための基礎知識
    • 3.2 線形代数
    • 3.3 基礎解析
    • 3.4 確率と統計
  • 第4章「ライブラリによる分析の実践」
    • 4.1 NumPy
    • 4.2 pandas
    • 4.3 Matplotlib
    • 4.4 scikit-learn
  • 第5章「応用 : データ収集と加工」
    • 5.1 スクレイピング
    • 5.2 自然言語の処理
    • 5.3 画像データの処理

なお,本書の正誤表は以下に載っている.現在は「5刷」まで出ている.

www.shoeisha.co.jp

数学の基礎 📊

数学に関しては「Python によるあたらしいデータ分析の教科書」の内容を細かく整理すると,例えば「ベクトル計算(内積/ユークリッド距離/マンハッタン距離)」「基礎解析(微分/積分/偏微分)」「確率」などを理解しておく必要がある.特に勉強をしなくても大丈夫な人もいるだろうし,基本的なところから勉強をし直す必要がある人もいると思う.僕自身は学生時代に学んだはずではあるものの,最近使うことも少なく,パッと計算できないものもあったため,「Python によるあたらしいデータ分析の教科書」を読みつつ,YouTube や Cognicull などを使って勉強をし直した.

cognicull.com

ライブラリによる分析実践 (NumPy / Pandas / Matplotlib) 📊

NumPy / Pandas / Matplotlib に関しては,多種多様な関数(パラメータやデフォルトの挙動など)を理解しておく必要があり,出題範囲は多いと思う.無理に暗記をするのではなく,何度も実装をしたり,ドキュメントを読んだり,納得できるまで理解を深めていく必要があると思う.今回は Jupyter Notebook を使って,気になる関数を試した.特に Numpy「配列計算」「行列計算」をするため,数学的な基礎知識も必要になる.実際に以下の記事は理解を深めるために書いた.

また Pandas に関しては「Pandas ライブラリ活用入門」も読んで書評記事を書いた.関連書籍も併読するとより理解が深まる.

kakakakakku.hatenablog.com

ライブラリによる分析実践 (scikit-learn) 📊

scikit-learn に関しては,ライブラリを使う前に「数学的な基礎知識」「機械学習アルゴリズムの知識」「機械学習プロセスの知識」も必要になる.「Python によるあたらしいデータ分析の教科書」にはコードやアルゴリズムの図解も載っていてわかりやすいけど,それでも理解しにくいところもあった(実際に僕自身がそう感じた).なお,以下に目次「4.4 scikit-learn」の詳細をまとめる.理解するべき知識の幅広さが伝わると思う.

  • 4.4 scikit-learn
    • 4.1.1 前処理
      • 欠損値への対応
      • カテゴリ変数のエンコーディング
      • 特徴量の正規化
    • 4.1.2 分類
      • サポートベクタマシン
      • 決定木
      • ランダムフォレスト
    • 4.1.3 回帰
      • 線形回帰
    • 4.1.4 次元削減
      • 主成分分析
    • 4.1.5 モデルの評価
      • 混同行列(適合率/再現率/F値/正解率)
      • 交差検証
    • 4.1.6 ハイパーパラメータの最適化
      • グリッドサーチ
      • ランダムサーチ
    • 4.1.7 クラスタリング
      • k-means
      • 階層的クラスタリング

そこで今回は「機械学習図鑑」を併読した.数式をあまり使わずに scikit-learn のコードと図解で「機械学習アルゴリズム」を理解できるため,とても役立った.「Python 3 エンジニア認定データ分析試験」を受験する人には併読をおすすめする.

模擬問題(無料)📊

「Python 3 エンジニア認定データ分析試験」には大きく模擬試験が2種類あり「PRIME STUDY」「DIVE INTO EXAM」から提供されている.無料で何度でも繰り返し受験できるため,理解度確認の意味も兼ねて定期的に受験してみると良いと思う.個人的なアドバイスとしては「全ての選択肢まで細かく理解できるように」しておくと良いと思う.

  • PRIME STUDY
    • Python 3 エンジニア認定データ分析 模擬試験 第1回
    • Python 3 エンジニア認定データ分析 模擬試験 第2回(第1回と選択肢が少し異なる)
    • Python 3 エンジニア認定データ分析 模擬試験 第3回(第1回と選択肢が少し異なる)
  • DIVE INTO EXAM
    • Python3 エンジニア認定データ分析 模擬試験

まとめ 📊

前から気になっていた「Python 3 エンジニア認定データ分析試験」を受験して合格した🎉もともと機械学習領域に詳しくなかったため,本を読んだり,e-Learning を受講したり,Jupyter Notebook を使って何度も繰り返し実装したりして,試験勉強をする過程で知識の幅を広げることができた.特に Python ライブラリ(NumPy / Pandas / Matplotlib / scikit-learn)には詳しくなった.とても良い試験なので,興味がある人は受けてみると良いのではないでしょうか!