LoginSignup
2
0

More than 3 years have passed since last update.

機械学習のズブの素人が頑張ってQoreSDKを触ってみる

Last updated at Posted at 2019-12-13

登場人物

機械学習ズブの素人。

後輩

機械学習むっちゃできる。

まず「リザーバコンピューティング」とは何なのか?

俺「よし、とりあえずQoreSDK使ってみっか」

俺「なになに。リザーバコンピューティングとは、多変量時系列データの解析に適しており・・・」

俺「多変量時系列データとはなんぞ・・・」

・・・会社にて・・・

俺「なーなー後輩氏。リザーばコンピューティングとはなんぞ?」

後輩「パイセンそんなことも知らないんっスか?」

後輩「いいっスか先輩?多変量時系列データとは・・・

  ・・・ちゃんとした説明・・・

  」

俺「(よう分からん)」

要するに、「複数のファクターから形成される時系列データ」で、
声や心音のようなデータが得意

と言う感じで理解した。

とりあえずやってみよう

Kaggleからデータを落とす

俺「なんか心音とか声がいいってゆーとったな」

俺「心音はサンプルあったから声をやってみよう」

と言うわけで、男女別の音声データを使用してみよう

あとはサンプルを改造するだけでやってみっぞ!

import
from qore_sdk.client import WebQoreClient
from sklearn import model_selection
from sklearn.metrics import accuracy_score, f1_score
from sklearn.neural_network import MLPClassifier
from sklearn.linear_model import LogisticRegression
import time
import numpy as np
import pandas as pd
import json
import os
データ分割
csv = pd.read_csv('voice.csv')

ratio = 0.7

df = csv.reindex(np.random.permutation(csv.index)).reset_index(drop=True) # ランダムに並べ替える(ソートされたデータには効果が高い)

# 分割
p = int(ratio * len(csv)) # 分割点を計算
df1 = df.iloc[:p, :]
df2 = df.iloc[p:, :]

labelがmale/famaleだったので変換。
あとOne-Hotもしたかったが、以下のコードだとエラーが発生したので0/1とした。

エラーになったコード
train_y = pd.get_dummies(df1['label'])
test_y = pd.get_dummies(df2['label'])

↓に変更

変更後
train_y = df1['label'].replace('male', 0).replace('female', 1)
test_y = df2['label'].replace('male', 0).replace('female', 1)

ここが悩んだところ。
PandasのDataFrameからjsonに戻せなかったので力技。

型変換
train_x = json.loads(train_x.to_json(orient='values'))
train_y = json.loads(train_y.to_json(orient='values'))
test_x  = json.loads(test_x.to_json(orient='values'))
test_y  = json.loads(test_y.to_json(orient='values'))

あとはそのまま

学習
start = time.time()
res = client.classifier_train(X=train_x, Y=train_y)
print(res)
計測
res = client.classifier_test(X=test_x, Y=test_y)
print(res)

なお、正答率は0.7程度だった。

まあ速いのは間違いなかった。

後輩「データを加工するのじゃ」

俺「はっ!そういえば後輩氏がなんか言っとったな。
  なんか -1〜1にデータを抑えればいい・・・だったか?」

とりあえずでっかいデータをちっさくしよう。

データ補完
csv['skew'] = csv['skew'] / 30
csv['maxdom'] = csv['maxdom'] / 30
csv['mindom'] = csv['mindom'] / 30
csv['meandom'] = csv['meandom'] / 30
csv['dfrange'] = csv['dfrange'] - 1.0
csv['kurt'] = csv['kurt'] / 1200

再チャレンジ!

結果:0.835

俺「よっしゃ!上がったわ。流石Qore。簡単やな。」

衝撃でもない事実

Kaggle先生「最適なデータセットなら99%行くで」

スクリーンショット 2019-12-13 17.55.21.png

最後に

とりあえずRaspiでも快適に動作しました。
(わざわざRaspi4を使うまでもなかったか・・・)

やはり前処理は大事
明日から前処理をちゃんと勉強して再チャレンジします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0