きっかけ
Qiitaのアドベントカレンダーで、スポンサーってなんだろう?とちょっと覗いてみたら、
「REST API」で「時系列データ解析エンジン」っていうキーワードに惹かれてQoreを使ってみました。
気になった背景
IoTをメインでやってる身として、時系列データは普段からたくさん取得しているので、それの解析にはもともと興味がありました。
なお、機械学習系は素人です。普段はJavaScript(node.js)使いなので、pythonもほとんど知りません。でも**APIになってるならきっと使える!**とおもってチャレンジします。
始める流れ
-
APIの利用がQiita書くなら2ヶ月無料とのことで、利用申込みをします。
-
そこからメールのやり取りをして、利用規約とかに同意するとAPIキーが発行されます(この手順はそのうちメールからwebに変わるらしい)
-
APIキーと一緒にwhlファイルがつまったgoogle driveのURLがもらえます。
-
それらとgithubリポジトリをみてさぁ始めよう!
・・・・・さぁ始めよう???
ここからが挫折の連続でした・・・・
AIバリバリ触ってるぜ!の猛者が使うことの想定なのか、最初はREADMEすら書いてある内容がわからず。。。。
やばい、場所が変われば文化が変わるとは言うけれども、機械学習系のライブラリのreadmeの言ってることが全くわからない🤣
— kido@IoTエンジニア (@9wick) 2019年12月2日
python普段使わないし、readme書いた人が前提と思ってる知識が全く自分にないことがよくわかる笑
せっかくなので、自分のつまづきポイントを紹介したいとおもいます
つまずいたポイント1:機械学習知識
APIキーを貰ったときに、注意としてこう言われました。
一度にAPIに投げられるデータサイズに制限がありまして、NTV < 150,000 && N*T < 10,000の大きさまでのデータとして頂きますようお願いいたします
Nってなに?T?V? って状態でした。
APIなら簡単に使えるだろうって軽い目論見で申し込みましたが、ちょっと場所を間違えた感が出てきました・・・・。
この場違い感が結構他のつまずきにも影響を与えてきます・・・。
つまずいたポイント2:情報源
未知のものを試すときは何よりも情報源を見つけるのが大切です。
普段はtoBでやってるサービスっぽく情報が全然なくてなかなか難易度がたかい・・・。
今のところ見つけたのはこれらです。
※ドキュメントは12/3に公開されたようです。これからも追加情報とかあるかもしれないので注意が必要そうですね
つまずいたポイント3:流れの理解
そもそも機械学習の初心者過ぎて、全体像の流れがよくわかりませんでした・・・。
- 時系列データを収集する
- データをクラウドに投げれる形に加工する
qore_sdk.utils
とかqore_sdk.featurizer
を使うと便利らしい。使わなくても可 - クラウドにデータを投げて学習させる。このときログインが必要
メインはqore_sdk.client.classifier_train
- 学習データと、比較したいデータを突合して推論をおこなう
qore_sdk.client.classifier_predict
関数
3,4のデータを投げて学習させては1日目の記事がわかりやすいです。
2の加工は2日目の記事がしっかり書かれてるようです。
・・・が、「小時系列に分けて〜」とか「特徴抽出」とかそもそもの部分がよくわからなすぎて挫折しました・・・。
1日目の記事)を見る限り、とりあえずデータさえあればQoreを試せるようです。なので、データ加工のことはとりあえず放置して進めようと思います(後の後悔ポイント)
つまずいたポイント4:ライブラリインストール
公式ドキュメント通りにpip installをやろうとしました。
pip install -r requirements.txt
pip install qore_sdk-0.1.0-XXXXXXXXXXX.whl #自分の環境に合ったSDK
SDKのリストがこちら
自分の環境がこちら
・・・mac os の10.13は古すぎてSDK提供していないようです・・・。
SDKの名前のcpXXがpythonのバージョンらしいです。python3.7を使っていたのでqore_sdk-0.1.0-cp37-cp37m-macosx_10_15_x86_64.whl
をインストールします
つまずいたポイント5:ログイン
メールで貰ったendpoint,username,passwordでログインします。
from qore_sdk.client import WebQoreClient
username = 'xxxx'
password = 'xxxx'
endpoint = 'xxxx'
client = WebQoreClient(username, password, endpoint=endpoint)
ここはブログにも書いてあったし楽勝!って思ったらエラーが・・・・
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
エラー全文
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1317, in do_open
encode_chunked=req.has_header('Transfer-encoding'))
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1229, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1275, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1224, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1016, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 956, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 1392, in connect
server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 412, in wrap_socket
session=session
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 853, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/kido/PycharmProjects/qore-qiita/index.py", line 6, in <module>
endpoint='https://api-beta2.qcore.co.jp') #接続先エンドポイント
File "qore_sdk/client.pyx", line 40, in qore_sdk.client.WebQoreClient.__init__
File "qore_sdk/client.pyx", line 73, in qore_sdk.client.WebQoreClient._login
File "qore_sdk/client.pyx", line 63, in qore_sdk.client.WebQoreClient._request
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 525, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 543, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 503, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1360, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
SSLの証明書が駄目だったらしい・・・。
調べてるとSSL認証を無視するという悪魔のコード👿を見つけたので追記して実行します
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
無事ログインできました!
※なお、このエラーはQoreさんのサーバーの問題ではなく、完全に自分のPCの環境の問題です。googleさんにもアクセスできませんでした・・・。
躓いたポイント6:データフォーマット
データを学習させるためにどんなデータをサーバーに投げればよいか、ですが、ドキュメントのこちらに書いてあります
https://qcore-info.github.io/advent-calendar-2019/index.html#qore_sdk.client.WebQoreClient.classifier_train
書いてはあるんですが、時間じゃなくて時間方向ってなんだ??データ数が配列の1つとしてあるの?? みたいに混乱状態に陥りました。
そしてここでアドベントカレンダーのタイムリミットでした。
まとめ
社外の人の最初のアドベントカレンダーがこんなのでとても申し訳ないです・・・
まだ自分には機械学習は早かったようです・・・・。
ここらへんの部分がちゃちゃっとおわったら、距離センサつかってドアの開け方で個人判定できないかなとか、ミニ四駆チキンレースにAI搭載のせられないかとか思ってましたが、それ以前の問題でした。
アドベントカレンダーをみんなが書いて知見がたまってきたらまたチャレンジしようと思います。
よくわからなかった単語集
acc : accuracy。正確さ。 1がより良くて0が駄目
f1 : f値。精度と再現率の調和平均。・・・ってなんだろう?1に近いとと良さそう
変量数 : ??
特徴抽出 : ??
小時系列:??