enebularで機械学習をやるメリット・デメリットを考えてみた


## はじめに
本記事は、[【オンライン】ゆるふわマシンラーニング vol.5 - connpass](https://enebular.connpass.com/event/188257/)のために取り組んだことの、年末振り返り記事です。

わたしは、[enebularとTeachable Machineハンズオン](https://youtu.be/vDpCk92S-7M)を見ながら、**enebular**を使って、機械学習をやるにあたってのメリットとデメリットを自分なりに考えてみました。

## enebularで機械学習をやるメリット

### 1. （なんと言っても）プログラムの**実行フローをGUIで操作・把握できる**こと
![スクリーンショット 2020-12-24 17.37.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/29f23617-cc2b-2416-3c3f-4f42bb96999b.png)

わたしはGUI操作でプログラムを書く（？）事自体がはじめてだったので、とても新鮮でした。

### 2. ほぼ**数行のコードで期待する機能を実装できる**こと
![スクリーンショット 2020-12-24 17.37.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/879ff12d-ab71-97b9-3cdf-2f4332795326.png)

データの入力形式を理解する必要はありますが（後述）、それでも、こんなにも数行でいいのか？と驚きを隠しきれませんでした。サクッと試しに作ってみようか！がもっとサクッとできるようになる世界を覗いてしまったドキドキ感がありました。

たぶん、初学者エンジニアよりも中堅以上のエンジニアのほうがこの魅力に気づきやすいし、体感しやすい気がします。

### 3. **コミュニティ**の記事が参考になる

enebularはコミュニティ記事が豊富で、無料で試しに使ってみるときにとても参考になりました。[enebular blog](https://blog.enebular.com/)は定期的に記事が更新されていて、（**お、enebularでこんなこともできるのか！**）という発見があります。


## enebularで機械学習をやるデメリット｜やってみて感じたこと

### 初学者よローコードに甘んずることなかれ
enebularを使うことで、わたしははじめて`Node−RED`と呼ばれるローコード開発の門を叩いたわけですが、このローコードというのは、**あくまでも設計力があるエンジニアに与えられたご褒美**であると感じました。

![スクリーンショット 2020-12-24 17.43.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/dc5ef545-48d2-29b8-df3c-8a820cd0df99.png)

設計力というのは、**どういうデータをどんな形式でプログラムに入力し、どのような機能（処理をするのか）を考え、どこにどのような形式で何を出力するのか？**を考えられる力のことです。

![スクリーンショット 2020-12-24 17.43.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/c8236831-c97d-201d-ed57-c4c8a70116fb.png)

「したいこと（出力結果)」だけ考えてenebularに触れると、フローについて考えさせられます。
わたしはデータ分析や機械学習モデルをつくることが多いので、プログラミングにおいての設計力の大切さを改めて実感しました。

### OSSコミッターに甘えていることを改めて自覚せよ

![スクリーンショット 2020-12-24 17.44.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/b1989cd1-6c3d-8611-1c1b-b330b671821b.png)

今回は、Googleが提供する
[TeachableMachine](https://teachablemachine.withgoogle.com/)のAPIをNode-RED経由で実行しました。

![スクリーンショット 2020-12-24 17.44.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/89a1bb69-15fb-2368-bd10-b8e32c7ee91c.png)

翻訳してみると…

![スクリーンショット 2020-12-24 17.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/20b832d6-72ef-8015-29b9-fe485e42ff12.png)

カスタム画像分類の学習済みモデルのライブラリのみ使用可能でした。

![スクリーンショット 2020-12-24 17.44.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/d4ec00fd-77a9-88bb-f0aa-d8af87dc9c80.png)

つまり、Node-REDでは、TeachableMachineでできる**三種類の機械学習モデルのうち、１つしか使えませんでした。** 普段の業務で当たり前のように無償ライブラリを駆使してデータ分析をやっている身からすると、改めてOSSコミッターのおかげで自分はプログラミングを楽しめたり簡単にキャッチアップしてコードを書くことができているんだなぁと実感しました。

![スクリーンショット 2020-12-24 17.44.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/f48eca7c-417e-eb64-59c3-ffdfb8dcf9fd.png)

本当は、他の学習済みモデルで、「俺のRingFit」を作りたかったのです。!

##### おまけ
TeachableMachineの学習済みモデルによって、**手軽に仕組みをつくれるということは、間違った予測結果を出力しがち**というトレードオフの関係にあります

![スクリーンショット 2020-12-24 17.44.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/cd432426-b7b3-288d-1239-7344644a65fe.png)

## まとめ

というわけで、enebular×ML（機械学習, マシーンラーニング）をやる場合は、**実装したい機械学習ライブラリがNode-REDのライブラリに含まれているのかどうか？を探すことが先**かもしれません。

![スクリーンショット 2020-12-24 17.44.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143765/f87e2ccd-a539-dc98-8fd0-83366f78c327.png)

自分が欲しいライブラリを作れる側になると、きっともっとenebularが楽しくなるなと思いつつ、**メジャーな機械学習モデルを組み込んだプロトタイプを作ってみるのであれば、enebular×MLは確実に最高でGood**です。