tl;dr
- J'ai créé une application d'estimation de l'entraînement musculaire
--Qore utilise un algorithme appelé calcul du réservoir
- Exécution d'une tâche de classification des données de séries chronologiques à partir de données d'accélération pouvant être acquises avec un smartphone.
- Code
- La précision est plutôt bonne
- Données de test, précision 99,6%
――Vous devriez être un ingénieur musculaire avec ce
stratégie
- Recueillir les données du capteur d'accélération avec un smartphone (iphone)
- Vous pouvez obtenir des données de série chronologique avec 3 composantes des axes x, y, z
--Apprentissage avec 4 types d'entraînement musculaire: bras debout, muscle abdominal, squat, rouleau musculaire abdominal
――Vous pouvez voir quel type d'entraînement musculaire vous avez fait avec juste votre smartphone
Collecte de données
- Entraînement musculaire avec votre smartphone dans la poche de votre pantalon
――Cette fois, dans n'importe quel entraînement musculaire, placez le smartphone dans la poche dans le même sens
――Il semble qu'il sera plus difficile d'estimer si vous le tournez dans une direction différente.
―― J'ai utilisé l'application suivante pour mesurer l'accélération.
- ["Acceleration / Gyroscope / Magnetic Sensor Logger"](https://apps.apple.com/jp/app/%E5%8A%A0%E9%80%9F%E5%BA%A6-%E3% 82% B8% E3% 83% A3% E3% 82% A4% E3% 83% AD% E3% 82% B9% E3% 82% B3% E3% 83% BC% E3% 83% 97-% E7% A3 % 81% E5% 8A% 9B% E3% 82% BB% E3% 83% B3% E3% 82% B5% E3% 83% BC% E3% 83% AD% E3% 82% AC% E3% 83% BC / id448070865)
- L'intervalle de mesure est de 0,1 s
--Nombre d'entraînements musculaires effectués
- Support de bras: 21 fois (~ 35 sec)
- Muscle abdominal: 20 fois (~ 66 sec)
--Squat: 20 fois (~ 51 sec)
- Rouleau musculaire abdominal (rouleau assis): 12 fois (~ 50 sec)
- Vous devez faire plus d'entraînement musculaire pour augmenter la quantité de données
――Vous devriez pouvoir devenir un macho éventuellement
―― Voici les données brutes de l'accélération réellement mesurée.
--Muscle abdominal
--S'accroupir
- Rouleau musculaire abdominal (rouleau assis)
«C'est périodique, et j'ai obtenu de plus belles données que je ne m'y attendais.
Prétraitement des données
- J'ai essayé d'utiliser qore_sdk.utils fourni par QoreSDK.
- sliding_window
- Diviser la série chronologique en plusieurs petites séries chronologiques
- Pré-traitement requis pour transmettre les données à l'API (en faire 3D)
- under_sample
--Aligner le nombre d'échantillons par classe
- Il y avait un biais dans le nombre de données réellement mesurées
«Habituellement, dans l'apprentissage automatique, la précision est tirée par des données avec un grand nombre de données, nous l'avons donc ajustée au nombre de données de la classe avec le plus petit nombre.
--Il y a une limite à la taille des données d'entrée lors de l'apprentissage
- N*T*V < 150,000 && N*T < 10,000
«Au début, je ne comprenais pas la signification de chaque alphabet (je pensais que c'était un ensemble canonique parce que c'était à l'origine un système biophysique!?), Mais cela semble être le suivant.
--N: nombre de petites séries chronologiques
--T: Petite série chronologique (temps?)
--V: nombre de caractéristiques (dans ce cas, x, y, z accélération 3)
Apprentissage et raisonnement
- Pour l'apprentissage et le raisonnement, [Exemple de code](https://github.com/qcore-info/advent-calendar-2019/blob/master/Qore%E3%82%B5%E3%83%B3%E3%83 % 97% E3% 83% AB1_with_UCI.ipynb) Exactement la même
- Configurez les informations de votre compte ci-dessous
client = WebQoreClient(username=username,
password=password,
endpoint=endpoint)
--Apprenez ci-dessous
res = client.classifier_train(X=X_train, Y=y_train)
print(res)
# {'res': 'ok', 'train_time': 7.2200915813446045}
――L'apprentissage s'est terminé en 7,2 secondes environ
--Assez tôt
--Test (inférence)
res = client.classifier_test(X=X_test, Y=y_test)
print(res)
{'accuracy': 0.9964285714285714, 'f1': 0.9964301018846474, 'res': 'ok'}
--La précision est de 0,9964
Régression linéaire, comparaison avec un apprentissage profond simple
- Ceci est également l'exemple de code
--Régression linéaire
--Temps d'apprentissage: 0,28547000885009766 \ [sec ]
- Précision: 0.9964285714285714
- MLP (Using Sklearn)
--Temps d'apprentissage: 0,7626857757568359 \ [sec ]
- Précision: 0.9928571428571429
- Les deux sont légèrement inférieurs au SDK Qore, mais toujours plus précis
- Le problème est-il trop simple?
Impressions que j'ai essayé d'utiliser
--SDK était simple et facile à utiliser
――La précision était élevée, mais la régression linéaire et la MLP ont également donné une précision suffisante.
- Le problème était peut-être trop simple
--Je veux essayer une tâche d'estimation plus difficile
--Je voudrais vérifier ce qui se passe si j'utilise qore_sdk.featurizer que je n'ai pas pu essayer cette fois (heure) s'il y a)
Ci-dessous, ce que j'ai étudié et organisé
L'algorithme de Qore
L'article suivant (1er jour du calendrier de l'Avent) a une brève explication.
[Le monde de l'informatique de réservoir ~ Avec Qore ~ --Qiita](https://qiita.com/ryoppippi/items/f607c8828238094eade0#qore%E3%81%AB%E3%81%A4%E3%81%84%E3% 81% A6)
C'est une application du calcul des réservoirs et a été légèrement modifiée.
Obtenez un modèle très précis même avec une petite taille de réservoir en l'améliorant à plusieurs reprises indépendamment et en développant un mécanisme unique non seulement pour l'intérieur du réservoir mais aussi pour le prétraitement et le post-traitement.
Il paraît que.
Cela semble-t-il basé sur l'article suivant?
Van der Sande, Guy & Brunner, Daniel & Soriano, Miguel. (2017). Advances in photonic reservoir computing. Nanophotonics. 6. 561-576. 10.1515/nanoph-2016-0132.
Je veux le lire quand j'en ai le temps.
Code de procédure spécifique
Le notebook jupyter a été publié dans le référentiel suivant.
Consultez les scripts README et notebook pour obtenir des instructions.
GitHub - hnishi/muscle_QoreSDK_AdvCal2019
Ce que vous pouvez faire avec le SDK Qore
--Tâche de classification de classification
- classifier_train
--Tâche de régression de régression
- regression_train
- Extraction de fonctionnalités par décomposition de fréquence en série chronologique (je veux comparer avec et sans utilisation)
- Featurizer
- Diviser la série chronologique en plusieurs petites séries chronologiques (facile à utiliser)
- sliding_window
--Fonction pour faire correspondre le nombre d'étiquettes (facile à utiliser)
- under_sample
――Parce que c'est un gros problème, je voulais utiliser toutes les fonctionnalités du SDK Qure.
――Je souhaite que vous puissiez détecter les points de changement et les anomalies.
Lien vers le document officiel
advent repo
GitHub --qcore-info / advent-calendar-2019: Apprentissage automatique et technologies appliquées autres que l'apprentissage en profondeur par QuantumCore Advent Calendar 2019
QoreSDK doc
QoreSDK 0.1.0 documentation
2019/12/22 postscript
Featurizer le rend encore plus précis
L'extraction de caractéristiques est effectuée par décomposition de fréquence de sorte que le nombre de classes soit de 40.
n_filters = 40
featurizer = Featurizer(n_filters)
X = featurizer.featurize(X, axis=2)
La précision QoreSDK pour les données de test est ci-dessous
acc= 1.0
f1= 1.0
elapsed_time:52.20956110954285[sec]
Le résultat est une précision de 1.
Au contraire, la régression logistique et le MLP sont moins précis qu'avant d'utiliser Featurizer.
===LogisticRegression(Using Sklearn)===
elapsed_time:0.2480778694152832[sec]
acc= 0.6291666666666667
f1= 0.630372638509498
===MLP(Using Sklearn)===
elapsed_time:8.673331499099731[sec]
acc= 0.95
f1= 0.9502859082452324
Ajout de l'état sans entraînement musculaire
Ajout de l'état d'entraînement non musculaire à la classe de tâches de classification.
(Les données ont été collectées à titre de contrôle lors de la préparation du déjeuner.)
Encore une fois, la précision était de 1.
Cliquez ici pour le cahier utilisé pour le travail.
https://github.com/hnishi/muscle_QoreSDK_AdvCal2019/blob/master/muscle_QoreSDK_v2.ipynb
Valider avec les données nouvellement acquises
Créez un ensemble de données différent de celui utilisé au moment de l'apprentissage avec le rouleau de muscle abdominal.
Une inférence a été faite en utilisant ces données.
Cliquez ici pour le cahier utilisé pour le travail.
https://github.com/hnishi/muscle_QoreSDK_AdvCal2019/blob/master/muscle_QoreSDK_v2.ipynb
En conséquence, l'exactitude de ces données de vérification est la suivante
- QoreSDK
- acc= 0.6855791962174941
- f1= 0.8134642356241235
- LogisticRegression(Using Sklearn)
- acc= 0.20094562647754138
- f1= 0.3346456692913386
- MLP(Using Sklearn)
- acc= 0.27423167848699764
- f1= 0.43042671614100186
Avec le QoreSDK, le taux de réponse correcte était d'environ 70%.
Afin d'améliorer la précision, il semble nécessaire d'étendre et d'apprendre divers modèles de données d'apprentissage pour chaque élément d'entraînement musculaire.