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
Python ではじめるスパースモデリング
Search
Hacarus Inc.
May 19, 2018
Technology
1
2.8k
Python ではじめるスパースモデリング
Presentation Slides at PyCon mini Osaka 2018
https://osaka.pycon.jp/
Hacarus Inc.
May 19, 2018
Tweet
Share
More Decks by Hacarus Inc.
See All by Hacarus Inc.
QA4AIに則ったMLOpsツールの活用
hacarus
0
570
0から協働ロボット外観検査システムを3ヵ月で具現化した軌跡
hacarus
0
91
ワンちゃんの健康を願う皆様に送る 犬心電図AI解析プロダクト紹介_AWS DevDay2022
hacarus
0
110
犬の心電AI解析プロダクト開発奮闘記 _クラウドからハード開発までてんこ盛り
hacarus
0
1.3k
ExplainableAIの概要とAmazon SageMaker Clarifyでの実装例
hacarus
0
630
AWS Step Functions を用いた非同期学習処理の例
hacarus
0
660
Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー
hacarus
0
890
Interpretable Machine Learning: モデル非依存な解釈手法の紹介
hacarus
0
750
時系列データ予測手法の宇宙天気予報への応用
hacarus
0
1k
Other Decks in Technology
See All in Technology
20分で完全に理解するGrafanaダッシュボード
hamadakoji
1
180
Databricks における 『MLOps』
databricksjapan
2
170
コンパウンドスタートアップのためのスケーラブルでセキュアなInfrastructure as Codeパイプラインを考える / Scalable and Secure Infrastructure as Code Pipeline for a Compound Startup
yuyatakeyama
4
4.7k
SPI原点回帰論:事業課題とFour Keysの結節点を見出す実践的ソフトウェアプロセス改善 / DevOpsDays Tokyo 2024
visional_engineering_and_design
4
1.9k
Azure Container Apps + Bicep 〜 こんな感じで運用しています
kaz29
2
440
ゼロから始めるVue.jsコミュニティ貢献 / first-vuejs-community-contribution-link-and-motivation
lmi
1
110
継続的な改善 x ⾮連続的な進化
sansantech
PRO
3
140
Delivering Millions of Messages within seconds @ Duolingo
pelelgrino
0
350
Reducing Cross-Zone Egress at Spotify with Custom gRPC Load Balancing Recap
koh_naga
0
190
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
240
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
120
検証を通して見えてきたTiDBの性能特性
lycorptech_jp
PRO
6
3.7k
Featured
See All Featured
Side Projects
sachag
451
41k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
2
3.4k
A Philosophy of Restraint
colly
197
16k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Imperfection Machines: The Place of Print at Facebook
scottboms
260
12k
How to name files
jennybc
65
93k
Practical Orchestrator
shlominoach
182
9.7k
Navigating Team Friction
lara
178
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
274
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
6
1.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
Transcript
Python ではじめるスパースモデリング 2018年5月19日 PyCon mini Osaka @ ヤフー株式会社 GFOオフィス
છాوࢤ ͦΊ͔ͩͨ͠ • גࣜձࣾϋΧϧε औక$50 • 1ZUIPOྺ • .BDIJOF-FBSOJOH.FFUVQ,"/4"*
্ཱͪ͛ • IUUQTNMNLBOTBJDPOOQBTTDPN
ϋΧϧεͱ • ϥΠϑαΠΤϯεɾ࢈ۀ Y"* • εύʔεϞσϦϯάΛ࣠ͱͨ͠σʔλղੳ • ౦େֶɾେؔਅ೭।ڭत͕ΞυόΠβʔ
ຊͷΰʔϧ • εύʔεϞσϦϯάΛͬͯΒ͏ • 1ZUIPOͰͷΞϧΰϦζϜ࣮ΛΈͯΒ͏ • ߟ͑ํɾಛʹڵຯΛͬͯΒ͏
εύʔεϞσϦϯάͱ
εύʔεϞσϦϯά • σʔλʹࡏ͢Δεύʔεੑʹணͯ͠ɺࣄ ΛϞσϧԽ͢Δख๏ • ୯ҰͷΞϧΰϦζϜΛࢦ͢Θ͚Ͱͳ͍ • ࠒ͔Β׆ൃʹݚڀ͞Ε͍ͯΔ
σϞ • Χϝϥ͔Βͷը૾Λֶश • എܠΛਪఆ • ҠಈମΛݕग़
ػցֶशͷಋೖ࣌ͷ՝ • ࣗಈԽ͍͕ͨ͠ɺઆ໌͋Δ • σʔλऩूͷ࣌ؒίετ͕େ͖͍ • ϋʔυΣΞͷίετ͍͑ͨ
εύʔεϞσϦϯάͷظ • ೖྗಛྔͷதͷॏཁͳͷ͕Θ͔Δ • গྔͷใ͔ΒਪఆΛߦ͑Δ • (16ڥҎ֎Ͱಈ࡞͢Δ
ઢܗճؼͰͷεύʔεϞσϦϯά • લఏ • ग़ྗ Z ɺೖྗ Yͷઢܗ݁߹ͱ؍ଌϊΠζЏͰදݱ͞ΕΔ • ೖྗ
Y N ࣍ݩɺ؍ଌ͞Εͨ Z O ݸ͋Δͱ͢Δ ! = #$ %$ + ⋯ + #( %( + ) 㱺 Z Λ͍͍ײ͡ʹઆ໌͢Δ X ΛΓ͍ͨ
ઢܗճؼͰͷεύʔεϞσϦϯά • ղ͖͘ • ؍ଌ Z ͱਪఆͨ͠ X ͔Βܭࢉ͞ΕΔͷೋޡࠩΛ࠷খԽ min
1 2 & − () * 㱺 Z ͷαϯϓϧ͕ Y ͷ࣍ݩΑΓখ͍͞߹ʁ
εύʔε੍ͷՃ • ະͷΑΓํఔࣜͷ͕গͳ͍࿈ཱํఔࣜ • Yʹର͢Δεύʔεͳ੍ΛՃͯ͠ղ͘ • ʮͳΔ͘গͳ͍ Y Ͱ݅Λຬͨ͢ʯ 㱺ʮͳΔ͘ଟ͘ͷ
X Λ ʹ͢Δʯ • ૉʹΔͱɺΈ߹Θͤ࠷దԽ㽊
-ϊϧϜ࠷దԽ • ੍݅Λ؇ • ʮX ͷઈରͷ૯ΛͳΔ͘খ͘͢͞Δʯ • ؇ͯ͠େҬత࠷దղ͕ಘΒΕΔ • తʹղ͘͜ͱ͕Ͱ͖Δ
• -FBTU"CTPMVUF4ISJOLBHFBOE4FMFDUJPO 0QFSBUPS ͷུ • -ϊϧϜΛਖ਼ଇԽ߲ͱͯ͠Ճͨ͠తؔ -BTTP min 1 2
& − () * + , ( - 㱺 ਖ਼ଇԽύϥϝʔλЕͰεύʔε੍ͷޮ͖Λௐ
छʑͷΞϧΰϦζϜ • ࠲ඪ߱Լ๏ $PPSEJOBUF%FTDFOU • ࠷খ֯ճؼ -FBTU"OHMF3FHSFTTJPO • ෮ॖখᮢΞϧΰϦζϜ *45"
• ަޓํ๏ "%..
ྫɿ࠲ඪ߱Լ๏ͷΞϧΰϦζϜ 1. #$ % = 1, … , ) ΛॳظԽ
2. + #$ = , - . /0 . 1 , 2 Ͱߋ৽ 3($) = 6 − 8 9:$ ; 9 #9 ͱ͠ɺ, ೈᮢ࡞༻ૉͱ͢Δ 3. ऩଋ݅·Ͱ܁Γฦ͠
ೈᮢ࡞༻ૉ • Λθϩʹ͚ۙͮΔ࡞༻Λ࣋ͭ S ", $ = & " −
$, (" ≥ $) 0, (−$ < " < $) " + $, (" ≤ −$)
ྫɿ࠲ඪ߱Լ๏ͷ࣮ྫ # def soft_threshold(X, thresh): return np.where(np.abs(X) <= thresh,
0, X - thresh * np.sign(X)) # w_cd = np.zeros(n_features) for _ in range(n_iter): for j in range(n_features): w_cd[j] = 0.0 r_j = y - np.dot(X, w_cd) w_cd[j] = soft_threshold(np.dot(X[:, j], r_j) / n_samples, alpha)
࣮ߦ݁Ռ ೖྗಛྔͷ࣍ݩ ඇθϩཁૉ αϯϓϧ
ͦͷଞͷ࣮ • TDJLJUMFBSO • ࠲ඪ߱Լ๏ͱ࠷খ֯ճؼ • IUUQTDJLJUMFBSOPSHTUBCMFNPEVMFTHFOFSBUFETLMFBSOMJOFBS@NPEFM-BTTPIUNM • IUUQTDJLJUMFBSOPSHTUBCMFNPEVMFTHFOFSBUFETLMFBSOMJOFBS@NPEFM-BTTP-BSTIUNM •
TQNJNBHF • ަޓํ๏ • IUUQTHJUIVCDPNIBDBSVTTQNJNBHFCMPCEFWFMPQNFOUTQNJNBHFMJOFBS@NPEFMBENNQZ
TQNJNBHF • εύʔεϞσϦϯά༻ϥΠϒϥϦ • ը૾ղੳʹ༻͍ΒΕΔΞϧΰϦζϜΛத৺ʹ • TDJLJUMFBSOΠϯλʔϑΣʔεʹ४ڌ • IUUQTHJUIVCDPNIBDBSVTTQNJNBHF
ը૾ॲཧͷద༻ • جຊΞΠσΟΞ • ը૾͔ΒύονΛΓग़͢ • ύονΛಉαΠζͷࣙॻجఈͷઢܕ݁߹Ͱදݱ͢Δ • ը૾શମΛදݱ͢ΔͨΊࣙॻֶश͢Δ
ը૾ॲཧͷద༻ :ը૾ "ࣙॻ ! "# $# 9
ࣙॻʹΑΔ࠶ߏ Yύον جఈͰͷ࠶ߏ݁Ռ
ྫɿࣙॻֶशͱ࠶ߏ # patches = extract_simple_patches_2d(img, patch_size) #
patches = patches.reshape(patches.shape[0], -1).astype(np.float64) intercept = np.mean(patches, axis=0) patches -= intercept patches /= np.std(patches, axis=0) # model = MiniBatchDictionaryLearning(n_components=n_basis, alpha=1, n_iter=n_iter, n_jobs=1) model.fit(patches) # reconstructed_patches = np.dot(code, model.components_) reconstructed_patches = reconstructed_patches.reshape(len(patches), *patch_size) reconstructed = reconstruct_from_simple_patches_2d(reconstructed_patches, img.shape)
ܽଛิͷద༻ ܽଛΛߟྀͨࣙ͠ॻֶशʹΑΔใ෮ݩ ը૾ :ʹର͠ྼԽ࡞༻ૉ .͕͔͔Δͱߟ͑ͯॲཧΛߦ͏
·ͱΊ
εύʔεϞσϦϯάͱ • ೖྗಛྔͷதͷॏཁͳͷ͕Θ͔Δ • গྔͷใͰ͡ΊΔ͜ͱ͕Ͱ͖Δ • طଘ࣮ΛͬͯؾܰʹࢼͤΔ • TDJLJUMFBSO TQNJNBHF
• ຊͷ༰ ˠ IUUQTHJUJPWQY2