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
面倒な作業はAIにおまかせ。Flutter開発をスマートに効率化
ruideengineer
0
250
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
2
16k
United Airlines Customer Service– Call 1-833-341-3142 Now!
airhelp
0
170
KiCadでPad on Viaの基板作ってみた
iotengineer22
0
300
Beyond Kaniko: Navigating Unprivileged Container Image Creation
f30
0
130
2025-07-06 QGIS初級ハンズオン「はじめてのQGIS」
kou_kita
0
170
Flutter向けPDFビューア、pdfrxのpdfium WASM対応について
espresso3389
0
130
React開発にStorybookとCopilotを導入して、爆速でUIを編集・確認する方法
yu_kod
1
270
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
960
fukabori.fm 出張版: 売上高617億円と高稼働率を陰で支えた社内ツール開発のあれこれ話 / 20250704 Yoshimasa Iwase & Tomoo Morikawa
shift_evolve
PRO
2
7.6k
ビギナーであり続ける/beginning
ikuodanaka
3
750
Tokyo_reInforce_2025_recap_iam_access_analyzer
hiashisan
0
180
Featured
See All Featured
Speed Design
sergeychernyshev
32
1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Navigating Team Friction
lara
187
15k
Docker and Python
trallard
44
3.5k
Bash Introduction
62gerente
613
210k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Code Reviewing Like a Champion
maltzj
524
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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