登場人物
俺
機械学習ズブの素人。
後輩
機械学習むっちゃできる。
まず「リザーバコンピューティング」とは何なのか?
俺「よし、とりあえずQoreSDK使ってみっか」
俺「なになに。リザーバコンピューティングとは、多変量時系列データの解析に適しており・・・」
俺「多変量時系列データとはなんぞ・・・」
・・・会社にて・・・
俺「なーなー後輩氏。リザーばコンピューティングとはなんぞ?」
後輩「パイセンそんなことも知らないんっスか?」
後輩「いいっスか先輩?多変量時系列データとは・・・
・・・ちゃんとした説明・・・
」
俺「(よう分からん)」
要するに、「複数のファクターから形成される時系列データ」で、
声や心音のようなデータが得意
と言う感じで理解した。
とりあえずやってみよう
Kaggleからデータを落とす
俺「なんか心音とか声がいいってゆーとったな」
俺「心音はサンプルあったから声をやってみよう」
と言うわけで、男女別の音声データを使用してみよう
あとはサンプルを改造するだけでやってみっぞ!
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%行くで」
最後に
とりあえずRaspiでも快適に動作しました。
(わざわざRaspi4を使うまでもなかったか・・・)
やはり前処理は大事
明日から前処理をちゃんと勉強して再チャレンジします。