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
3.1k
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.
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
1.2k
QA4AIに則ったMLOpsツールの活用
hacarus
0
670
0から協働ロボット外観検査システムを3ヵ月で具現化した軌跡
hacarus
0
230
ワンちゃんの健康を願う皆様に送る 犬心電図AI解析プロダクト紹介_AWS DevDay2022
hacarus
0
180
犬の心電AI解析プロダクト開発奮闘記 _クラウドからハード開発までてんこ盛り
hacarus
0
1.7k
ExplainableAIの概要とAmazon SageMaker Clarifyでの実装例
hacarus
0
940
AWS Step Functions を用いた非同期学習処理の例
hacarus
0
1.2k
Dashでmyダッシュボードを作ろう ーpytrendsで見るコロナの感染拡大時期ー
hacarus
0
1.4k
Interpretable Machine Learning: モデル非依存な解釈手法の紹介
hacarus
0
1k
Other Decks in Technology
See All in Technology
How to Quickly Call American Airlines®️ U.S. Customer Care : Full Guide
flyaahelpguide
0
240
ゼロから始めるSREの事業貢献 - 生成AI時代のSRE成長戦略と実践 / Starting SRE from Day One
shinyorke
PRO
0
110
【あのMCPって、どんな処理してるの?】 AWS CDKでの開発で便利なAWS MCP Servers特集
yoshimi0227
6
950
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
39k
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
0
110
サイバーエージェントグループのSRE10年の歩みとAI時代の生存戦略
shotatsuge
4
1k
組織内、組織間の資産保護に必要なアイデンティティ基盤と関連技術の最新動向
fujie
0
270
AI エージェントと考え直すデータ基盤
na0
20
7.9k
Data Engineering Study#30 LT資料
tetsuroito
1
180
Autify Company Deck
autifyhq
2
44k
shake-upを科学する
rsakata
7
1k
公開初日に Gemini CLI を試した話や FFmpeg と組み合わせてみた話など / Gemini CLI 初学者勉強会(#AI道場)
you
PRO
0
1.3k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Balancing Empowerment & Direction
lara
1
450
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Git: the NoSQL Database
bkeepers
PRO
430
65k
GraphQLとの向き合い方2022年版
quramy
49
14k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Producing Creativity
orderedlist
PRO
346
40k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
750
Why Our Code Smells
bkeepers
PRO
337
57k
The Invisible Side of Design
smashingmag
301
51k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
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