Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScriptでも機械学習がやりたかった話
Search
yujiosaka
November 07, 2018
Programming
500
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScriptでも機械学習がやりたかった話
yujiosaka
November 07, 2018
More Decks by yujiosaka
See All by yujiosaka
I was understanding WASM all wrong! 🤯
yujiosaka
2
350
Machine Learning with JavaScript
yujiosaka
0
230
ヘッドレスChromeでクローラを作った後の話
yujiosaka
3
750
俺が最初にヘッドレスChromeでクローラ作った 事になんねーかな
yujiosaka
4
1.4k
『XXX』のための管理画面
yujiosaka
1
1.5k
Enjoy Deep Learning by JavaScript
yujiosaka
1
400
ひたすら楽してディープラーニング
yujiosaka
20
13k
technology x business
yujiosaka
3
610
第二回もんご祭 パネルディスカッション
yujiosaka
0
940
Other Decks in Programming
See All in Programming
バグを直したら useEffect が消えた
colorful12
3
700
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
440
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.7k
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
330
源内ハンズオン概要編
hideg
0
210
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
110
Dockerfile CMD for Node.js
grazie1999
0
120
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
300
ALB ログから Trace を気合で繋げる技術
fohte
5
560
リアルな遅延を測る仕様
kota_yata
1
130
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
530
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
490
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Side Projects
sachag
455
43k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
The agentic SEO stack - context over prompts
schlessera
0
880
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Six Lessons from altMBA
skipperchong
29
4.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Technical Leadership for Architectural Decision Making
baasie
3
530
KATA
mclloyd
PRO
35
15k
Transcript
Yuji Isobe JavaScriptͰ ػցֶश͕Γ͔ͨͬͨ Emotion Intelligence × GIGษڧձ
Ϛωʔδϟʔ ϝϯςφʔ @yujiosaka github.com/yujiosaka/headless-chrome-crawler
ձࣾ www.emin.co.jp
એᶃ www.zenclerk.com/
ϏδωεɾOSSϚΠϯυΛ࣋ͬͨΤϯδχΞืूʂ એᶄ www.wantedly.com/projects/233437
ຊ
1.JavaScriptͰػցֶशͲ͜·ͰͰ͖Δͷ͔ 2.JavaScriptΛ͏ϝϦοτͱσϝϦοτ 3.۩ମతͳ࣮ݱํ๏ͱσϞ ຊͷςʔϚ
ͦͦJavaScriptͰ ػցֶशͬͯ·ͱʹͰ͖Μͷʁ
JavaScriptͰσΟʔϓϥʔχϯά speakerdeck.com/yujiosaka/hitasurale-sitedeipuraningu github.com/yujiosaka/js-mind XXXSFEEJUDPNSOPEFDPNNFOUTEH KT@NJOE@EFFQ@MFBSOJOH@MJCSBSZ@XSJUUFO@JO@FT ͳΜͰJavaScriptͰ͜Μͳ͜ͱͨ͠Μͩʁ ͦΜͳͷStarཉ͠͞ʹܾ·ͬͯΔͰ͠ΐ
ਤ
࣌ͷΦν TQFBLFSEFDLDPNZVKJPTBLBIJUBTVSBMFTJUFEFJQVSBOJOHV TMJEF
࣌ͷΦν TQFBLFSEFDLDPNZVKJPTBLBIJUBTVSBMFTJUFEFJQVSBOJOHV TMJEF
A. օ͕ͬͯΔ͔Βศརʹͳ͍ͬͯ͘ Q. ͳͥσʔλαΠΤϯεPythonʁ trends.google.co.jp/trends/explore?date=today%205-y&geo=JP&q=JavaScript,Python,AI
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython Cݴޠ࣮ʴSIMD໋ྩʴֶతͳ࠷దԽʴ؆ܿͳهड़
NumPyΛͬͨߴͳߦྻܭࢉ > import time > import numpy as np >
a = np.random.random((1000, 1000)) > b = np.random.random((1000, 1000)) > t = time.time() > np.dot(a, b) > print(time.time() - t) 0.08162903785705566 Python + NumPy > const math = require('mathjs'); > const a = math.random([1000, 1000]); > const b = math.random([1000, 1000]); > const t = Date.now(); > math.multiply(a, b); > console.log((Date.now() - t) / 1000); 135.587 JavaScript + math.js
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython γϯϓϧͳΠϯλʔϑΣʔεʢfit, transform, predictʣ
XGBoost ͔Β LightGBM ͷΓସ͕͑ߦͰྃ scikit-learnͷҰ؏ͨ͠ػցֶशAPI github.com/dmlc/xgboost/ github.com/Microsoft/LightGBM
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython
σʔλαΠΤϯεΔͳΒ Pythonʢ·ͨRʣͬ͠ΐ
͚ͩͲ…
ػցֶश͚ͩͳΒ͘͠ͳ͍
JavaScriptͰͰ͖ͪΌ͏ʂ
- σʔλαΠΤϯεʹ ֶɾ౷ܭࣝͱϋοΩϯά εΩϧ͚ͩͰͳ͘ɺਂ͍ ઐੑ͕ٻΊΒΕΔ σʔλαΠΤϯεͱػցֶशͷҧ͍ ESFXDPOXBZDPN[JBUIFEBUBTDJFODFWFOOEJBHSBN ਂ͍ઐੑ ϋοΩϯά εΩϧ
ֶɾ ౷ܭࣝ ػց ֶश جૅ ݚڀ ةݥ κʔϯ σʔλ αΠΤϯε
σʔλαΠΤϯεͱػցֶशͷҧ͍ ESFXDPOXBZDPN[JBUIFEBUBTDJFODFWFOOEJBHSBN ϋοΩϯά εΩϧ ֶɾ ౷ܭࣝ ػց ֶश - ֶɾ౷ܭࣝͱ
ϋοΩϯάεΩϧ͑͋͞Εɺ ػցֶशͰ͖Δ
ਂ͍ઐੑ͕ͳͨͬͯ͘ ػցֶश͍͍ͯ͠͡Όͳ͍ ΤϯδχΞͩͷ
NumPy/Pandas - ߴɾߴػೳͳߦྻܭࢉ Matplotlib/seaborn - ख͔ܰͭߴػೳͳάϥϑඳը Jupiter Notebook - ࢼߦࡨޡ͕Γ͍͢
scikit-learn - ڞ௨ͷػցֶशAPIΛఏڙ͢Δ TensorFlow/PyTorch - GPUΛͬͨߴͳਂֶश ... σʔλαΠΤϯεΛࢧ͑ΔPython TensorFlow.js / brain.js
from tensorflow.contrib.keras.python import keras import numpy as np model =
keras.Sequential() model.add(keras.layers.Dense(units=1, input_shape=[1])) model.compile(optimizer='sgd', loss='mean_squared_error') xs = np.array([[1], [2], [3], [4]]) ys = np.array([[1], [3], [5], [7]]) model.fit(xs, ys, epochs=1000) print(model.predict(np.array([[5]]))) TensorFlow Keras
import * as tf from '@tensorlowjs/tfjs'; const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]})); model.compile({optimizer: 'sgd', loss: 'meanSquaredError'}); const xs = tf.tensor2d([[1], [2], [3], [4]], [4, 1]); const ys = tf.tensor2d([[1], [3], [5], [7]], [4, 1]); await model.fit(xs, ys, {epochs: 1000}); model.predict(tf.tensor2d([[5]], [1, 1])).print(); TensorFlow.js WebGLΛͬͨGPUܭࢉ
ͰͲ͏͍ͤΜͰ͠ΐʁ
- WebGLΛͬͨTensorFlow.js AVXΛͬͨTensorFlowͷ1.5-2ഒ͍ - ڊେͳϞσϧͷֶश10-15ഒ͔͔Δ͜ͱ͋Δ WebGLΛͬͨGPUܭࢉ KTUFOTPSqPXPSHGBR
࣮༻తʹͳΓͭͭ͋Δ
͞Βʹ
- SIMD໋ྩͱWeb Assembly͕αϙʔτ͞ΕΔ - େ෯ͳύϑΥʔϚϯε্͕ظ͞ΕΔ TensorFlow.js 2.0ͷϩʔυϚοϓ www.tensorflow.org/community/roadmap
JavaScriptͬͯͳΜ͔ ͍͍͜ͱ͋Μͷʁ
- TypeScript͕͑Δ - Universal/Isomorphic JavaScriptͷ࣮ݱ - ๛ͳNPMύοέʔδ͕׆༻Ͱ͖Δ - ඇಉظͳΦϯϥΠϯֶशʹద͍ͯ͠Δ -
ϒϥβͷϦιʔεΛ༗ޮ׆༻Ͱ͖Δ JavaScriptͰػցֶशΛߦ͏ϝϦοτ
ϒϥβ্ͰTensorFlow.jsΛಈ͔͢ qiita.com/kaneU/items/ca84c4bfcb47ac53af99
Ϧιʔεʢˇʣ͕અͰ͖Δʂ
- ϒϥβ্Ͱಛྔͷநग़ɺมɺ༧ଌΛߦ͏ͨΊ ίϐϖ͢Ε୭ͰίϐʔαΠτ͕࡞Εͯ͠·͏ - ΞϧΰϦζϜͰͳ͘ɺಛྔ͕ͦ͜ڝ૪ྗͷݯઘ - ୭͕࡞ͬͯಉ͡ͷ͕Ͱ͖Δ߹͚ͩʹཹΊΔ ※ϦόʔεΤϯδχΞϦϯάʹ ऑ͍ͷͰϏδωεͰҙ͕ඞཁ
Googleͷ2018ΤΠϓϦϧϑʔϧ ωλͰTensorFlow.js͕ΘΕͨ landing.google.co.jp/tegaki/
- ѹతͳใෆ - ߦྻܭࢉ͕؆ܿʹهड़Ͱ͖ͳ͍ - ػցֶशAPI͕ڞ௨Խ͞Ε͍ͯͳ͍ - ࠷৽ͷΞϧΰϦζϜ͕͙͢ʹར༻Ͱ͖ͳ͍ - ධՁؔͷपลϥΠϒϥϦ͕ෆ͍ͯ͠Δ
JavaScriptͰػցֶशΛߦ͏σϝϦοτ
- 1ͭ1ͭେͨ͜͠ͱͷͳ͍͕ؔͩɺ ͡Ί͔Βἧ͍ͬͯΔͱ͋Γ͕ͨΈΛ࣮ײ͢Δ ... from sklearn.cross_validation import train_test_split from sklearn.grid_search
import GridSearchCV from sklearn.metrics import classification_report ... X_train, X_test, y_train, y_test = train_test_split(X, y) ... clf = GridSearchCV(...) ... report = classification_report(y_test, y_pred) ... scikit-learnͰΑ͘ݟΒΕΔίʔυ
Python͔ʁJavaScript͔ʁ - ຊؾͰσʔλαΠΤϯεΛ͢ΔͳΒPython - Ұ͔ΒػցֶशͷΞϓϦΛ࡞ΔͳΒPython - ͪΐͬͱͨ͠ػցֶश͚ͩͳΒԿͰ͍͍ - JavaScriptܾͯ͠ѱ͍બࢶͰͳ͍
ͲΜͳΓํ͕͋Δͷʁ
TensorFlow.js - χϡʔϥϧωοτϫʔΫɾਂֶश brain.js - χϡʔϥϧωοτϫʔΫɾਂֶश Synaptic - χϡʔϥϧωοτϫʔΫɾਂֶश Natural
- ࣗવݴޠॲཧ ml.js - ༷ʑͳػցֶशϥΠϒϥϦ܈ math.js - ౷ܭɾߦྻܭࢉ JavaScriptʹΑΔػցֶशϥΠϒϥϦ js.tensorflow.org github.com/BrainJS caza.la/synaptic/ github.com/NaturalNode/natural mathjs.org github.com/mljs χϡʔϥϧωοτϫʔΫࣗମൺֱత୯७ͳߦྻܭࢉ
TensorFlow.js - χϡʔϥϧωοτϫʔΫɾਂֶश brain.js - χϡʔϥϧωοτϫʔΫɾਂֶश Synaptic - χϡʔϥϧωοτϫʔΫɾਂֶश Natural
- ࣗવݴޠॲཧ ml.js - ༷ʑͳػցֶशϥΠϒϥϦ܈ math.js - ౷ܭɾߦྻܭࢉ JavaScriptʹΑΔػցֶशϥΠϒϥϦ js.tensorflow.org github.com/BrainJS caza.la/synaptic/ github.com/NaturalNode/natural mathjs.org github.com/mljs
σϞ
> const iris = require('ml-dataset-iris'); > const { RandomForestClassifier }
= require('ml-random- forest'); > > const CLASSES = ['setosa', 'versicolor', 'virginica']; > > const X = iris.getNumbers(); > const y = iris.getClasses().map(cls => > CLASSES.indexOf(cls) > ); > const classifier = new RandomForestClassifier(); > classifier.train(X, y); > classifier.predict(X); > classifier.predict([ 6.7, 3, 5, 1.7 ]); [ 2 ] // 'virginica' mljs
JavaScriptͰ ػցֶश͕Γ͔ͨͬͨ ڪΕΔʹΒͳ͍